Новая версия платформы MetaTrader 5 build 2690: Улучшения в MetaEditor - страница 15

 
Aleksey Vyazmikin:

Да.

Тогда нужны подробности.  " Я делаю проверку на открытии свечи расчета буфера" из каких функций - только из OnTick?

"Однако, это может искажать фин результат, так как открытие будет не по цене открытия бара." - при каких условиях по вашему мнению будет без искажений?

Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
  • www.mql5.com
iOpen - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
dr.mr.mom Mishanin:

Тогда нужны подробности.  " Я делаю проверку на открытии свечи расчета буфера" из каких функций - только из OnTick?

Да.

dr.mr.mom Mishanin:

"Однако, это может искажать фин результат, так как открытие будет не по цене открытия бара." - при каких условиях по вашему мнению будет без искажений?

Когда нет ошибки.

 
Aleksey Vyazmikin:

Да.

Когда нет ошибки.

Максимально подробно) в OnTick() у меня

//---
   inBAR=Bars(_Symbol,_Period);//баров на графике
   if(inBAR-ainBAR[0]>0)//если хватает баров или есть новые
     {
      OnBARS();//функция одноразового расчета в новых барах
      ainBAR[0]=inBAR;//до этого расчитать в истории и новых барах
     }
//---
void OnBARS()
  {
   int i;
//---
   for(i=inBAR-ainBAR[0]-1; i>=0; i--) //цикл по истории и вновь пришедшим барам
     {
      CopyRates(_Symbol,0,i,6,asrBAR);
//вызывайте отсюда что угодно 
     }
//---
  }

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

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

Вчера после обеда появилась вот такая проблема: 

https://www.mql5.com/ru/forum/358994

не подкачивает тиковую историю В тестере
не подкачивает тиковую историю В тестере
  • 2020.12.28
  • www.mql5.com
Вот такой код работает нормально на чарте. А в Тестере - перестал несколько часов назад. Почему ? Логи при запуске на чарте. Видим , что все ок...
 
dr.mr.mom Mishanin:

Максимально подробно) в OnTick() у меня

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

Цикл тут не поможет, так как пока не придет новый  OnTick() индикатор не пересчитается.

 
Aleksey Vyazmikin:

Цикл тут не поможет, так как пока не придет новый  OnTick() индикатор не пересчитается.

Без примера кода догадаться сложно где и что Вам хочется получить. Или что полученное есть ошибка, а что верная реализация.

 
dr.mr.mom Mishanin:

Без примера кода догадаться сложно где и что Вам хочется получить. Или что полученное есть ошибка, а что верная реализация.

У меня такая проверка для индикатора, который стабильно глючит

void OnTick()
{
//При появлении нового бара проверяем корректность расчета индикаторов
   if(isNewBar_Predv_Calc_Ind()==false)return;
}

//+-------------------------------------------------------------------------------------+
//| Возвращает TRUE, если индикаторы правильно рассчитаны на новом баре текущего ТФ
//+-------------------------------------------------------------------------------------+
bool isNewBar_Predv_Calc_Ind()
{
   datetime tm[];
   static datetime prevBarTime=0;
   if(Bars(Symbol(),PERIOD_M1)<15000)return false;//Недостаточно баров на истории
   if(CopyTime(Symbol(),0,0,1,tm)<0)
   {
      Print("%s CopyTime error = %d",__FUNCTION__,GetLastError());
   }
   else
   {
      if(prevBarTime!=tm[0])
      {
         prevBarTime=tm[0];
         Predv_Calc_Ind=true;
      }
      if(Predv_Calc_Ind==true)
      {
         double  arr_Error[8];
         arr_Error[0]=ZZ_Vibor(0,2,0);
         arr_Error[1]=ZZ_Vibor(0,3,0);
         arr_Error[2]=ZZ_Vibor(1,2,0);
         arr_Error[3]=ZZ_Vibor(1,3,0);
         arr_Error[4]=ZZ_Vibor(2,2,0);
         arr_Error[5]=ZZ_Vibor(2,3,0);
         arr_Error[6]=ZZ_Vibor(3,2,0);
         arr_Error[7]=ZZ_Vibor(3,3,0);
         for(int i=0; i<8; i++)
         {
            if(arr_Error[i]<0.1)
            {
               //ArrayPrint(arr_Error);
               //Print("Error");
               return false;
            }
         }
         Predv_Calc_Ind=false;
         return true;
      }
   }
   return true;
}

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

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