Обсуждение статьи "Торговые транзакции. Структуры запросов и ответов, описание и вывод в журнал" - страница 5

 
Alexey Viktorov #:

Володь, мы с тобой много говорили об этом голосом. Я всё объяснил как мог, ты вроде всё понял, но вот опять…

Функция OnTradeTransaction это функция обработки события. Совершение сделки это событие которое было вчера. Вот вчера и должна была отработать функция OnTradeTransaction, а никак не сегодня. Сегодня уже нет события совершения ЭТОЙ сделки… Сегодня были и наверное ещё будут, но другие.

Совсем старый стал. Седьмой десяток уже пошёл. Многое забываю, да и практикую от случая к случаю! ))

Это получается, что и транзакция на сегодня уже не нужна, а просто перебираем в цикле:

   for(int i=0; i<PositionsTotal(); i++)
     {
      if(PositionGetTicket(i))
         Print(PositionGetInteger(POSITION_IDENTIFIER));
     }

и вуаля! Вот она открытая позиция. Так, что ли? ))

С уважением, Владимир.

 
Artyom Trishkin #:

Данные хранятся на сервере. Терминал их получает в своё окружение и советник затем их использует.

Артём, доброе утро! Сегодня встал пораньше и заглянул в терминал, а там вижу, что в начале новой торговой сессии советник с тем кодом, который показал Вам ранее в своём сообщении, "вдруг увидел" открытую позавчера позицию и отработал с ней, как положено согласно алгоритма. Просто чудеса какие-то! Решил прогнать советника в тестере стратегий за позавчерашний и вчерашний день. Так вот в тестере стратегий советник отработал просто идеально - нашёл открытую позавчера позицию и вчера отработал с ней, как по нотам. Заостряю внимание на этом факте!!! В тестере стратегий позицию открытую позавчера, советник вчера её нашёл и далее по тексту...

В тестере стратегий получается одно, а в реальной торговле совсем по другому. Причём вчера такая ситуация произошла впервые, когда советник ни с того, ни с сего упорно не хотел "видеть" открытую позицию.

Вопрос - как такое может быть?

С уважением, Владимир.

 
MrBrooklin #:

Артём, доброе утро! Сегодня встал пораньше и заглянул в терминал, а там вижу, что в начале новой торговой сессии советник с тем кодом, который показал Вам ранее в своём сообщении, "вдруг увидел" открытую позавчера позицию и отработал с ней, как положено согласно алгоритма. Просто чудеса какие-то! Решил прогнать советника в тестере стратегий за позавчерашний и вчерашний день. Так вот в тестере стратегий советник отработал просто идеально - нашёл открытую позавчера позицию и вчера отработал с ней, как по нотам. Заостряю внимание на этом факте!!! В тестере стратегий позицию открытую позавчера, советник вчера её нашёл и далее по тексту...

Вопрос - как такое может быть?

С уважением, Владимир.

Я не знаю. Это же Ваш код. Вы его писали. Как написано, так и работает.

 
Artyom Trishkin #:

Я не знаю. Это же Ваш код. Вы его писали. Как написано, так и работает.

На счёт кода понятно. Он простейший. Артём, немного подредактировал своё предыдущее сообщение, посмотрите его, пжл. Добавил ещё немного информации. Может она, как-то поможет разобраться.

С уважением, Владимир.

Ещё добавлено: за 8 месяцев торговли на реальном счёте советник вчера впервые не "увидел" открытую позицию. Вот это и выбило меня из колеи.

 
MrBrooklin #:

На счёт кода понятно. Он простейший. Артём, немного подредактировал своё предыдущее сообщение, посмотрите его, пжл. Добавил ещё немного информации. Может она, как-то поможет разобраться.

С уважением, Владимир.

Ещё добавлено: за 8 месяцев торговли на реальном счёте советник вчера впервые не "увидел" открытую позицию. Вот это и выбило меня из колеи.

Стресс тесты на такой случай необходимы, вилку из компа вынуть сразу после изменения торговой окружения, инет отрубить или сделать его сверх медленным, чтобы отсутствие инета не зафиксировалось, а торговые приказы практически не отсылались... ну или еще чего придумать такого не штатного. Реальное торговое окружение и его фиксация даже при малом количестве торговых транзакций может давать не прогнозируемые сбои)))

У Артема в статьях в первых есть об этом, как записать и как мониторить реал)))

У Сабера вообще подход круче, он создает виртуальную копию торгового окружения и там все считает)))

 
Valeriy Yastremskiy #:
Стресс тесты на такой случай необходимы, вилку из компа вынуть сразу после изменения торговой окружения, инет отрубить или сделать его сверх медленным, чтобы отсутствие инета не зафиксировалось, а торговые приказы практически не отсылались... ну или еще чего придумать такого не штатного.

Доброе утро, Валерий! Всё, что было перечислено в твоём сообщении, всё это происходило неоднократно, а даже многократно, в течение всех восьми месяцев торговли на реале. При этом позицию советник видел и на следующий день, и на последующий день. Код функции OnTradeTransaction() отрабатывал исправно все восемь месяцев торговли на реале.

У меня пока нет объяснения того, что произошло, но единственное приходящее на ум - это сбой в работе сервера на стороне форекс-дилера. Если внимательно почитать все мои сообщения на эту тему, то можно увидеть и такое сообщение:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "Торговые транзакции. Структуры запросов и ответов, описание и вывод в журнал"

MrBrooklin, 2023.10.18 04:48

Артём, доброе утро! Сегодня встал пораньше и заглянул в терминал, а там вижу, что в начале новой торговой сессии советник с тем кодом, который показал Вам ранее в своём сообщении, "вдруг увидел" открытую позавчера позицию и отработал с ней, как положено согласно алгоритма. Просто чудеса какие-то! Решил прогнать советника в тестере стратегий за позавчерашний и вчерашний день. Так вот в тестере стратегий советник отработал просто идеально - нашёл открытую позавчера позицию и вчера отработал с ней, как по нотам. Заостряю внимание на этом факте!!! В тестере стратегий позицию открытую позавчера, советник вчера её нашёл и далее по тексту...

В тестере стратегий получается одно, а в реальной торговле совсем по другому. Причём вчера такая ситуация произошла впервые, когда советник ни с того, ни с сего упорно не хотел "видеть" открытую позицию.

Вопрос - как такое может быть?

С уважением, Владимир.

С уважением, Владимир.
 
Ввиду того, что событие TradeTransaction может быть по каким-то причинам пропущено, а также потому, что возможно состояние "гонок" (например, когда ордера уже нет в активных, но ещё нет в истории, или уже нет активного ордера, но ещё нет открытой им позиции), у меня робот хранит в своём состоянии все активные ордера и свою суммарную позицию (неттинг). Состояние сбрасывается в файл при каждом изменении и при завершении работы. При старте и периодически во время работы происходит проверка синхронизированности и, при необходимости, синхронизация состояния.
 
JRandomTrader #:
у меня робот хранит в своём состоянии все активные ордера и свою суммарную позицию (неттинг). Состояние сбрасывается в файл при каждом изменении и при завершении работы. При старте и периодически во время работы происходит проверка синхронизированности и, при необходимости, синхронизация состояния.

Спасибо Вам за то, что поделились интересным решением подобной проблемы. Попробую реализовать в своём советнике.

С уважением, Владимир.

 
MrBrooklin #:

Спасибо Вам за то, что поделились интересным решением подобной проблемы. Попробую реализовать в своём советнике.

С уважением, Владимир.

Это не только сбой может быть, и что такое сбой))) Фиксация состояния торгового окружения не совсем простая задача. И когда одним ордером на одном инструменте, то даже не верится что это нужно. Но по хорошему, это нужно.

В тестере идеальное исполнение, в реале же почти идеальное, но временами совсем не идеальное и даже не адекватное.

Поэтому в реале как то надо решать задачу, что бы советник понимал что там с отложками, с приказами. И если с приказами как то понятно, отослал проверил, то с отложками сложнее. На каждом тике или реже проверять состояние ордера, или по цене смотреть, если вдруг стало больше или меньше цены ордера проверять состояние ордера. )))  

 

Доброе утро, Артём! Для функции OnTradeTransaction() есть принципиальная разница, где она должна быть расположена - до функции OnTick() или после неё? Если это принципиально, то почему?

С уважением, Владимир.

Причина обращения: