newTrades
Atom
8/2/2012
rminko


Парни подскажите а событие NewTrades синхронно или нет? может ли пока я обрабатываю одно событие прийти следующее и обработаться в другом потоке?
Просто у меня возникают ситуация что следующая сделка открывается за 5 секунд до закрытия предыдущей или вообще открываются две сделки с перерывом в пару секунд хотя еще одного сигнала на вход не возникало... как вообще работает это событие? раньше немного уже спрашивал про событие обновления стакана, там тоже был ньюанс в том что в обработчик события передается не копия текущего состояния стакана а ссылака на живой стакан и пока я его обрабатываю в обрабочике данные в переданной мне в обрабочик стакане меняются что конечноже бред ну да лано победил клонированием и работой клоном.. Может тут тоже такая же мулька?

Tags:


Thanks:


< 1 2 3  >
rminko

Avatar
Date: 8/6/2012
Reply


Kalikazandr

здрасте всем.
чтото Вы тут огород огородите.
тут нет никакой проблемы, если Вы внимательно почитаете встроенную справку по купайлу в квике, то там есть описания функций, с помощью которых оч легко осуществить такой контроль, а робота Вашего надо заставить не делать последующих выставлений ордеров без получения положительного ответа от биржи.
по поводу разницы по времени: 1 сек серверного времени = 1000милисек, что означает 1000 ордеров/сек, если их пришло больше, то в табл всех сделок Вы увидете недалекое будущее, я замечал до 5 сек реального времени, как то так.


Спасибо, за Ваш ответ, но помоймы Вы не допоняли суть вопроса.
Не проблема заставить робота не посылать заявки пока не прояснится состояние отправленной. Проблема в том что когда робот отправляет заявку, он подразумевает что находится в определенной позиции на данных момент или что заявка отправленная ранее находится в определенном состоянии. Так вот это "подразумевание" может очень сильно отличаться от суровой реальности
пример:

1. робот без позиции.
2. приходит сигнал на лонг
3. отправляем заявку на покупку
4. приходит событие что заявка встала в стакан и ее еще никто не кушал
5. приходит сигнал на шорт
6. робот снимает лонговую заявку и отправляет шортовую заявку
7. приходит событие что снять лонговую заявку не удалось, так как в момент отмены она исполнилась (ну и все остальные события приходят с этим связанные)
8. приходит событие что шортовая заявка исполнилась приведя позицию в нейтральное состояние (из-за исполнившейся лонговой), вместо того что бы создать шортовую позу....

Вот как-то так. Получается робот как в рекламе "все правильно сделал"? а поза неправильная и ее надо приводить к правильной.
Вариант разделить 6 пункт еще на 2, в первом снимаем заявку, а во втором действуем на основе результата снятия, но это не подходит так как хоть робот и не HFT и имеет всего несколько сделок в час. но все-равно скорость реакции на сигнал у него критически важный показатель, поэтому ждать секунду пока придет ответ о снятии заявки непозволительная роскошь.

Но все равно спасибо за Ваш пост. Пока писал ответ уже кое-что надумал по этому поводу. Завтра буду тестировать.
Thanks:

Kalikazandr

Avatar
Date: 8/6/2012
Reply


