Все записи автора Дмитрий (Admin)

Как в Visual Studio создать новый проект на языке C# (.NET)

Автор записи: Дмитрий (Admin)

CSharp-основы(Если у Вас еще нет Visual Studio, то прочитайте в данной статье как ее бесплатно и абсолютно легально получить, установить и настроить для работы).

В Visual Studio есть 2 понятия: Решение и Проект. Можно воспринимать Решение как некую папку, в которой хранятся Проекты. В одном Решении может содержаться несколько Проектов, проекты могут быть на разных языках программирования.

По этой причине есть 2 способа создания нового Проекта:

  1. Вместе с созданием нового Решения.
  2. Добавить Проект в существующее Решение, это удобно, если Вы, например, пишите Торгового робота, или просто какую-то программу взаимодействующую с терминалом QUIK посредством библиотеки DLL. Тогда, разместив в одном решении проект библиотеки и проект приложения на C#, Вам будет удобно переключаться между файлами этих проектов для редактирования.

Смотреть полностью...

Взаимодействие Lua и библиотеки DLL, написанной на C/C++

Автор записи: Дмитрий (Admin)

Qlua-csharp-connector-dll
Взаимодействие происходит по стандартному алгоритму: в скрипте QLua(Lua) вызываются функции из подключенной при помощи директивы "require" библиотеки DLL, написанной на языке C/C++ (о том как ее создать, можно прочитать в данной статье). В функцию можно передавать данные, в виде параметров. Обрабатывать их внутри функции и получать в скрипт результат(ы) выполнения функции.

Для этого служит Lua-стек, который представляет из себя массив разнотипных данных (таблицу Lua). Первое значение, помещенное в стек, получает индекс 1, второе - 2 и т.д.

Для каждого отдельного вызова функции автоматически используется отдельный стек!

Получить результаты можно обычным способом, и, если их несколько, используя параллельное присваивание.
Пример, если бы функция из приведенного примера DLL возвращала 4 значения:Смотреть полностью...

Коннектор DLL QUIK - QLua(Lua) - C++

Автор записи: Дмитрий (Admin)

Qlua-csharp-connector-dll
Для Quik 8 x64 (Lua 5.1) скачать готовое решение VS 2019 Community можно по этой ссылке 
Для Quik 8 x64 (Lua 5.3.5) скачать готовое решение VS 2019 Community можно по этой ссылке

Для того, чтобы обмениваться данными между скриптом Qlua и приложением на C# требуется библиотека DLL, написанная на языке C/C++. Для этого в Visual Studio нужно "Создать проект", выбрав язык C++ и тип проекта "Пустой проект". Создайте новую папку для проекта, если необходимо.Смотреть полностью...

Сервисные функции QLua(Lua)

Автор записи: Дмитрий (Admin)

Qlua-основы
isConnected()   - возвращает 1, если QUIK подключен к серверу и 0, если не подключен

getScriptPath()   - возвращает путь, по которому находится скрипт, без последнего обратного слэша ("\"), например, "C:\Program Files (x86)\Info\MyLua"

getInfoParam()   - возвращает значение параметра из окна:"Связь" -> "Информационное окно..."
Смотреть полностью...

Приведение типов в QLua(Lua)

Автор записи: Дмитрий (Admin)

Qlua-основы
Для приведения типов в QLua(Lua) служат всего 2 функции:

tostring()   - принимает любой параметр и конвертирует его в строку в подходящем формате, для применения конкретного формата, используйте функцию string.format

tonumber()   - пытается преобразовать переданный параметр в число, иначе возвращает nil

Демо-доступ QUIK для тестирования скриптов и роботов на QLua(Lua)

Автор записи: Дмитрий (Admin)

QUIK-demo-dostup
Для того, чтобы не заниматься отладкой и тестированием скриптов, или роботов на реальном счете, рекомендуется получить демо-доступ к терминалу QUIK.
Для этого, перейдите по этой ссылке на сайт разработчика. Впишите свои данные в форму, как показано на рисунке ниже:Смотреть полностью...

Получение данных из таблиц QUIK в QLua(Lua)

Автор записи: Дмитрий (Admin)

QUIK-Qlua-poluchenie-dannyh Для получения данных из таблиц терминала QUIK удобно пользоваться 3-мя функциями: getItem(), getNumberOf() и getParamEx().

Пример:

-- Перебирает строки таблицы "Позиции по клиентским счетам (фьючерсы)", ищет Текущие чистые позиции по инструменту "RIH5"
for i = 0,getNumberOf("FUTURES_CLIENT_HOLDING") - 1 do
   -- ЕСЛИ строка по нужному инструменту И чистая позиция не равна нулю ТО
   if getItem("FUTURES_CLIENT_HOLDING",i).sec_code == "RIH5" and getItem("FUTURES_CLIENT_HOLDING",i).totalnet ~= 0 then
      -- ЕСЛИ текущая чистая позиция > 0, ТО открыта длинная позиция (BUY)
      if getItem("FUTURES_CLIENT_HOLDING",i).totalnet > 0 then
         IsBuy = true;
         BuyVol = getItem("FUTURES_CLIENT_HOLDING",i).totalnet;	-- Количество лотов в позиции BUY
      else   -- ИНАЧЕ открыта короткая позиция (SELL)
         IsSell = true;
         SellVol = math.abs(getItem("FUTURES_CLIENT_HOLDING",i).totalnet); -- Количество лотов в позиции SELL
      end;
   end;
end;

Далее перечислены таблицы, их идентификаторы и поля, к которым можно обращаться:Смотреть полностью...

Получение стакана из QUIK в QLua(Lua)

Автор записи: Дмитрий (Admin)

QUIK-Qlua-poluchenie-dannyh
Для получения стакана в QLua(Lua) служит функция обратного вызова OnQuote(). Эта функция вызывается терминалом QUIK при получении изменения стакана котировок. Для получения данных самого стакана служит функция getQuoteLevel2().

В терминале должен быть открыт стакан по нужному инструменту!!!

 

Пример:Смотреть полностью...

Получение обезличенных сделок из QUIK в QLua(Lua)

Автор записи: Дмитрий (Admin)

QUIK-Qlua-poluchenie-dannyh   Для получения обезличенных сделок в QLua(Lua) служит функция обратного вызова OnAllTrade(). Эта функция вызывается терминалом QUIK каждый раз при получении новой обезличенной сделки по инструменту, на который есть подписка. Чтобы сделать подписку на нужные инструменты, необходимо пройти: "Связь" -> "Заказ всех сделок...". В окне "Выбор инструментов для заказа всех сделок" выбрать нужные инструменты и нажать кнопку "Сохранить". Так же,  в терминале должно быть открыто окно "Таблицы" -> "Таблица всех сделок", в котором должно быть настроено отображение нужных инструментов (правой кнопкой мыши в окне -> "Редактировать таблицу").

 

Пример:Смотреть полностью...

Математические функции в QLua(Lua)

Автор записи: Дмитрий (Admin)

Qlua-основы
Стандартные арифметические операции:
"+" - сложение,
"-" - вычитание,
"/" - деление,
"*" - умножение,
"%" - остаток от деления (5%2 == 1).

   math.abs (x) -- Модуль x.

   math.acos(x) -- Возвращает арккосинус x

   math.asin(x) -- Возвращает арксинус x (в радианах).

   math.atan(x) -- Возвращает арктангенс x (в радианах).

   math.atan2(x, y) -- Возвращает арктангенс x/y (в радианах), но использует знаки обоих параметров для вычисления «четверти» на плоскости. (Также корректно обрабатывает случай когда y равен нулю.)Смотреть полностью...