Новая версия платформы MetaTrader 4 build 910: Улучшения в Библиотеке кодов и доработка интерфейса для Windows 10 - страница 3

 

В новом Bild 910 появилась проблема в тестере.

 

В советнике есть такие строки (параметры советника):

enum  PeR     { M1=1, M5=5, M15=15, M30=30, H1=60, H4=240, D1=1440, W1=10080, MN1=43200 };  // Список периодов для работы 

input   PeR     Gl_Per           = D1;   // Период для Индикатора

input   PeR     Gl_Per_Dop    = W1;   // Период для Доп ордеров

 

enum  BuySell   { Auto=9, Buy=1, Sell=-1 };   // Режим торговли 

input   BuySell   BS=Auto;

 

Тестируем советника. 

Для оптимизации выбраны параметры "Gl_Per"  и  "Gl_Per_Dop"  

 

смотрим результат оптимизации и видим:

41 1440.44 430 65.82 3.35 1006.60 9.77% 0.00000000 Gl_Per=0 Gl_Per_Dop=0 Fix=1.1 Prof=1.3 Yes_Test=1 Start_Ich=0 Gl_Risk=0.2

85 1355.64 286 52.26 4.74 843.71 8.20% 0.00000000 Gl_Per=0 Gl_Per_Dop=0 Fix=1.4 Prof=1.6 Yes_Test=1 Start_Ich=0 Gl_Risk=0.2

58 1333.39 317 51.63 4.21 849.45 8.26% 0.00000000 Gl_Per=0 Gl_Per_Dop=0 Fix=1.4 Prof=1.8 Yes_Test=1 Start_Ich=0 Gl_Risk=0.2

 

Почему Gl_Per и Gl_Per_Dop = 0,  должен быть указан период D1 или W1  и.т.д.

Раньше всё работало нормально (в предыдущем bild). 

 

В дополнение:  при выборе свойств эксперта - не возможно стало выбрать параметр  "Gl_Per"  и  "Gl_Per_Dop".

На табло одни нули (((.

 

Свойства эксперта - видны значения параметров Gl_Per и Gl_Per_Dop W1  и  D1   а при выборе  =  0 0 0 0 0 0   )))

 

 

 

 

 

 

 
Александр:

В новом Bild 910 появилась проблема в тестере.

 

В советнике есть такие строки (параметры советника):

enum  PeR     { M1=1, M5=5, M15=15, M30=30, H1=60, H4=240, D1=1440, W1=10080, MN1=43200 };  // Список периодов для работы 

input   PeR     Gl_Per           = D1;   // Период для Индикатора

input   PeR     Gl_Per_Dop    = W1;   // Период для Доп ордеров

 

enum  BuySell   { Auto=9, Buy=1, Sell=-1 };   // Режим торговли 

input   BuySell   BS=Auto;

 

Тестируем советника. 

Для оптимизации выбраны параметры "Gl_Per"  и  "Gl_Per_Dop"  

 

смотрим результат оптимизации и видим:

41 1440.44 430 65.82 3.35 1006.60 9.77% 0.00000000 Gl_Per=0 Gl_Per_Dop=0 Fix=1.1 Prof=1.3 Yes_Test=1 Start_Ich=0 Gl_Risk=0.2

85 1355.64 286 52.26 4.74 843.71 8.20% 0.00000000 Gl_Per=0 Gl_Per_Dop=0 Fix=1.4 Prof=1.6 Yes_Test=1 Start_Ich=0 Gl_Risk=0.2

58 1333.39 317 51.63 4.21 849.45 8.26% 0.00000000 Gl_Per=0 Gl_Per_Dop=0 Fix=1.4 Prof=1.8 Yes_Test=1 Start_Ich=0 Gl_Risk=0.2

 

Почему Gl_Per и Gl_Per_Dop = 0,  должен быть указан период D1 или W1  и.т.д.

Раньше всё работало нормально (в предыдущем bild). 

Нужны дополнительные подробности.

Мы не можем воспоизвести описываемую Вами проблему

 
Александр:

В дополнение:  при выборе свойств эксперта - не возможно стало выбрать параметр  "Gl_Per"  и  "Gl_Per_Dop".

На табло одни нули (((.

 

Свойства эксперта - видны значения параметров Gl_Per и Gl_Per_Dop W1  и  D1   а при выборе  =  0 0 0 0 0 0   )))


 

Похоже, где-то затирается память

