Блог им. prodik

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

    • 13 февраля 2016, 19:49
    • |
    • Prodik
  • Еще
Проблема такая, роботу дается команда отправки заявки, пока он соображает что нужно уже делать цена уходит и он ждет по таймауту, чтобы закрыть и начать делать свое дело, но уже с новой ценой. Как можно сделать быстрее робота? Я слышал что можно сделать, чтобы функция  выполнения заявки постоянно работала и как только приходит сигнал действия, он ее выполняет, на данный момент насколько знаю обновление в квике идет с интервалом 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

★3
16 комментариев

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

Счастливый Конец, квик считывает конфиг робота с интервалом 1 секунда от начала конфига до конца, если запускается функция заявки и она не исполняется, то она запускается в следующую секунду? Мне кажется функция запускается и пока она не завершится, ниже конфиг квик не считывает, почему такие выводы из-за того во время отправки заявки время в окне робота останавливается и пока не исполнится заявка не возобновится.
avatar
Prodik, я вспомнил, это QPILE он кажется как «портфель» подключается, и там обновления раз в секунду это самое быстрое. Если у вас так и работает — сочувствую, уходите от qpile. Можно на qlua перебраться, там скрипт все время в может крутиться в цикле main
Счастливый Конец, ммм интересно, давно хотел изучить, но пугает что конфиг написанный в qpile в qlua раза в 3 увеличивается.
avatar
Prodik, не знаю что там у вас за конфиг, но скорость работы qlua однозначно вас порадует после qpile, стакан в qlua для инструмента бывает до 100 раз в секунду срабатывает. Вам нужно событие OnQuote и в нем выставлять заявку. Срочно читать про qlua. А например справка по qlua прямо в директории квика лежит, qlua.chm
Счастливый Конец, понял, спасибо, буду изучать!
avatar
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

Минимум — одна секунда.
Хочешь быстрее — разбирай API, и прикручивай сквозь него.
Ещё быстрее — пиши под плазу… ну или как она там сейчас… FAST.

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

Или давай ещё раз опиши, что требуется.
avatar
НеГрустин, ответил ниже кодом)
avatar
Prodik, чёт сложно!

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

slip=5

' Получаем шаг цены и проскальзывание
NEW_GLOBAL(«STEP»,0)
IF STEP=0
STEP =0+GET_PARAM(ClassCode, SecCode, «SEC_PRICE_STEP») 'получаем шаг цены
END IF
STEPslip=STEP*Slip



Функция продажи
FUNC SELL(ClassCode, SecCode, Quantity)
PriceBid =0 + GET_PARAM (ClassCode,SecCode,«BID») 'получаем лучшую цену спроса
PriceSell = PriceBid-STEPSlip 'рассчитываем цену продажи с учетом заданного проскальзывания
IF PriceBid>0
SEND_ORDER («S», PriceSell, «M», SecCode, ClassCode, Quantity)
WRITELN (test, DATE &" "& curtime&" Заявка на продажу, цена: "&PriceSell&" Количество: "&Quantity &" Бид: " &PriceBid)
END IF
Return
END FUNC

avatar
Мне вот кажется  проскальзывание 5 пунктов мало… у кого сколько?
avatar
Еще один вопрос
FOR while FROM 0 TO 1 — если сделать вместо 1, 100 в секундах или миллисекундах будет измеряться проверка функции. И если поменять на 100 как это отразится, до этого стояло 100, поменял на 1, но так и не понял на что влияет.

trans_result = SEND_TRANSACTION(Order_Timer, trans_params)
Order_Timer=10
я как понимаю, он будет ждать 10 секунд отправить заявку брокеру и чтобы пришел ответ ? 
avatar

теги блога Prodik

....все тэги



UPDONW
Новый дизайн