Разработчики! Вы вообще тестируете то, что создаёте? - страница 6

 
Mikalas:

Подскажите пожалуйста, как Вы контролируете, что ордер модифицировался( без ответа сервера)?

Модификация ордера вызывает несколько событий и я все эти события контролирую, а также контролирую время нахождения задачи ожидания в листе ожидания.

У меня робот на фортс совершает 500-600 сделок за сессию, и потерь событий  до сих пор не было, т.е. все задачи в листе ожидания исполняются и не доходят до проверки по таймеру.

 
Yurich:

Событийная модель по определению не может быть абсолютно надежна, если событие не дошло то это совсем не значит, что его не было.

Если часть событий доходит, а часть нет, то для гарантированной обработки результатов выполнения команд необходимы дублирующие блоки кода, которые проверяли бы статус, сравнивая его с предыдущим и т.п. Тогда спрашивается, если дублирующий код работает абсолютно надежно, зачем использовать код построенный на событиях? Зачем использовать два кода вместо одного, того, который построен не на событиях? Плодить избыточность?
 
Yurich:

Модификация ордера вызывает несколько событий и я все эти события контролирую, а также контролирую время нахождения задачи ожидания в листе ожидания.

У меня робот на фортс совершает 500-600 сделок за сессию, и потерь событий  до сих пор не было, т.е. все задачи в листе ожидания исполняются и не доходят до проверки по таймеру.

Вот это уже интересней... Т.е. все-таки не было случая, что бы ожидаемое событие не пришло? 
 
C-4:
Вот это уже интересней... Т.е. все-таки не было случая, что бы ожидаемое событие не пришло? 
Когда я говорил, что не было потерь событий, то имел ввиду, что задачи, которые ставились в лист ожидания, дожидались своего события(хотя бы одного из цепочки значимых событий). Может и есть потери событий о которых говорит Михаил, я не веду журнал событий, но они не сказываются на общем функционирование мой модели событий.
 

to:Михаил.

В общем, пока ситуация не разрешилась в какую-либо сторону, Вам проще сделать дополнительную проверку:

 

int dealsCount = 0;
///
/// С заданной периодичностью синхронизируем количество обработанных и поступивших трейдов.
///
void OnTimer(void)
{
   if(dealsCount != HistoryDealsTotal())
   {
      //Пришли новые трейды. их нужно обработать
      for(int i = dealsCount; i < HistoryDealsTotal(); i++)
      {
          ulong ticket = HistoryDealGetTicket(i);
          DealChecking(ticket);
      } 
   }
}

///
/// Поступило новое событие о поступлении трейда.
///
void  OnTradeTransaction(
      const MqlTradeTransaction&    trans,
      const MqlTradeRequest&        request,
      const MqlTradeResult&         result
   )
{
   if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
     DealChecking(trans.deal);
   ...
}

///
/// Обработчик трейдов.
/// \param ticket - Уникальный идентификатор трейда, который надо обработать.
void DealChecking(int ticket)
{
   
   // Далее идет нужная обработка.
   ...
   //Трейд обработан - увеличиваем количество обработанных трейдов.
   dealsCount++;
}

В данной реализации избыточности нет, т.к. фактический обработчик события "новый трейд наступил" один. А вот его вызов осуществляется двумя разными способами: через таймер и через событие  OnTradeTransaction. Если по каким-то причинам новый трейд не вызвал событие  OnTradeTransaction, то произойдет рассинхронизация между общим количеством, и количеством обработанных сделок. Все необработанные трейды через цикл for в этом случае все равно попадут обработчику DealChecking.

Если подумать, то подобную схему можно огранизовать для любого события, а не только для  TRADE_TRANSACTION_DEAL_ADD.
 
Mikalas:

...

P/S И не нужно "вырывать текст" и всего предложения, которое начинается так:

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

Более подробно всегда можно ознакомиться в Справке.

Со всем остальным согласен с Yurich. Вероятно и Вам нужно пересмотреть свою схему.

 

Уважаемые коллеги!

Всем огромное спаибо за высказанные мнения!

Только грызёт червячок: А зачем ПЛАТФОРМА тогда?

 

Mikalas:

 

 А зачем ПЛАТФОРМА тогда?

Это наверно был риторический вопрос :) А если нет, то ответ уже был дан в этой ветке:

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

Разработчики! Вы вообще тестируете то, что создаёте?

C-4, 2013.12.10 12:08

Не советую. Гораздо проще исправить этот баг совместно с MQ, чем одному городить новый терминал под плазу. Увязните в бесконечном исправлении глюков и написании "стандартного функционала". Говорю по собственному опыту. Частично разрабатывал один из таких самопальных комплексов на базе Stock# - результат очередной "велосипед" под специфические задачи. Уж лучше повоюйте со службой поддержки, и проще и дешевле будет. 
Меня тоже не все устраивает в терминале, например, отношение к "последней цене". Но надеюсь, что  когда наберется критическая масса биржевиков, MQ начнет прислушиваться к их потребностям.
 
ок. а какая реальная альтернатива MT5?
 
Armen:
ок. а какая реальная альтернатива MT5?

Вот именно этим вопросом и надо задаться прежде чем создавать подобные ветки. До прихода МТ5, что бы торговать на ФОРТсе надо было как минимум написать свой торговый терминал. Готовых решений в этом сегменте нет, не считая Quick'a который для алготрейдинга практически не применим (кто хоть раз писал программы на QPile больше 1000 строк поймет о чем я говорю). Есть вспомогательный набор библиотек Stock#, но он так и не развился в полноценный торговый терминал "из коробки" (запустил и торгуй). По факту программисту средней и высокой квалификации понадобиться до полугода, что бы создать торговую платформу с использованием Stock#. Начинающему программисту сей продукт будет вообще не по зубам. Eще есть терминалы вроде Кофите, TSLab, WealthLab. Но надо четко понимать, что напрямую брокерами они не поддерживаются, т.е. Вас ждет связка Quick + ВашаСуперТорговаяПлатформа (со всеми вытекающими проблемами передачи данных через DDE). А если хотите работать через протокол PlazaII, - то за 3 000 рублей в месяц брокер предоставит Вам такую возможность.

В буржуйском сегменте дела не лучше. Далеко не каждый американский брокер предоставляет торговую платформу с возможностью алготрейдинга. Далеко не с каждым американским брокером можно работать из России. Хорошо уже, если дают API. И опять возвращаемся к написанию своего велосипеда под этот API. Мало того, предоставляемые платформы слишком разные, заточены под разные сегменты рынка. Сравните хотя бы тот же Wealth-Lab с ThinkOrSwim. Никаких стандартов, никакого унифицированного интерфейса.

В общем если Ваш девиз "покой мне только снился" или "я занимаюсь трейдингом ради тестирования нового ПО и написания очередного велосипеда" - то действительно, Вам лучше поискать какую-нибудь другую платформу а не MetaTrader5. 

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