Не могли бы Вы дать Ваш ex4 для проверки? Он будет сразу же уничтожен после исследований

 
Slawa:

Нужны дополнительные подробности.

Мы не можем воспоизвести описываемую Вами проблему

 Вот пример - простой советник но с параметрами  ENUM.

 

//========================================================= 

 enum PerH { M1=1,M5=5,M15=15,M30=30,H1=60,H4=240,D1=1440,W1=10080 };

input PerH Per= M30;

extern double StopLoss           = 30;

extern double TakeProfit         = 75;

extern double MovingPeriod1      = 5;

extern double MovingPeriod2      = 75;

extern double MovingPeriod3      = 85;

extern double Risk               = 1;

input bool    Yes_Sv2            = true;

bool BuyOne=true,SellOne=true;

//+------------------------------------------------------------------+

//| Check for open order conditions                                  |

//+------------------------------------------------------------------+

void CheckForOpen()

  {

   double ma1,ma2,ma3,macd1,macd2;

   int    res;

//---- 

   ma1=iMA(NULL,Per,MovingPeriod1,0,MODE_EMA,PRICE_CLOSE,1);

   ma2=iMA(NULL,Per,MovingPeriod2,0,MODE_LWMA,PRICE_LOW,1);

   ma3=iMA(NULL,Per,MovingPeriod3,0,MODE_LWMA,PRICE_LOW,1);

   macd1=iMACD(NULL,Per,15,26,1,PRICE_CLOSE,MODE_MAIN,1);

   macd2=iMACD(NULL,Per,15,26,1,PRICE_CLOSE,MODE_MAIN,2);


//---- buy 

   if(ma1>ma2 && ma1>ma3 && macd1>0 && BuyOne && macd2<=macd1 && (!Yes_Sv2 || (macd2<=0 && Yes_Sv2)))

     {

      res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",111,0,Blue);

      BuyOne=false; SellOne=true;

      return;

     }

//---- sell   

   if(ma1<ma2 && ma1<ma3 && macd1<0 && SellOne && macd2>=macd1 && (!Yes_Sv2 || (macd2>=0 && Yes_Sv2)))

     {

      res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",222,0,Red);

      SellOne=false; BuyOne=true;

      return;

     }


  }

//+------------------------------------------------------------------+

//| Start function                                                   |

//+------------------------------------------------------------------+

void start()

  {

   if(Bars<100 || IsTradeAllowed()==false) return;

   CheckForOpen();

  }

//+------------------------------------------------------------------+

//| Calculate optimal lot size                                       |

//+------------------------------------------------------------------+

double Lots()

  {

   double Lots;

   double acc_free_margin=AccountFreeMargin(),calc_margin=MarketInfo(Symbol(),MODE_MARGINREQUIRED);


   Lots=acc_free_margin/calc_margin;

   if(Lots<0.1)

      Lots=NormalizeDouble(Lots,2);

   else

     {

      if(Lots<1) Lots=NormalizeDouble(Lots,1);

      else       Lots=NormalizeDouble(Lots,0);

     }

   Lots=Risk*Lots/100;

   return(Lots);

  }

//================================================  


 Попробуйте протестировать с параметром "Per"  

 

 


 
Александр:

 Вот пример - простой советник но с параметрами  ENUM.

 


 Попробуйте протестировать с параметром "Per"  

 

Сразу же так и сделали. Эксперт такой же простой, параметры скопировали Ваши.

У Вас на этом эксперте воспроизводится? Дайте нам этот ex4, собранный Вашим компилятором. А также подробности, какая ОС, какие права доступа, сколько оперативной памяти, параметры тестирования (торговый сервер, символ, период, даты тестирования)

 
Slawa:

Сразу же так и сделали. Эксперт такой же простой, параметры скопировали Ваши.

