newTrades
Atom
02.08.2012
rminko


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


Теги:


Спасибо:


< 1 2 3  >
rminko

Фотография
Дата: 06.08.2012
Ответить


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

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

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

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

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

Спасибо:

Kalikazandr

Фотография
Дата: 06.08.2012
Ответить


привет! хз-хз 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 В общем, если интересно пишите в личку. И помните! изначально торговля придумана с одной логикой не убиенной: нае...би ближнего своего)) и биржа прямое тому доказательство.

Спасибо: rminko

ra81

Фотография
Дата: 06.08.2012
Ответить


rminko:

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

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

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

Спасибо: rminko

rminko

Фотография
Дата: 07.08.2012
Ответить


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

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

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

Спасибо:

ra81

Фотография
Дата: 08.08.2012
Ответить


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

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

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

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

Спасибо:

rminko

Фотография
Дата: 08.08.2012
Ответить


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

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

Спасибо:

ra81

Фотография
Дата: 08.08.2012
Ответить


rminko:

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

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

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

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

Спасибо:

rminko

Фотография
Дата: 08.08.2012
Ответить


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

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

Спасибо:

ra81

Фотография
Дата: 09.08.2012
Ответить


rminko:

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

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

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

Спасибо:

Kalikazandr

Фотография
Дата: 09.08.2012
Ответить


rminko:

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

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

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

Спасибо:
< 1 2 3  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy