Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1434

 
Yuriy Bykov #:
Вы используете генетическую или полную оптимизацию?
Я тоже использовал подобный подход для исключения заведомо ненужных комбинаций параметров и не заметил некорректной работы оптимизатора. Наоборот, оптимизатор работал именно так, как ожидалось.
Можно попробовать добавить сохранение пропускаемых комбинаций параметров в БД или общий файл, чтобы проверить, сколько и какие действительно пропускаются и разобраться в причинах.
Использую генетическую оптимизацию.
Сохранять варианты оптимизации в файл – попробую. Спасибо за идею!

 
При установке советника на график в MT5 как разрешить ему торговать (открывать) только sell или buy (в опциях самого советника таких паметров нет) ?
 
taramortom #:
Использую генетическую оптимизацию.

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

 
Yuriy Bykov #:

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


Да, проблема в комбинации: генетический алгоритм + блокировка определенных комбинаций. При полной оптимизации все работает корректно, но полноценная оптимизация займет нереально много времени.

Я надеялся, что можно каким-то способом показать оптимизатору, что такие варианты недопустимы и чтобы он их даже  не пытался использовать, сосредоточился на других вариантах. По факту происходит, как вы  написали. 

 
Alexey Petrov #:

Вы можете создать вакансию фрилансера и выбрать одного из разработчиков, претендующих на вашу работу

https://www.mql5.com/fr/job

Спасибо, я разместил свое объявление и надеюсь, что наконец-то найду решение :)
 

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


Как в MQL5 выглядит код, который разрешает советнику торговать в определённые часы? Не могу портировать из MQL4.


void OnTick()

  {

   double PriceBid=MarketInfo(0,MODE_BID);

   double time = Hour() + Minute()*0.01;

   Comment("точка отсчёта   ",inpoint,

           "\n","шаг   ",iter,

           "\n","время  ",time,

           "\n","цена  ", Bid,

           "\n","цена  ",PriceBid);

   if(time <= Stop_work_time)

   {

   //if(Type==BUY || Type==ALL)newbuyorder();

   //if(Type==SELL || Type==ALL)newsellorder();

   in();

   takestop();

   stoporders();

   connected();

   delorders();

   }

   else 

   {

   takestop();

   delorders();

   }

  }

Файлы:
kachinmind.mq4  38 kb
 
EfremovSergey #:

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


Как в MQL5 выглядит код, который разрешает советнику торговать в определённые часы? Не могу портировать из MQL4.


void OnTick()

  {

   double PriceBid=MarketInfo(0,MODE_BID);

   double time = Hour() + Minute()*0.01;

   Comment("точка отсчёта   ",inpoint,

           "\n","шаг   ",iter,

           "\n","время  ",time,

           "\n","цена  ", Bid,

           "\n","цена  ",PriceBid);

   if(time <= Stop_work_time)

   {

   //if(Type==BUY || Type==ALL)newbuyorder();

   //if(Type==SELL || Type==ALL)newsellorder();

   in();

   takestop();

   stoporders();

   connected();

   delorders();

   }

   else 

   {

   takestop();

   delorders();

   }

  }

Реализацию данной задачи в mq5 можно повторить с помощью 

MqlDateTime
 

Всем доброго утра и хорошего настроения!

Уважаемые специалисты!!! Подскажите, пожалуйста, что не так в этом коде (желтым цветом выделена та часть, на которой периодически проявляется ошибка):

//+------------------------------------------------------------------+
//|                                            Proba (version_1).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- Global variables
MqlRates pArray[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(pArray,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!DownwardTrendline())
     {
      Print("Ошибка при создании линии DownwardTrendline!!! ", GetLastError());
      return;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool DownwardTrendline()
  {
   int candles=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
   double pHigh[];
   ArraySetAsSeries(pHigh,true);
   CopyHigh(_Symbol,_Period,0,candles,pHigh);
   int candleHigh = ArrayMaximum(pHigh,0,candles);
   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);
   ObjectDelete(0,"DnwardTrendline");
   ObjectCreate(0,"DnwardTrendline",OBJ_TREND,0,pArray[candleHigh].time,
                pArray[candleHigh].high,pArray[0].time,pArray[0].high);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_COLOR,Blue);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_WIDTH,3);
   ObjectSetInteger(0,"DnwardTrendline",OBJPROP_RAY_RIGHT,true);
   return(true);
  }
//+------------------------------------------------------------------+

Почему периодически, то работает в тестере стратегий, то не работает и в журнале появляется вот такое сообщение:


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

 
MrBrooklin #:

Всем доброго утра и хорошего настроения!

Уважаемые специалисты!!! Подскажите, пожалуйста, что не так в этом коде (желтым цветом выделена та часть кода, на которой периодически проявляется ошибка):

Почему периодически, то работает в тестере стратегий, то не работает и в журнале появляется вот такое сообщение:


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

Поставь проверку после строки

   int Data = CopyRates(_Symbol,_Period,0,candles,pArray);

если Data < 1 чего-то, как-то крикнуть.

 
Alexey Viktorov #:

Поставь проверку после строки

если Data < 1 чего-то, как-то крикнуть.

Доброе утро, Алексей! Спасибо за подсказку! Сейчас попробую.

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