Решил сделать себе индикатор паттерна - прошу ответить на вопросы

Автор записи: arn11555

Вопросы:

тф= таймфрейм, вопросы задаются с учетом создания на qlua

  1. возможно ли нанести линии на график с помощью скрипта или нужно создавать индикатор?
  2. возможно ли в ячейке таблицы вывести список выпадающий с набором значений
  3. можно ли в одном скрипте обрабатывать несколько инструментов

Пример простого торгового движка "Simple Engine" QLua(Lua)

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

Блоки кода
Данный движок не предоставляет полный функционал для разработки скриптов на QLua(Lua), но показывает на сколько проще и эффективней становится разработка при таком подходе.

В примере движка реализован следующий функционал:Смотреть полностью...

Condor V

Автор записи: АндрейАВ

2015122212_7813832_19968812Скрипт торгует опционами виртуально. При первом запуске открываем позицию "бабочка" или "кондор" зависит от настроек (если Start_Call = Start_Put - бабочка если Start_Call > Start_Put - кондор)
Стратегия: если цена фьючерса выше BU_1 (безубыток 1-й Call позиции), то закрываем крыло Call и открываем новое с большими страйками, если цена выше Start_Call, но ниже BU_2 - Step_Strike - закрываем крыло Call и открываем с меньшими страйками. Аналогично для Put только в другую сторону.
Смотреть полностью...

Проверка выставления заявки по отправленной транзакции QLua(Lua)

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

Блоки кода

Блок кода 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
-- ПРОВЕРКА ВЫСТАВЛЕНИЯ ЗАЯВКИ ПО ОТПРАВЛЕННОЙ ТРАНЗАКЦИИ
-- для примера отправляется транзакция на выставление лимитированной заявки на покупку по определенной цене
 
ACCOUNT       = "SPBFUT00k59" -- Код счета
CLASS_CODE    = "SPBFUT"      -- Код класса
SEC_CODE      = "RIH6"        -- Код инструмента
 
OpenPrice     = 73000         -- Цена выставления заявки
 
run           = true          -- Флаг работы цикла while в функции main
 
trans_id      = os.time()     -- Текущие дата и время в секундах хорошо подходят для уникальных номеров транзакций
 
LastStatus    = nil           -- Последний статус транзакции, который был выведен в сообщении
 
-- Основная функция скрипта, пока работает эта функция, работает скрипт
function main()
  -- Отправляет транзакцию на открытие позиции
  TransOpenPos()
  -- Пока работает данный цикл, работает скрипт
  while run do sleep(1) end
end
-- Срабатывает при остановке скрипта
function OnStop() run = false end
 
-- Отправляет транзакцию на открытие позиции
function TransOpenPos()
  -- Выставляет заявку на открытие позиции
  -- Получает ID для следующей транзакции
  trans_id = trans_id + 1
  -- Заполняет структуру для отправки транзакции
  local Transaction={
    ['TRANS_ID']  = tostring(trans_id),   -- Номер транзакции
    ['ACCOUNT']   = ACCOUNT,              -- Код счета
    ['CLASSCODE'] = CLASS_CODE,           -- Код класса
    ['SECCODE']   = SEC_CODE,             -- Код инструмента
    ['ACTION']    = 'NEW_ORDER',          -- Тип транзакции ('NEW_ORDER' - новая заявка)
    ['OPERATION'] = 'B',                  -- Операция ('B' - buy, или 'S' - sell)
    ['TYPE']      = 'L',                  -- Тип ('L' - лимитированная, 'M' - рыночная)
    ['QUANTITY']  = '1',                  -- Количество
    ['PRICE']     = tostring(OpenPrice)   -- Цена
  }
  -- Отправляет транзакцию
  local Res = sendTransaction(Transaction)
  if Res ~= '' then message('TransOpenPos(): Ошибка отправки транзакции: '..Res) else message('TransOpenPos(): Транзакция отправлена') end
end
 
-- Функция вызывается терминалом, когда с сервера приходит новая информация о транзакциях
function OnTransReply(trans_reply)
   -- Если пришла информация по нашей транзакции
   if trans_reply.trans_id == trans_id then
      -- Если данный статус уже был обработан, выходит из функции, иначе запоминает статус, чтобы не обрабатывать его повторно
      if trans_reply.status == LastStatus then return else LastStatus = trans_reply.status end
      -- Выводит в сообщении статусы выполнения транзакции
      if       trans_reply.status <  2    then
         -- Статусы меньше 2 являются промежуточными (0 - транзакция отправлена серверу, 1 - транзакция получена на сервер QUIK от клиента),
         -- при появлении такого статуса делать ничего не нужно, а ждать появления значащего статуса
         -- Выходит из функции
         return
      elseif   trans_reply.status == 3    then -- транзакция выполнена
         message('OnTransReply(): По транзакции №'..trans_reply.trans_id..' УСПЕШНО ВЫСТАВЛЕНА заявка №'..trans_reply.order_num..' по цене '..trans_reply.price..' объемом '..trans_reply.quantity)
      elseif   trans_reply.status >  3    then -- произошла ошибка
         message('OnTransReply(): ОШИБКА выставления заявки по транзакции №'..trans_reply.trans_id..', текст ошибки: '..trans_reply.result_msg)
      end
   end
end

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

Получение результатов выполнения отправленной транзакции QLua(Lua)

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

Блоки кодаЭта статья начинает серию статей с примерами блоков кода, которые применяются при написании скриптов на QLua(Lua), каждый блок выполняет свою определенную задачу.

С каждой новой статьей блок кода будет усложняться своей функциональностью.

Эти блоки удобно брать и вставлять в свои скрипты, где нужно решить задачу, реализованную в блоке.

