Prodik
Prodik личный блог
13 февраля 2016, 19:49

Быстрая заявка в терминале Quik

Проблема такая, роботу дается команда отправки заявки, пока он соображает что нужно уже делать цена уходит и он ждет по таймауту, чтобы закрыть и начать делать свое дело, но уже с новой ценой. Как можно сделать быстрее робота? Я слышал что можно сделать, чтобы функция  выполнения заявки постоянно работала и как только приходит сигнал действия, он ее выполняет, на данный момент насколько знаю обновление в квике идет с интервалом 1 секунда.
Спасибо за помощь!

На данный момент у меня код такой

' Функция отправки заявки на покупку/продажу
FUNC SEND_ORDER(Operation, Price, Type, SecCode, ClassCode, Quantity)
TRANS_PARAMS = CREATE_MAP()
trans_params = set_value (trans_params, «TRANS_ID», TransID)
trans_params = set_value (trans_params, «ACTION», «NEW_ORDER»)
trans_params = set_value (trans_params, «CLASSCODE», ClassCode)
trans_params = set_value (trans_params, «SecCode», SecCode)
trans_params = set_value (trans_params, «ACCOUNT», Account)
trans_params = set_value (trans_params, «OPERATION», Operation)
trans_params = set_value (trans_params, «PRICE», Price)
trans_params = set_value (trans_params, «Quantity», Quantity)
trans_params = set_value (trans_params, «CLIENT_CODE», ClientCode)
trans_params = set_value (trans_params, «TYPE», Type)
trans_result = SEND_TRANSACTION(Order_Timer, trans_params)
FOR while FROM 0 TO 1 ' Ожидаем пока заявка будет выставлена
'while=0
IF GET_VALUE(trans_result, «RESULT_EX») = «3»
OrderNumber = 0+GET_VALUE(trans_result, «ORDER_NUMBER»)
FlagOrder=1
WRITELN(test, DATE &" "& curtime &" Ордер выставлен: "&OrderNumber&" QTY: "&Quantity)
RETURN
END IF
END FOR
RETURN
END FUNC

16 Комментариев
  • Счастливый Конец
    13 февраля 2016, 20:04

    обновление чего 1 секунда? стаканы поставляются до 100 раз в секунду, да и заявки быстро уходят… от брокера зависит еще. Можно еще на QLua переписать, вдруг быстрее будет. Сам выставляю через trans2quik.dll, из C#. Работает быстро. Но надо понимать, что на мгновение цена может коснуться требуемой и так же уйти. И может создаться ощущение что робот тормозит, а он не может выполнить заявку если цена второй раз не коснется требуемой.

      • Счастливый Конец
        13 февраля 2016, 20:28
        Prodik, я вспомнил, это QPILE он кажется как «портфель» подключается, и там обновления раз в секунду это самое быстрое. Если у вас так и работает — сочувствую, уходите от qpile. Можно на qlua перебраться, там скрипт все время в может крутиться в цикле main
          • Счастливый Конец
            13 февраля 2016, 20:50
            Prodik, не знаю что там у вас за конфиг, но скорость работы qlua однозначно вас порадует после qpile, стакан в qlua для инструмента бывает до 100 раз в секунду срабатывает. Вам нужно событие OnQuote и в нем выставлять заявку. Срочно читать про qlua. А например справка по qlua прямо в директории квика лежит, qlua.chm
      • Овчинников Миша
        29 марта 2016, 19:09
        Prodik, 

        PORTFOLIO_EX ТЕСТ;
        DESCRIPTION ОПИСАНИЕ;
        CLIENTS_LIST ALL_CLIENTS;
        FIRMS_LIST ALL_FIRMS;
        USE_CASE_SENSITIVE_CONSTANTS;
        PROGRAM
        FOR XXX FROM 0 TO 0

         

         


        MESSAGE(«Раз в секунду, ага»,1)

         

         


        IF 1 = 1
        XXX = -1
        CONTINUE
        END IF
        END FOR
        END_PROGRAM
        PARAMETER COLUMN;
        PARAMETER_TITLE Робот;
        PARAMETER_DESCRIPTION Описание столбца;
        PARAMETER_TYPE STRING(10);
        END
        END_PORTFOLIO_EX

  • НеГрустин
    13 февраля 2016, 20:07
    Минимум — одна секунда.
    Хочешь быстрее — разбирай API, и прикручивай сквозь него.
    Ещё быстрее — пиши под плазу… ну или как она там сейчас… FAST.

    ХФТ в квике всё равно не сделаешь
    Хотя у меня квиковые боты крутятся — меня скорость устраивает))))
      • НеГрустин
        13 февраля 2016, 20:30
        Prodik, в заявке ты какую цену ставишь например на закрытие? — сделай так же — по описанному тобой чуть выше: добавь к текущей некоторое количество пунктов, и выстрели этой заявкой. В стакане эта заявка ткнётся об ближайший аск.

        Или давай ещё раз опиши, что требуется.
          • НеГрустин
            13 февраля 2016, 20:35
            Prodik, чёт сложно!

            Вписывай просто-напросто при формировании вот этой строки в сендордере
            trans_params = set_value (trans_params, «PRICE», Price)
              не Price, а Price+100
            Ну или сколько пунктов ты готов отдать, чтобы стопудово исполниться.))))

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн