Блог им. 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

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
123 | ★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

Читайте на SMART-LAB:
Фото
GBP/USD: фунт снова берет реванш за свой неожиданный провал
Попытка фунта удержаться на достигнутой вершине и продолжить рост к новым максимумам провалилась и пара резко упала до локального минимума в...
Фото
Совет директоров «Норникеля» рекомендовал акционерам отказаться от выплаты дивидендов за 2025 год
Такое решение основано на положении о дивидендной политике, которая предписывает принимать во внимание «циклический характер рынков металлов ,...
Фото
Набираем трейдеров в команду!
Ты уже знаком с трейдингом, но пока нет стабильности и уверенности в сделках? Приглашаем тебя на бесплатную офлайн-практику в нашем дилинге....
Фото
Сделки УК Первой! Полностью продали одну нефтегазовую компанию в НОЛЬ чтобы купить другие истории
Продолжаю делать серию ежемесячных постов с отслеживанием покупок/продаж профессиональными управляющими. Особенно теми, кто управляет МИЛЛИАРДАМИ...

теги блога Prodik

....все тэги



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