Блок кода 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
-- ПОЛУЧЕНИЕ РЕЗУЛЬТАТОВ ВЫПОЛНЕНИЯ ОТПРАВЛЕННОЙ ТРАНЗАКЦИИ
-- для примера отправляется транзакция на выставление лимитированной заявки на покупку по определенной цене
 
ACCOUNT       = "SPBFUT00k59" -- Код счета
CLASS_CODE    = "SPBFUT"      -- Код класса
SEC_CODE      = "RIH6"        -- Код инструмента
 
OpenPrice     = 73000         -- Цена выставления заявки
 
run           = true          -- Флаг работы цикла while в функции main
 
trans_id      = os.time()     -- Текущие дата и время в секундах хорошо подходят для уникальных номеров транзакций
 
LastStatus    = nil           -- Последний статус транзакции, который был выведен в сообщении
 
-- Основная функция скрипта, пока работает эта функция, работает скрипт
function main()
  -- Отправляет транзакцию на открытие позиции
  TransOpenPos()
  -- Пока работает данный цикл, работает скрипт
  while run do sleep(1) end
end
-- Срабатывает при остановке скрипта
function OnStop() run = false end
 
-- Отправляет транзакцию на открытие позиции
function TransOpenPos()
  -- Выставляет заявку на открытие позиции
  -- Получает ID для следующей транзакции
  trans_id = trans_id + 1
  -- Заполняет структуру для отправки транзакции
  local Transaction={
    ['TRANS_ID']  = tostring(trans_id),   -- Номер транзакции
    ['ACCOUNT']   = ACCOUNT,              -- Код счета
    ['CLASSCODE'] = CLASS_CODE,           -- Код класса
    ['SECCODE']   = SEC_CODE,             -- Код инструмента
    ['ACTION']    = 'NEW_ORDER',          -- Тип транзакции ('NEW_ORDER' - новая заявка)
    ['OPERATION'] = 'B',                  -- Операция ('B' - buy, или 'S' - sell)
    ['TYPE']      = 'L',                  -- Тип ('L' - лимитированная, 'M' - рыночная)
    ['QUANTITY']  = '1',                  -- Количество
    ['PRICE']     = tostring(OpenPrice)   -- Цена
  }
  -- Отправляет транзакцию
  local Res = sendTransaction(Transaction)
  if Res ~= '' then message('TransOpenPos(): Ошибка отправки транзакции: '..Res) else message('TransOpenPos(): Транзакция отправлена') end
end
 
-- Функция вызывается терминалом, когда с сервера приходит новая информация о транзакциях
function OnTransReply(trans_reply)
   -- Если пришла информация по нашей транзакции
   if trans_reply.trans_id == trans_id then
      -- Если данный статус уже был обработан, выходит из функции, иначе запоминает статус, чтобы не обрабатывать его повторно
      if trans_reply.status == LastStatus then return else LastStatus = trans_reply.status end
      -- Выводит в сообщении статусы выполнения транзакции
      if       trans_reply.status == 0    then message('OnTransReply(): Транзакция отправлена серверу')
      elseif   trans_reply.status == 1    then message('OnTransReply(): Транзакция получена на сервер QUIK от клиента')
      elseif   trans_reply.status == 2    then message('OnTransReply(): Ошибка при передаче транзакции в торговую систему. Так как отсутствует подключение шлюза Московской Биржи, повторно транзакция не отправляется')
      elseif   trans_reply.status == 3    then message('OnTransReply(): ТРАНЗАКЦИЯ ВЫПОЛНЕНА !!!')
      elseif   trans_reply.status == 4    then message('OnTransReply(): Транзакция не выполнена торговой системой. Более подробное описание ошибки отображается в поле «Сообщение» (trans_reply.result_msg)')
      elseif   trans_reply.status == 5    then message('OnTransReply(): Транзакция не прошла проверку сервера QUIK по каким-либо критериям. Например, проверку на наличие прав у пользователя на отправку транзакции данного типа')
      elseif   trans_reply.status == 6    then message('OnTransReply(): Транзакция не прошла проверку лимитов сервера QUIK')
      elseif   trans_reply.status == 10   then message('OnTransReply(): Транзакция не поддерживается торговой системой')
      elseif   trans_reply.status == 11   then message('OnTransReply(): Транзакция не прошла проверку правильности электронной цифровой подписи')
      elseif   trans_reply.status == 12   then message('OnTransReply(): Не удалось дождаться ответа на транзакцию, т.к. истек таймаут ожидания. Может возникнуть при подаче транзакций из QPILE')
      elseif   trans_reply.status == 13   then message('OnTransReply(): Транзакция отвергнута, так как ее выполнение могло привести к кросс-сделке (т.е. сделке с тем же самым клиентским счетом)')
      end
   end
end

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

Научиться создавать роботов в Квике на LUA

Автор записи: sher_70

Добрый день! Хочу понять как можно создавать роботов на LUA.  для QUIK Но не понятно с чего начать . Скачал кучу Visual Studio 2015 , установил, так же установил Notepad++. установил  LUA 5.1 а что дальше не знаю,  нашел учебник для начинающих, но там не понятно где пишут и непонятно где это потом должно выводится. Может направит кто меня в нужное русло?

Робот Виртуал

Автор записи: АндрейАВ

Робот виртуал
Скрипт торгует виртуально - опцион
Стратегия
1. Позиции нет - открыть длинный Call
2. Цена после длинного Call идет вверх в мою сторону - вертикальный спред
3. Цена после вертикального спреда идет вверх в мою сторону - бабочка
4. Цена после бабочки идет вверх в мою сторону - кондор и т.д.
5. Цена после кондора пошла против меня вниз - кондор или бабочка
6. Цена после бабочки пошла против меня вниз - вертикальный спред
7. Цена после вертикального спреда пошла против меня вниз - длинный Call

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