iCustom грузит тестер стратегий

 

Подскажите есть ли возможность облегчить подключение индикатора через iCustom чтобы тестер работал быстро, а то с моим кодом он еле шевелится?

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

    double buy_signal = iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\Form v3",DrawDay,DrawWeek,DrawMonth,DrawYear,TrendBars,UseFilter,UseAlert,SecondsToClose,SendMail,SendNotification,0,1);
    double sell_signal = iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\Form v3",DrawDay,DrawWeek,DrawMonth,DrawYear,TrendBars,UseFilter,UseAlert,SecondsToClose,SendMail,SendNotification,1,1);
    
  
//--- 
  }
 
Скорее всего, дело в самих индикаторах - они тормозные. 
 
uniface:

Подскажите есть ли возможность облегчить подключение индикатора через iCustom чтобы тестер работал быстро, а то с моим кодом он еле шевелится?

причину Вы определили, тогда не вызывайте каждый тик эти индикаторы, вот вызов раз в 10 тиков пример:

void OnTick()
  {
//---   
   static double  buy_signal;
   static double sell_signal;
   static int Count_iCustom=10;
   if(++Count_iCustom>9)
     {
      buy_signal= iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\Form v3",DrawDay,DrawWeek,DrawMonth,DrawYear,TrendBars,UseFilter,UseAlert,SecondsToClose,SendMail,SendNotification,0,1);
      sell_signal = iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\Form v3",DrawDay,DrawWeek,DrawMonth,DrawYear,TrendBars,UseFilter,UseAlert,SecondsToClose,SendMail,SendNotification,1,1);
      Count_iCustom=0;
     }

хотя обычно достаточно по открытию бара один раз вызвать индикатор

void OnStart()
  {
   double buy_signal,sell_signal
   
   if(NewBar())
     {
      buy_signal=iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\Form v3",DrawDay,DrawWeek,DrawMonth,DrawYear,TrendBars,UseFilter,UseAlert,SecondsToClose,SendMail,SendNotification,0,1);
      sell_signal=iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\Form v3",DrawDay,DrawWeek,DrawMonth,DrawYear,TrendBars,UseFilter,UseAlert,SecondsToClose,SendMail,SendNotification,1,1);
     }
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime New_Time=0;
   if(New_Time!=Time[1]){New_Time=Time[1]; return(true);}
   return(false);
  }
//+------------------------------------------------------------------+
но обычно проблема в самом индикаторе, часто бывает, что индикатор каждый тик пересчитывает всю историю заново, тогда и будет тормозить все при вызове индикатора
 
Igor Makanu:

причину Вы определили, тогда не вызывайте каждый тик эти индикаторы, вот вызов раз в 10 тиков пример:

хотя обычно достаточно по открытию бара один раз вызвать индикатор

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

Еще подскажи пожалуйста, знаю вопрос вероятно глупый, но я не такой знаток. Когда буфер индикатора пустой он выдает значение 2.14748E+09 и меняется только при появлении сигнала. Так вот как мне правильно прописать условие для отслеживания сигналов, пробовал 

buy_signal > 0.5 && buy_signal < 5

он в таком случае ни все сигналы распазнает, даже не знаю как правильно делать?

 
uniface:

Еще подскажи пожалуйста, знаю вопрос вероятно глупый, но я не такой знаток. Когда буфер индикатора пустой он выдает значение 2.14748E+09 и меняется только при появлении сигнала. Так вот как мне правильно прописать условие для отслеживания сигналов, пробовал 

он в таком случае ни все сигналы распазнает, даже не знаю как правильно делать?

это значение EMPTY_VALUE

просто сравнивайте значение буфера с ним, при условии, что не переназначали SetIndexEmptyValue https://docs.mql4.com/ru/customind/setindexemptyvalue

в общем начинайте с азов,  дело все в Вашем индикаторе скорее всего

SetIndexEmptyValue - Пользовательские индикаторы - Справочник MQL4
SetIndexEmptyValue - Пользовательские индикаторы - Справочник MQL4
  • docs.mql4.com
SetIndexEmptyValue - Пользовательские индикаторы - Справочник MQL4
 
uniface:

Еще подскажи пожалуйста, знаю вопрос вероятно глупый, но я не такой знаток. Когда буфер индикатора пустой он выдает значение 2.14748E+09 и меняется только при появлении сигнала. Так вот как мне правильно прописать условие для отслеживания сигналов, пробовал 

он в таком случае ни все сигналы распазнает, даже не знаю как правильно делать?

buy_signal > 0 && buy_signal < DBL_MAX