привет!
хз-хз HFT априори нельзя сделать на купайле в виду отсутствия функций перехода go to стр. 300, а так же не корректной работе функций break и return. Скальперские стратегии, думаю, равнозначно приносят прибыль и убытки, не знаю ни одного дейтрейдера, который похвастал историческими данными(за месяц) по скальперству, приносящее на круг хотя бы 1% в день. Играть в шорт вообще нельзя без четкой стратегии и логики. Необходимо научится торговать в лонг, а уж потом репу чесать как использовать заемные средства. И совет: не пользуйтесь встроенными индикаторами - они не работают корректно в начале торговой сессии.
У меня робот делает 0-3 сделки по инструменту в день и времени с момента получения сигнала на вход, до самого входа занимает от 1 сек до 30 мин.(предостаточно) + предусмотрено ручное снятие/выставление заявок, робот подхватывает их на лету,
А в Вашем случае поставьте ожидание ответа от биржи 300 милисек после отправки транзакции и будет счастье или воспользуйтесь встроенным отправщиком заявок из файла. Ниже код для проверки состояния заявки по текущему инструменту
'=================БЛОК ПРОВЕРКИ СТАТУСА ЗАЯВКИ!!!======================
' ЗАПРЕТ НА ПОКУПКУ ПРИ АКТИВНОЙ ЗАЯВКЕ
F=GET_NUMBER_OF("ORDERS")*-1'метод обратного просмотра
FLAG=0'==========ФЛАГ АКТИВНОЙ ЗАЯВКИ НА ПОКУПКУ/ПРОДАЖУ
CENA=0
NUMBER=0
IF F<0 ' ======================ЕСЛИ ТАМ ЧТО-ТО ЕСТЬ, ТО
FOR O FROM F TO 0
O2=O*-1
Strk = GET_ITEM ("ORDERS", O2)
INSTRUMENT1 = GET_VALUE (Strk, "SECCODE")
IF INSTRUMENT1=seccode
IF GET_VALUE (GET_ITEM ("ORDERS", O2), "STATUS")="ACTIVE"
FLAG=1 'ЕСТЬ АКТИВНЫЕ
CENA=GET_VALUE (GET_ITEM ("ORDERS", O2), "PRICE")
NUMBER=GET_VALUE (GET_ITEM ("ORDERS", O2), "NUMBER")
ST = Set_Value(ST, "CENA",CENA)
ST=set_value(ST,"FLAG",FLAG)
BREAK
ELSE
FLAG=0 'АКТИВНЫХ НЕТ!!!
BREAK
END IF
END IF
END FOR
END IF
Засеките время расчета Вашего портфеля:
PROGRAM
DATATIME=GET_DATETIME()
TIMEMILI1=SUBSTR(DATATIME,21,12)
ТЕЛО ПРОГРАММЫ
DATATIME=GET_DATETIME()
TIMEMILI2=SUBSTR(DATATIME,21,12)
END PROGRAM
В общем, если интересно пишите в личку. И помните! изначально торговля придумана с одной логикой не убиенной: нае...би ближнего своего)) и биржа прямое тому доказательство.
Thanks: rminko

ra81

Avatar
Date: 8/6/2012
Reply


rminko
ra81

Хотя по факту если ордер исполнился сделка уже явно совершилась на бирже.Размер позиции будет равен тому, сколько в ордере исполнилось. То есть объем исполненный в ордере.

Не совсем согласен. Разве не может быть ситуации в которой заявка исполнилась, а информация о позиции еще не обновилась...
То-есть если я в обработчике orderchanged вижу что у заявки статус - done и баланс 0- значит весь объем съели, но если я тут же проверю состояние позиции по инструменту то вполне могу получить что позиция еще не изменилась... или нет?


Я такого и не утверждал. Я только сказал что если в ордере изменился исполненный объем, значит заявка была исполнена. Остальные параметры можно не проверять. А позиция по факту может и не измениться да, ее обычно брокер или просто сам терминал считает.

Quote:
Еще сейчас подумал - и еще больше подводных камней нашел.
Например совершенно непонятно как разрулить через NewMyOrders и OrderChanged ситуацию когда отправлена заявка на вход в позицию, но еще не пришли никакие события о регистрации этой заявки, а уже поступает сигнал на выход или на переворот. вообщем надо закрывать предыдущую сделку а еще не понятно она вообще есть или заявка в стакане висит или отклонена биржей.....
Походу все-таки надо через PositionChanged отслеживать текущую позицию и реализовать какой-то класс синхронизатор который будет смотреть какую позу подразумевает робот а какая реально есть на бирже и синхронизирует их. Интересно как другие контролируют позу? Или так же на авось и периодически синхронизируют?

Если у вас такое происходит, меняйте брокера итд. Нельзя посылать сигналы не получая ответа, этак теряется обратная связь. Следовательно вам просто нужен более быстрый канал до биржи.
Thanks: rminko