У Вас на этом эксперте воспроизводится? Дайте нам этот ex4, собранный Вашим компилятором. А также подробности, какая ОС, какие права доступа, сколько оперативной памяти, параметры тестирования (торговый сервер, символ, период, даты тестирования)

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

   На ПК пока стоит:  ОС - ХР, ОЗУ - 3Гб  сервер Alpari-demo, а cимвол EURUSD.

 

  Для информации как проявлялось себя проблема: 

 При открытии свойств эксперта в первую секунду - таблица свойств открывалась и все входные параметры были видны и не пустые. Но через секунду или чуть менее (в процессе активации таблицы) значения в реквизите "Per" уже были пустыми, т.е. = пробелу, пусто было также в параметре старт и стоп этого реквизита.

  Ну а при выборе значений реквизита - все 8-мь вариантов были нулевыми см первый пост( https://www.mql5.com/ru/forum/66900/page3#comment_2057881 ).

  Может это связано с нехваткой оперативной памяти в моём ПК, а может ещё с чем то.

  Что-то есть во входных параметрах перечисляемого типа, вот и сейчас пробую разные варианты этого советника: оптимизирую первый смотрю результат оптимизации - всё нормально переменная данные по переменной Per видны , затем тестирую второй но без оптимизации, и вижу что результат оптимизации первого варианта меняются, а именно, данные по переменным перечисляемого типа искажены:    Per= 0 или Per=3735552 ???  Это связано с тем, что при тесте второго советника перечисляемые типы первого наверное удаляются (т.е. перечисляемый тип потерял свои елементы ) и поэтому они не видны в результатах его прошлой оптимизации.

 

 Ну ладно это просто мысли в слух - если будут полезными - хорошо - а нет так извините старого маразматика ( более 60 лет уже ) можно и поворчать по стариковски  ))). 

Новая версия платформы MetaTrader 4 build 910: Улучшения в Библиотеке кодов и доработка интерфейса для Windows 10
Новая версия платформы MetaTrader 4 build 910: Улучшения в Библиотеке кодов и доработка интерфейса для Windows 10
  • www.mql5.com
Tester: Добавлено ограничение при тестировании демо-версий индикаторов и экспертов из MQL5 Market. - Страница 3 - Категория: общее обсуждение
 
Alexandr Ivanov:

Функция определения нового бара в новом билде в тестере стала давать ошибку - Ошибка копирования времени, номер ошибки =4073

 

bool bIsNewBar()
  {
   bool bRes=false;

   datetime New_Time[1];

   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) 
     {
      if(Old_Time!=New_Time[0]) 
        {
         bRes=true;

         Old_Time=New_Time[0];   
        }
     }
   else
     {
      _Print("Ошибка копирования времени, номер ошибки ="+DoubleToString(GetLastError(),0));
      ResetLastError();
      return bRes;
     }

   return bRes;
  }

Проверил простеньким экспертом в тестере на 15-минутках по ценам открытия:

 

void OnTick()
{
   datetime New_Time[1];

   ResetLastError();
   
   int copied = CopyTime(_Symbol, _Period, 0, 1, New_Time);
   
   if(copied > 0)
      Print("Время скопированного бара: " + TimeToString(New_Time[0]));
   else
      Print("Ошибка копирования времени, номер ошибки =" + IntegerToString(GetLastError()));
}

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

ЗЫ. В МТ5 тоже проверил, там всё в порядке. 

 

 

Кстати. Давно хотел написать. В метаэдиторе из меню "Файл" можно открыть общий каталог данных. А из терминала-то почему нельзя? Что в пятёрке, что в четвёрке. Неудобно же по проводнику лазить.

 

 
Sergei Vladimirov:

Кстати. Давно хотел написать. В метаэдиторе из меню "Файл" можно открыть общий каталог данных. А из терминала-то почему нельзя? Что в пятёрке, что в четвёрке. Неудобно же по проводнику лазить.

 

Потому, что общий каталог данных это каталог в который пишут и читают файлы советники, индикаторы или скрипты. Соответственно найти его надо программисту, а не трейдеру. По сути трейдеру пофигу куда что пишется и откуда читается, а программисту это обязательно надо, при отладке программы, для проверки что написано и что будет прочитано.
 
Alexey Viktorov:
Потому, что общий каталог данных это каталог в который пишут и читают файлы советники, индикаторы или скрипты. Соответственно найти его надо программисту, а не трейдеру. По сути трейдеру пофигу куда что пишется и откуда читается, а программисту это обязательно надо, при отладке программы, для проверки что написано и что будет прочитано.
Ну, логика в этом есть, но вот у меня как-то раз человек заказывал индикатор, который писал в файл кое-какую инфу одновременно из разных терминалов, а он потом этот файл анализировал какой-то своей прогой. Т.е. ему постоянно нужен был доступ к этому файлу. Тогда-то я на это дело и обратил внимание. Так-то проблема невелика, конечно, но... Я думал, что в терминал этот пункт просто забыли добавить. )
Причина обращения: