Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2626

 

 Всем доброго дня!

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

 

если быть точнее -советник работает только эту среднюю не правильно считает

а если ставлю параметр 1200 то начинает считать правильно

 
fvdtrejder #:

если быть точнее -советник работает только эту среднюю не правильно считает

а если ставлю параметр 1200 то начинает считать правильно

1. может нехватать данных. 2. в далеко-далеко в глубине данных может попасть EMPTY_VALUE, NaN, Inf 

по причине №2 встроенные MA-шки бесполезны и вредны

 

данных хватает  свежая котировка

а как быть если нужен расчет этих средних

 
почему в скрине он считается правильно а в советнике нет?
 
fvdtrejder #:
почему в скрине он считается правильно а в советнике нет?

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

почти наверняка - просто не успевает подкачать и прочесть данные

PS/ вообще MA в 1200-1500 это от лукавого :-) столько баров может не быть в памяти терминала при старте советника, надо ждать начальной докачки. Да и неправильно это в принципе

 

спасибо за отклик

код советника большой может вы и правы

пересчитал 1500 в 15-й график и пошло как по маслу

 

обьясню откуда такие параметры средних

советник торгует на 5-ке и в алгоритме используются числа фибоначи  610  987   15987

вот с последним числом и происходит сбой в правильной работе

 
fvdtrejder #:

Тестер берёт некоторое количество, 200-300 свечей (не помню) с начала истории для затравки, в этот период нет расчётов в советнике. Дальше, после старта советника для расчёта индикатора с периодом 1500, необходимо дождаться 1500 свечей, и только затем Вы получите верные значения.

 

кому надо не забывать индикатор МА к примеру на верхнем графике стандартный применить к предыдущему индикатору 


а расчетная ф-ия правильная вот МА через индикатор в коде 

//+------------------------------------------------------------------+
//| Correct MA calculation                                           |
//+------------------------------------------------------------------+
void CalculateMA(const int rates_total)
{
   double sum = 0;
   int count = 0;
   
   //--- Forward calculation for proper MA values
   for(int i = 0; i < rates_total; i++)
   {
      sum += SpreadBuffer[i];
      count++;
      
      //--- For first MA_Period-1 bars use partial average
      if(i < MA_Period)
         MABuffer[i] = sum / count;
      else
      {
         sum -= SpreadBuffer[i-MA_Period];
         MABuffer[i] = sum / MA_Period;
      }
   }
   
   //--- Ensure MA values are properly aligned in time
   ArraySetAsSeries(MABuffer, true);
}