Чемпионат Automated Trading Championship 2010 стартовал! - страница 15

 
Vladon:

У Беркута:

2010.10.05 19:10:18 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:16 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:16 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:15 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:15 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:13 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:12 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:12 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:10 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:09 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:09 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:08 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:08 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:07 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:06 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:05 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:04 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 19:10:02 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 12:20:23 CTrade::PositionOpen::OrderSend: Requote
2010.10.05 12:20:22 CTrade::PositionOpen::OrderSend: Requote

Посмотрим лог терминала - там всё становится и понятнее:

2010.10.05 19:10:09 '630042' : requote 1.38438 / 1.38451 (instant buy 4.60 EURUSD at 1.38430)
2010.10.05 19:10:09 '630042' : instant buy 4.60 EURUSD at 1.38430
2010.10.05 19:10:09 '630042' : requote 1.38439 / 1.38450 (instant buy 4.60 EURUSD at 1.38430)
2010.10.05 19:10:09 '630042' : instant buy 4.60 EURUSD at 1.38430
2010.10.05 19:10:08 '630042' : requote 1.38440 / 1.38451 (instant buy 4.60 EURUSD at 1.38430)
2010.10.05 19:10:08 '630042' : instant buy 4.60 EURUSD at 1.38430
2010.10.05 19:10:08 '630042' : requote 1.38439 / 1.38450 (instant buy 4.60 EURUSD at 1.38430)
2010.10.05 19:10:07 '630042' : instant buy 4.60 EURUSD at 1.38430
2010.10.05 19:10:07 '630042' : requote 1.38436 / 1.38448 (instant buy 4.60 EURUSD at 1.38420)
2010.10.05 19:10:07 '630042' : instant buy 4.60 EURUSD at 1.38420
2010.10.05 19:10:06 '630042' : requote 1.38434 / 1.38445 (instant buy 4.60 EURUSD at 1.38420)
2010.10.05 19:10:06 '630042' : instant buy 4.60 EURUSD at 1.38420
2010.10.05 19:10:05 '630042' : requote 1.38430 / 1.38441 (instant buy 4.60 EURUSD at 1.38420)
2010.10.05 19:10:05 '630042' : instant buy 4.60 EURUSD at 1.38420
2010.10.05 19:10:04 '630042' : requote 1.38429 / 1.38440 (instant buy 4.60 EURUSD at 1.38420)
2010.10.05 19:10:04 '630042' : instant buy 4.60 EURUSD at 1.38420
2010.10.05 19:10:02 '630042' : requote 1.38431 / 1.38442 (instant buy 4.60 EURUSD at 1.38420)
2010.10.05 19:10:02 '630042' : instant buy 4.60 EURUSD at 1.38420


Т.е. эксперт никак не реагировал на изменение цен - что уже является ошибкой. Дополнительная проверка показала, что эксперт использовал клиентское отклонение в 10 пунктов, но даже с этим отклонением цена не разу не удовлетворяла условиям входа.

 
Alexander:

Посмотрим лог терминала - там всё становится и понятнее:


Будьте добры, взгляните на мой лог, и на вопрос 
 
pronych:
Будьте добры, взгляните на мой лог, и на вопрос 

Судя по логам клиента и сервера, это связано с неточностью настройки условий сервера при реквотировании запросов с установленным клиентским отклонением.
Мы откорректировали настройки 5 октября около 22.00 по московскому времени.


 
arnautov:

Я вот так пытался побороть

  OrderSend(request,result);  
  ulong iTicket=result.order;
  ulong l=0;
  for (int i=0;i<10;i++)
   {
   int z=OrdersTotal();
   for (int j=0;j<z;j++)
    {
    l=OrderGetTicket(j);
    if (l>0)
       if (l==iTicket)
         return(true);
    }
   Sleep(1000);
   }

Учитывая естественную асинхронность процессов исполнения ордеров и прихода тиков, я не стал использовать Sleep(), чтобы как то синхронизировать процесс. Для мультивалютника это вообще пагубно, пока Sleep'ом в цикле дождешься появляения исполненого ордера, цены для других валют уйдут, очередь из тиков в терминал выстроится. Вообщем, мне такая идея не нравится, тем более, что нам предоставлена возможность отслеживать этот процесс по событиям, а не постоянной проверкой в цикле.

