Обсуждение статьи "Какие проверки должен пройти торговый робот перед публикацией в Маркете" - страница 12

 
Vladislav Andruschenko:
Вроде починили. 

точно починили, прошел проверку робот.

 
Покупка происходит по цене Ask     Продажа происходит по цене Bid
TakeProfit - Bid >= SYMBOL_TRADE_STOPS_LEVEL
Bid - StopLoss >= SYMBOL_TRADE_STOPS_LEVEL
Ask - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL

Так в статье написано. Но, разве не так надо -

  Покупка происходит по цене Ask     Продажа происходит по цене Bid
TakeProfit - Ask >= SYMBOL_TRADE_STOPS_LEVEL
Bid - StopLoss >= SYMBOL_TRADE_STOPS_LEVEL

Bid - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL

А так же в коде функции -


// ...

switch(type)
     {
      //--- операция покупка
      case  ORDER_TYPE_BUY:
        {
         //--- проверим StopLoss
         SL_check=(Bid-SL>stops_level*_Point);
         if(!SL_check)
            PrintFormat("For order %s StopLoss=%.5f must be less than %.5f"+
                        " (Bid=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d пунктов)",
                        EnumToString(type),SL,Bid-stops_level*_Point,Bid,stops_level);
         //--- проверим TakeProfit
         TP_check=(TP-Ask>stops_level*_Point);
         if(!TP_check)
            PrintFormat("For order %s TakeProfit=%.5f must be greater than %.5f"+
                        " (Bid=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d пунктов)",
                        EnumToString(type),TP,Bid+stops_level*_Point,Bid,stops_level);
         //--- вернем результат проверки
         return(SL_check&&TP_check);
        }
      //--- операция продажа
      case  ORDER_TYPE_SELL:
        {
         //--- проверим StopLoss
         SL_check=(SL-Ask>stops_level*_Point);
         if(!SL_check)
            PrintFormat("For order %s StopLoss=%.5f must be greater than %.5f "+
                        " (Ask=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d пунктов)",
                        EnumToString(type),SL,Ask+stops_level*_Point,Ask,stops_level);
         //--- проверим TakeProfit
         TP_check=(Bid-TP>stops_level*_Point);
         if(!TP_check)
            PrintFormat("For order %s TakeProfit=%.5f must be less than %.5f "+
                        " (Ask=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d пунктов)",
                        EnumToString(type),TP,Ask-stops_level*_Point,Ask,stops_level);
         //--- вернем результат проверки
         return(TP_check&&SL_check);
        }
      break;
     }

// ...

???

Если делать как в статье мы просто теряем пункты из спреда в прибыли! Мб я что то не понимаю?

 
Oleg Arsentev #:
Покупка происходит по цене Ask     Продажа происходит по цене Bid
TakeProfit - Bid >= SYMBOL_TRADE_STOPS_LEVEL
Bid - StopLoss >= SYMBOL_TRADE_STOPS_LEVEL
Ask - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL

Так в статье написано. Но, разве не так надо -

  Покупка происходит по цене Ask     Продажа происходит по цене Bid
TakeProfit - Ask >= SYMBOL_TRADE_STOPS_LEVEL
Bid - StopLoss >= SYMBOL_TRADE_STOPS_LEVEL

Bid - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL

А так же в коде функции -


???

Если делать как в статье мы просто теряем пункты из спреда в прибыли! Мб я что то не понимаю?

Прибыль теряем, конечно. Но ближе ставить стопы нельзя:

Поэтому уровни TakeProfit и StopLoss необходимо сравнивать с текущей ценой, по которой можно совершить операцию противоположного направления:

  • Покупка совершается по цене Ask — уровни TakeProfit и StopLoss нужно сравнивать с текущей ценой продажи Bid.
  • Продажа совершается по цене Bid — уровни TakeProfit и StopLoss нужно сравнивать с текущей ценой покупки Ask.
 
Да *** проверку не проходят,половина роботов на маркете не рабочие
 
dryun777 #:
Да *** проверку не проходят,половина роботов на маркете не рабочие

Это статья для тех, кто ПИШЕТ советников. Вам нужны статьи из цикла "Как тестировать".

 

Здравствуйте.

Чем проверить достаток дискового пространства?


теперь такое сообщение

с третьей попытки прошло без внесения каких-либо изменений


 
Denis Nikolaev #:

Здравствуйте.

Чем проверить достаток дискового пространства?


теперь такое сообщение

с третьей попытки прошло без внесения каких-либо изменений


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

Памяти на сервере добавили.

 
Anton #:

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

Памяти на сервере добавили.

Благодарю.

 

Терминал МТ5. Брокер RoboForex, инструмент - CFD AAPL
При первом же прогоне в робота тестере 2021.05.05 16:30:00  получил  сообщение " failed market buy 0.1 AAPL [Market closed] ",  ошибка 4756, реткод 10018     

День рабочий - среда, время торговое, тик в 16:30:00 проходит,  по какой причине закрыт рынок - непонятно.

Проверки на   Market closed нет списке обязательных проверок, т.е. (теоретически) сов валидацию прошел бы. 
Но!
Если после получения этой ошибки не делать задержку по времени на 2-3 часа, то не пройдет - будет получена критическая ошибка "Стек переполнен", тестер вырубится. Да даже если и прошел бы - очень мне не нравятся любые ошибки в журнале. Не должно их быть.

Внимательно пересмотрел все функции - как получить событие " Market closed " не нашел. Похоже что его нет.
Вопрос к автору статьи:
- Как с этим бороться?
Если все же есть функция помогающая избежать этой ошибки - подскажите, пожалуйста, буду благодарен.
В реальной торговле за пару минут до закрытия дня и минут 5-10 минут после начала нового, почти все брокеры закрывают торговлю. Но котировки идут. Таким образом советник, если он открывает по рынку и есть разрешающий сигнал, выдает простыни ошибок. Хорошо хоть в тестере этот "перекур" не отрабатывается. 

 
Vasyl Temchenko #:

Терминал МТ5. Брокер RoboForex, инструмент - CFD AAPL
При первом же прогоне в робота тестере 2021.05.05 16:30:00  получил  сообщение " failed market buy 0.1 AAPL [Market closed] ",  ошибка 4756, реткод 10018     

День рабочий - среда, время торговое, тик в 16:30:00 проходит,  по какой причине закрыт рынок - непонятно.

Проверки на   Market closed нет списке обязательных проверок, т.е. (теоретически) сов валидацию прошел бы. 
Но!
Если после получения этой ошибки не делать задержку по времени на 2-3 часа, то не пройдет - будет получена критическая ошибка "Стек переполнен", тестер вырубится. Да даже если и прошел бы - очень мне не нравятся любые ошибки в журнале. Не должно их быть.

Внимательно пересмотрел все функции - как получить событие " Market closed " не нашел. Похоже что его нет.
Вопрос к автору статьи:
- Как с этим бороться?
Если все же есть функция помогающая избежать этой ошибки - подскажите, пожалуйста, буду благодарен.
В реальной торговле за пару минут до закрытия дня и минут 5-10 минут после начала нового, почти все брокеры закрывают торговлю. Но котировки идут. Таким образом советник, если он открывает по рынку и есть разрешающий сигнал, выдает простыни ошибок. Хорошо хоть в тестере этот "перекур" не отрабатывается. 

Котировки идут, но тики отсутствуют. OnTick() работает только если есть очередной тик.

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