Ошибки, баги, вопросы - страница 74

 

В ходе тестирования советника случайно наткнулся на некорректную, по моему мнению, работу функции Sleep() в тестере. Суть в следующем:

советник закрывает все позиции в 23:00, если суммарный профит больше заданного (функция CloseAll()). После закрытия очередной позиции выполняется задержка 10 сек. в виде Sleep(10000).

Вот что имеем в журнале:

FP    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    CloseAll Profit: 3030.66
JD    0    Trade    04:31:04    instant sell 0.80 EURAUD at 1.56474 (1.56474 / 1.56558 / 1.56474)
JH    0    Trades    04:31:04    deal #85 sell 0.80 EURAUD at 1.56474 done (based on order #85)
HL    0    Trade    04:31:04    deal performed [#85 sell 0.80 EURAUD at 1.56474]
HI    0    Trade    04:31:04    order performed sell 0.80 at 1.56474 [#85 sell 0.80 EURAUD at 1.56474]
QE    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    Position by EURAUD to be closed
PN    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    23:0:0
FG    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    Sleep 10 cek.
RO    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    23:0:0
QD    0    Trade    04:31:04    instant buy 1.00 USDJPY at 90.444 (90.417 / 90.444 / 90.417)
NS    0    Trades    04:31:04    deal #86 buy 1.00 USDJPY at 90.444 done (based on order #86)
MJ    0    Trade    04:31:04    deal performed [#86 buy 1.00 USDJPY at 90.444]
JS    0    Trade    04:31:04    order performed buy 1.00 at 90.444 [#86 buy 1.00 USDJPY at 90.444]
JL    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    Position by USDJPY to be closed
JI    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    23:0:0
PN    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    Sleep 10 cek.
DF    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    23:0:0
QN    0    Trade    04:31:04    instant buy 0.80 AUDUSD at 0.90001 (0.89967 / 0.90001 / 0.89967)
IH    0    Trades    04:31:04    deal #87 buy 0.80 AUDUSD at 0.90001 done (based on order #87)
KQ    0    Trade    04:31:04    deal performed [#87 buy 0.80 AUDUSD at 0.90001]
RL    0    Trade    04:31:04    order performed buy 0.80 at 0.90001 [#87 buy 0.80 AUDUSD at 0.90001]
EG    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    Position by AUDUSD to be closed
LP    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    23:0:0
JI    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    Sleep 10 cek.

NQ    0    PriceChannel_multi (2) (EURUSD,H1)    04:31:04    23:0:0

Как видим, время до и после задержки одно и то же. Но это происходит, только если минуты и секунды TimeCurrent() == 0.

Если нет, то слип работает нормально. Например:

MD    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    CloseAll Profit: 3382.28
KQ    0    Trade    04:30:39    instant sell 0.70 EURUSD at 1.44090 (1.44090 / 1.44108 / 1.44090)
IE    0    Trades    04:30:39    deal #27 sell 0.70 EURUSD at 1.44090 done (based on order #27)
CI    0    Trade    04:30:39    deal performed [#27 sell 0.70 EURUSD at 1.44090]
EL    0    Trade    04:30:39    order performed sell 0.70 at 1.44090 [#27 sell 0.70 EURUSD at 1.44090]
DH    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    Position by EURUSD to be closed
JR    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    23:0:7
MK    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    Sleep 10 cek.
EP    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    23:0:15
DE    0    Trade    04:30:39    instant sell 0.80 AUDUSD at 0.91951 (0.91951 / 0.91993 / 0.91951)
CJ    0    Trades    04:30:39    deal #28 sell 0.80 AUDUSD at 0.91951 done (based on order #28)
HR    0    Trade    04:30:39    deal performed [#28 sell 0.80 AUDUSD at 0.91951]
HH    0    Trade    04:30:39    order performed sell 0.80 at 0.91951 [#28 sell 0.80 AUDUSD at 0.91951]
LS    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    Position by AUDUSD to be closed
QL    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    23:0:15
ED    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    Sleep 10 cek.
LO    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    23:0:25
DD    0    Trade    04:30:39    instant buy 0.60 EURAUD at 1.56727 (1.56632 / 1.56727 / 1.56632)
LN    0    Trades    04:30:39    deal #29 buy 0.60 EURAUD at 1.56727 done (based on order #29)
FK    0    Trade    04:30:39    deal performed [#29 buy 0.60 EURAUD at 1.56727]
IR    0    Trade    04:30:39    order performed buy 0.60 at 1.56727 [#29 buy 0.60 EURAUD at 1.56727]
RM    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    Position by EURAUD to be closed
FE    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    23:0:25
GN    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    Sleep 10 cek.

QE    0    PriceChannel_multi (2) (EURUSD,H1)    04:30:39    23:0:35

Код закрытия позиции:

if(m_trade[j].PositionClose(m_symbol[j].Name()))
           {
            PosCloseCount--;
            printf("Position by %s to be closed",m_symbol[j].Name());
            MqlDateTime  dt_struct;
            TimeCurrent(dt_struct);
            printf("%u:%u:%u",dt_struct.hour,dt_struct.min,dt_struct.sec);
            Sleep(10000);
            Print("Sleep 10 cek.");
            TimeCurrent(dt_struct);
            printf("%u:%u:%u",dt_struct.hour,dt_struct.min,dt_struct.sec);
           }

Вызов функции CloseAll:

   MqlDateTime  dt_struct;
   TimeCurrent(dt_struct);
   if(dt_struct.hour==23 && m_account.Profit()>InpProfitToClose)
     {
      Trade=false;Print("CloseAll Profit: ",m_account.Profit());
      while(PositionsTotal()>0)
         CloseAll();

Если изменить условие на 

if(dt_struct.hour==23 && dt_struct.min>0 && m_account.Profit()>InpProfitToClose)
то ошибок нет.
Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Общие функции / Sleep - Документация по MQL5
 
joo:
То есть, моё сообщение не напрасно, как я уже было подумал?

 

Да. Мы исправили поведение StringToTime. Спасибо.

 
Valmars:

В ходе тестирования советника случайно наткнулся на некорректную, по моему мнению, работу функции Sleep() в тестере. Суть в следующем:

Очень интересно. Посмотрим.
 
Открываю я закладку "Новости", а там... - какие-то не те новости. Я что-то упустил?
 
x100intraday:
Открываю я закладку "Новости", а там... - какие-то не те новости. Я что-то упустил?

Установите языки, на котором вы хотите принимать новости.


 
Rosh:

Установите языки, на котором вы хотите принимать новости.


 Да нет же. Там вроде как сыплются "новости" mt5-форума, к новостям Форекс они отношения не имеют. С недавних пор не просто проавтоапдейтился, а скачал дистрибутив mt5 заново и установил, уже почти неделю как. Не знаю, как там было на неделе, потому что в закладку "Новости" не залезал, но вот сейчас обнаружил:

Странные финансовые новости 

 
x100intraday:

 Да нет же. Там вроде как сыплются "новости" mt5-форума, к новостям Форекс они отношения не имеют. С недавних пор не просто проавтоапдейтился, а скачал дистрибутив mt5 заново и установил, уже почти неделю как. Не знаю, как там было на неделе, потому что в закладку "Новости" не залезал, но вот сейчас обнаружил:

Это на нашем демо-сервер транслируются новости сайта MQL5.com взамен отсутствующих форексных новостей (у нас нет права распространять бесплатно чужие новости).

Если не хотите их видеть, то просто отключите соответствующую галочку в разделе категорий новостей в меню по правой клавише мыши.

 

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

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
Yedelkin:

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

Укажите больше деталей (логи, скриншоты и тд), пожалуйста.

Без этого нельзя дать обоснованный ответ.

 
Renat:

Укажите больше деталей (логи, скриншоты и тд), пожалуйста.

Без этого нельзя дать обоснованный ответ. 

ОК. Демо-счёт на сервере MQ, лог-файл прикреплен (20100729.log), время начала автоматического обновления 20:54, в 22:36 сам удалил эксперт и через минуту загрузил.

В эксперте есть простейшая проверка типа:

if(CopyHigh(Symbol(),0,0,bars,high)<bars || CopyClose(Symbol(),0,0,bars,close)<bars || CopyLow(Symbol(),0,0,bars,low)<bars || CopyTime(Symbol(),0,0,bars,time)<bars)
  {
   Print("Can't copy timeseries!");
   return;
  }

Соответственно, после автоматического обновления пошли сообщения (файл 20100729copy.log).  В общем-то, такое встречалось и ранее, но как-то не обращал внимания.

После перезагрузки эксперта появились также исчезнувшие  линии цен открытия и стоп-лоссов на графике .

Может, что ещё добавить к сказанному? 

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