Вот что я предпринимаю в OnTick при удачной посылке ордера на исполнение (упрощенно):

   orderdone = OrderSend(request, result);

   if (orderdone) {
      switch (result.retcode) {
         case TRADE_RETCODE_DONE:
         case TRADE_RETCODE_DONE_PARTIAL: {
            d[si].shouldITrade = false;                           // Запрещаем торговлю по символу (разрешаем вновь в OnTrade)
            d[si].virtualorder[SELL].checkticket = result.order;  // Запоминаем тикет, который будем ловить в OnTrade)
         } break;
         default: Print(result.retcode, ": ",result.comment); break;
      } 

 после чего советник не торгует по символу до тех пор пока в OnTrade не выловится исполненный ордер (снова упрощенно):

   ulong dealticket = HistoryDealGetTicket(lastdealentry);
...
   if (dealticket == d[si].virtualorder[BUY].checkticket || dealticket == d[si].virtualorder[SELL].checkticket) d[si].shouldITrade = true; // Разрешаем торговлю по символу снова
 

Попробуйте, может понравится.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Alexander:

Судя по логам клиента и сервера, это связано с неточностью настройки условий сервера при реквотировании запросов с установленным клиентским отклонением.
Мы откорректировали настройки 5 октября около 22.00 по московскому времени.


Уже не будеть реквоты, если новая цена в диапазон deviation  ???   :D 
 
Alexander:

Судя по логам клиента и сервера, это связано с неточностью настройки условий сервера при реквотировании запросов с установленным клиентским отклонением.
Мы откорректировали настройки 5 октября около 22.00 по московскому времени.


Благодарю
 

Мой эксперт на чемпионате производит все расчеты и открывает позиции ТОЛЬКО при появлении нового бара (H4), за исключением трейлинга при открытой позиции.

И вот что я вижу на вкладке "Эксперты":

 

В указанное время новых 4-х часовых баров быть не могло!

Открытых позиций не было!


Последняя позиция была закрыта 2010.10.05 19:16:04

 

И всё это произошло после потери соединения с торговым сервером!

На домашнем компьютере у меня запущена точная копия эксперта с чемпионата, за исключением того, что лот постоянный. Эксперт работает без сбоев и ошибок, последняя сделка  закрыта 2010.10.06 22:00:57

Просьба к организаторам - проверьте, пожалуйста, что произошло?

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

 P.S. С датами и временем в логах - это уже известные глюки. 

 

 
owl:

Мой эксперт на чемпионате производит все расчеты и открывает позиции ТОЛЬКО при появлении нового бара (H4), за исключением трейлинга при открытой позиции.

И вот что я вижу на вкладке "Эксперты":

Насколько я понял это сообщение о том что в определенном массиве произошел выход за границы диапазона допустимого для данного массива.

Подробно можно узнать о произошедшем проанализировав строку 450, позицию 16 (видимо там производилось добавления нового значения в массив).

Возможно происходит запись в массив по несуществующему адресу, к примеру не учитывался 0-вой адрес, или как вариант изменяется размерность не динамического массива...

PS

Как я понимаю, время указано по часам терминала, а не сервера...

 

Господа разработчики! Пожалуйста обратите внимание на мой советник - поставте ему диагноз. Складывается впечатление, что он по неизвестным причинам умер. После реквот по USDCAD и GBPJPY он не стал открывать позиции, хотя сообщил, что собирается это сделать. Он просто замолк, в лог ничего не пишет. После этого он пропустил две сделки по EURUSD, сегодня утром пропустил по USDJPY и по EURCHF. Может пора организовывать вынос тела робота?

 
Interesting:

Насколько я понял это сообщение о том что в определенном массиве произошел выход за границы диапазона допустимого для данного массива.

Подробно можно узнать о произошедшем проанализировав строку 450, позицию 16 (видимо там производилось добавления нового значения в массив)

PS

Как я понимаю, время указано по часам терминала, а не сервера...

Само сообщение об ошибке, естественно, мне понятно.

Строка 450: 

bu=rates[i].high-au*(double)rates[i].time;

 Перед этим:

     MqlRates rates[];
     ArraySetAsSeries(rates,true);

     int result=CopyRates(_Symbol,_Period,0,Bars(_Symbol,_Period),rates);

 i может принять значение от 2 до Bars(_Symbol,_Period)-2

 А потом, разве эксперт, в котором такая ошибка, мог бы пройти автоматическое тестирование с 01.01.10 по 01.08.10 ???

P.S. Время - да, в одних местах терминала, в других текущее... Там с датами - весело, в логах до сих пор ещё 5-ое октября 

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