rminko

Avatar
Date: 8/7/2012
Reply


Всем спасибо. Пришел к компромиссному варианту действий...

Добавил:
Только теперь появилась новая проблема. когда робот в позицию входит - все нормально, а когда через несколько минут отсылает заявку на выход, то получает исключение на ITrader.RegisterOrder(order) - точно не помню, но что-то там DLLNotConnected. кто сталкивался с таким?

Еще добавил. порыл форум и доки. То-есть получается что мне надо проверять isConnected и если нет то connect и заново запускать весь экспорт со всеми вытекающими?? это же бред. У меня сохранена заявка по которой я вошел в позу и при запуске экспорта все это добро придет заново.... причем заявки еще ладно их можно по статусу отфильтровать. а как же сделки? как я пойму что это сделку я уже учитывал в расчете позы и теперь она пришла повторно из-за дисcконнекта.... хранить список сделок которые учитывал? Бред ведь? почему бы не инкапсулировать как-то этот момент внутри S#? что-то загнал меня печаль этот "баг".
Thanks:

ra81

Avatar
Date: 8/8/2012
Reply


rminko
Всем спасибо. Пришел к компромиссному варианту действий...

Добавил:
Только теперь появилась новая проблема. когда робот в позицию входит - все нормально, а когда через несколько минут отсылает заявку на выход, то получает исключение на ITrader.RegisterOrder(order) - точно не помню, но что-то там DLLNotConnected. кто сталкивался с таким?

Еще добавил. порыл форум и доки. То-есть получается что мне надо проверять isConnected и если нет то connect и заново запускать весь экспорт со всеми вытекающими?? это же бред. У меня сохранена заявка по которой я вошел в позу и при запуске экспорта все это добро придет заново.... причем заявки еще ладно их можно по статусу отфильтровать. а как же сделки? как я пойму что это сделку я уже учитывал в расчете позы и теперь она пришла повторно из-за дисcконнекта.... хранить список сделок которые учитывал? Бред ведь? почему бы не инкапсулировать как-то этот момент внутри S#? что-то загнал меня печаль этот "баг".


Насколько язнаю есть такая фича как ReconnectionSettings которая автоматом делает реконнект коннектора и рестарт экспорта если нужно. Те заявки которые уже есть в трейдере придут заново но не будут сгенерены события что это новые заявки и сделки. Так что ничего страшного не произойдет. Это вполне штатная ситуация когда рестарт экспорта происходит. Все сделки заявки итд что уже были в трейдере не вызовут события New так что все ок. Это легко проверить тестом. Во всяком случае в моем коннекторе так. Как сделано в квике не знаю, но должно быть так же.
Thanks:

rminko

Avatar
Date: 8/8/2012
Reply


ra81

Насколько язнаю есть такая фича как ReconnectionSettings которая автоматом делает реконнект коннектора и рестарт экспорта если нужно. Те заявки которые уже есть в трейдере придут заново но не будут сгенерены события что это новые заявки и сделки. Так что ничего страшного не произойдет. Это вполне штатная ситуация когда рестарт экспорта происходит. Все сделки заявки итд что уже были в трейдере не вызовут события New так что все ок. Это легко проверить тестом. Во всяком случае в моем коннекторе так. Как сделано в квике не знаю, но должно быть так же.


Спасибо. Тоже уже проверил - действительнео если не делать ReStartExport то все ок. единственное до сих пор не понятно что будет если заявка будет отправлено между дисконнектом и реконектом. Я сейчас делаю так перед отпарвкой заявки проверяю isConnected и если все ок просто отправляю если НЕ ок то делаю Reconnect и отпарвляю... достаточно ли этого хз. надо тестить...
Thanks:

ra81

Avatar
Date: 8/8/2012
Reply


rminko
ra81

Насколько язнаю есть такая фича как ReconnectionSettings которая автоматом делает реконнект коннектора и рестарт экспорта если нужно. Те заявки которые уже есть в трейдере придут заново но не будут сгенерены события что это новые заявки и сделки. Так что ничего страшного не произойдет. Это вполне штатная ситуация когда рестарт экспорта происходит. Все сделки заявки итд что уже были в трейдере не вызовут события New так что все ок. Это легко проверить тестом. Во всяком случае в моем коннекторе так. Как сделано в квике не знаю, но должно быть так же.


Спасибо. Тоже уже проверил - действительнео если не делать ReStartExport то все ок. единственное до сих пор не понятно что будет если заявка будет отправлено между дисконнектом и реконектом. Я сейчас делаю так перед отпарвкой заявки проверяю isConnected и если все ок просто отправляю если НЕ ок то делаю Reconnect и отпарвляю... достаточно ли этого хз. надо тестить...


ReStartExport не должен генерировать события new на существующие ордера и заявки. Если это происходит значит это есть баг и надо багрепортить. Максимум должны приходить события на изменение ордеров поскольку они перечитваются и обрабатываются и мы не знаем менялись ли они пока терминал был в отключке. А сделки в принципе не могут изменяться засим по ним вообще ничего не должно приходить если сделка уже есть в трейдере.

По поводу ордеров в отключке:
Скорее всего должно прийти событие OrderRegisterFailed потому как терминал должен дать ответ о том что нет подключения к серверу. Во всяком случае Альфа директ дает сигнал об этом и событие приходит.
Thanks:

rminko

Avatar
Date: 8/8/2012
Reply


ra81
[quote=rminko;20726][quote=ra81;20725]
По поводу ордеров в отключке:
Скорее всего должно прийти событие OrderRegisterFailed потому как терминал должен дать ответ о том что нет подключения к серверу. Во всяком случае Альфа директ дает сигнал об этом и событие приходит.


Неее, реч идет не об отваливании связи терминала<->Биржа а об отваливании импорта транзакций Tran2Quik.dll от квика.
Тестирую счас робота... что-то все сообщения приходят через раз... то прийдет OnNewTrades то нет.... и соответственно робот думает что не вошел в позу... жаль альтернативы нет...
Thanks:

ra81

Avatar
Date: 8/9/2012
Reply


rminko
ra81
[quote=rminko;20726][quote=ra81;20725]
По поводу ордеров в отключке:
Скорее всего должно прийти событие OrderRegisterFailed потому как терминал должен дать ответ о том что нет подключения к серверу. Во всяком случае Альфа директ дает сигнал об этом и событие приходит.


Неее, реч идет не об отваливании связи терминала<->Биржа а об отваливании импорта транзакций Tran2Quik.dll от квика.
Тестирую счас робота... что-то все сообщения приходят через раз... то прийдет OnNewTrades то нет.... и соответственно робот думает что не вошел в позу... жаль альтернативы нет...


Ну это явно не нормально. Надо разобраться просто. Люди же работают как-то с квиком. А если отвалится импорт транзакций то думаю заявка может пропасть в никуда. Такое иногда вытворяет терминал альфы.
Thanks:

Kalikazandr

Avatar
Date: 8/9/2012
Reply


rminko
ra81
[quote=rminko;20726][quote=ra81;20725]
По поводу ордеров в отключке:
Скорее всего должно прийти событие OrderRegisterFailed потому как терминал должен дать ответ о том что нет подключения к серверу. Во всяком случае Альфа директ дает сигнал об этом и событие приходит.


Неее, реч идет не об отваливании связи терминала<->Биржа а об отваливании импорта транзакций Tran2Quik.dll от квика.
Тестирую счас робота... что-то все сообщения приходят через раз... то прийдет OnNewTrades то нет.... и соответственно робот думает что не вошел в позу... жаль альтернативы нет...


добрый день.
да забейте Вы на этот кривой Tran2Quik.dll. как я уже говорил выше пользоваться надо либо импортом транзакций из файла, либо напрямую посылать ордера и будет Вам щастье великое. и роботина Ваш работать будет шустрее без модуля Tran2Quik.dll.
Thanks:
< 1 2 3  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy