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

Функция для работы с битовыми флагами в Qlua(Lua)

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 6, среднее: 4,33 из 5)
Загрузка...

Qlua-основы

Сейчас в QLua появилась встроенная функция bit.test, которая решает ту же задачу, т.е. смысла в использовании функции CheckBit больше нет !


true - флаг установлен
false - флаг не установлен

-- Функция проверяет установлен бит, или нет (возвращает true, или false)
CheckBit = function(flags, _bit)
   -- Проверяет, что переданные аргументы являются числами
   if type(flags) ~= "number" then error("Ошибка!!! Checkbit: 1-й аргумент не число!") end
   if type(_bit) ~= "number" then error("Ошибка!!! Checkbit: 2-й аргумент не число!") end
 
   if _bit == 0 then _bit = 0x1
   elseif _bit == 1 then _bit = 0x2
   elseif _bit == 2 then _bit = 0x4
   elseif _bit == 3 then _bit  = 0x8
   elseif _bit == 4 then _bit = 0x10
   elseif _bit == 5 then _bit = 0x20
   elseif _bit == 6 then _bit = 0x40
   elseif _bit == 7 then _bit  = 0x80
   elseif _bit == 8 then _bit = 0x100
   elseif _bit == 9 then _bit = 0x200
   elseif _bit == 10 then _bit = 0x400
   elseif _bit == 11 then _bit = 0x800
   elseif _bit == 12 then _bit  = 0x1000
   elseif _bit == 13 then _bit = 0x2000
   elseif _bit == 14 then _bit  = 0x4000
   elseif _bit == 15 then _bit  = 0x8000
   elseif _bit == 16 then _bit = 0x10000
   elseif _bit == 17 then _bit = 0x20000
   elseif _bit == 18 then _bit = 0x40000
   elseif _bit == 19 then _bit = 0x80000
   elseif _bit == 20 then _bit = 0x100000
   end
 
   if bit.band(flags,_bit ) == _bit then return true
   else return false end
end
Пример использования

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Отправка данных из Текущей таблицы параметров в C# посредством DLL

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 7, среднее: 4,86 из 5)
Загрузка...

СнимокСкрипт в начале, при запуске, отправляет в C# посредством библиотеки функций (DLL) всю информацию из Текущей таблицы параметров по всем бумагам из классов: TQBR (акции), SPBFUT (фьючерсы), SPBOPT (опционы), данный фильтр расположен в функции SendAllParamStrings(). Так же, в начале каждой строки параметров передается текущее время ОС в миллисекундах, благодаря чему, на стороне C# вычисляется время задержки передачи данных. После отправки бумаг этих классов, скрипт отправляет новые данные по мере их поступления, используя функцию обратного вызова OnParam().Смотреть полностью...

Пример скрипта QLua (Lua), выполняющего торговые операции в терминале QUIK

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 11, среднее: 4,64 из 5)
Загрузка...

OpenClose
Скрипт позволяет открывать и закрывать позиции следующего типа:
- покупается 2, выбранных при помощи кнопок, колл-опциона на фьючерс на индекс РТС,
- продается 1, выбранный при помощи кнопок, фьючерс на индекс РТС.

Когда есть открытая данным скриптом позиция, в таблице отображается информация о ней (профит, баланс, ср.цена, дата открытия).

Профит вычисляется по формуле: "Текущая цена, по которой можно закрыть позицию" - "Цена открытия позиции" - "Комиссия 8 р. на каждый лот".

Так же, выполняется запись в лог-файл ("Log.txt") выполняемых скриптом операций и в файле состояния ("State.txt") хранится информация о текущих выбранных инструментах и о текущей, открытой скриптом позиции.Смотреть полностью...

Пример работы с файлами в QLua (Lua)

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 9, среднее: 4,56 из 5)
Загрузка...

Qlua-основы

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
-- Флаг поддержания работы скрипта
IsRun = true;
 
function main()
   -- Пытается открыть файл в режиме "чтения/записи"
   f = io.open(getScriptPath().."\\Test.txt","r+");
   -- Если файл не существует
   if f == nil then 
      -- Создает файл в режиме "записи"
      f = io.open(getScriptPath().."\\Test.txt","w"); 
      -- Закрывает файл
      f:close();
      -- Открывает уже существующий файл в режиме "чтения/записи"
      f = io.open(getScriptPath().."\\Test.txt","r+");
   end;
   -- Записывает в файл 2 строки
   f:write("Line1\nLine2"); -- "\n" признак конца строки
   -- Сохраняет изменения в файле
   f:flush();
   -- Встает в начало файла 
      -- 1-ым параметром задается относительно чего будет смещение: "set" - начало, "cur" - текущая позиция, "end" - конец файла
      -- 2-ым параметром задается смещение
   f:seek("set",0);
   -- Перебирает строки файла, выводит их содержимое в сообщениях
   for line in f:lines() do message(tostring(line));end
   -- Закрывает файл
   f:close();
   -- Цикл будет выполнятся, пока IsRun == true
   while IsRun do
      sleep(100);
   end;   
end;
 
function OnStop()
   IsRun = false;
end;

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Функции обратного вызова, встроенные в QLua

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 9, среднее: 5,00 из 5)
Загрузка...

Qlua-основы
Во время работы терминала QUIK в нем происходят различные события, такие, как приход новой обезличенной сделки, выставление заявки, сработал стоп-ордер и т.п. Для того, чтобы своевременно и определенным образом реагировать на эти события, в скрипте QLua можно использовать функции обратного вызова, которые будут выполнять блок кода, расположенного внутри них, в тот момент, когда это событие произойдет.

Для каждого определенного события есть своя предопределенная разработчиками QLua функция!Смотреть полностью...

Отправка стакана из QUIK (QLua) в приложение C#

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 7, среднее: 5,00 из 5)
Загрузка...

Qlua-csharp-connector-dll
При отправке из терминала QUIK таких часто изменяющихся данных, как "СТАКАН", необходимо использовать обратную связь от C# о получении данных. Так же, на стороне QLua необходим буфер (стек), в который будут заноситься и из которого, в последствии, будут отправляться новые данные, по мере получения их приложением C#. На практике этот процесс происходит очень быстро, так что данные не успевают задерживаться в стеке в ожидании своей очереди. Благодаря чему, приложение C# всегда своевременно получает актуальные изменения. А благодаря стеку, ни одно изменение не останется упущенным.
Примеры кода:Смотреть полностью...

Как отправить команду в QUIK из приложения C#

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 6, среднее: 5,00 из 5)
Загрузка...

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

Обмен данными между DLL (C/C++) и приложением C#

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 8, среднее: 5,00 из 5)
Загрузка...

Qlua-csharp-connector-dll
Для обмена данными между библиотекой DLL, написанной на языке C/C++ и приложением, написанном на языке C#, удобно и эффективно использовать Отображаемые в Памяти Файлы (MemoryMappedFile). По сути, это выделенный участок оперативной памяти компьютера (скорость!), который имеет свое уникальное имя и размер в байтах. Оба эти параметра задаются программистом. В дальнейшем можно, как читать из этой памяти, так и писать в нее, подключившись к ней в библиотеке DLL и в приложении C#.

Был проведен тест скорости обмена сообщениями, в тесте принимали участие следующие технологии: MemoryMappedFile, NamedPipes и Socket. Создавались по два отдельных приложения на C#, сервер и клиент, которые должны были обменяться друг с другом текстовыми сообщениями размером 120 символов 500 000 раз. На все это у них ушло следующее количество времени:
MemoryMappedFile: 1,5 секунды
NamedPipes: 12,5 секунд
Socket: 14 секунд

При этом, количество требуемого кода, так же, было меньше всего у MemoryMappedFile, по моему, выбор очевиден!

Пример создания и использования именованной памяти с именем "MyMemory" и размером 256 байт. В примере реализован следующий алгоритм:Смотреть полностью...

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

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 4, среднее: 5,00 из 5)
Загрузка...

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

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

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

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

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