iMaOnArray

 
Всем здрасте.
В общем проблема. Нужно для эксперта расчитать SMA по Close и на его основе расчитать EMA со сдвигом -3.
Пробовал iMAOnArray, но что-то не клеется: SMA расчитывается нормально, а EMA выдает лабуду даже с нулевым сдвигом. Может что посоветуете?
 
Правильно заданный вопрос - половина ответа. Советую четко формулировать, так как я не понял - проблема в написании кода, в набрасывании стандартных мувингов или проблема в формулировке вопроса?


 
Если есть попытка написания эксперта - должен быть и код, который не работает. Без кода Вам никто не поможет.
 
Rosh:
Если есть попытка написания эксперта - должен быть и код, который не работает. Без кода Вам никто не поможет.
Вот пример... На этом куске я проверял правильность отработки:

   double PID[100];  
   double MAS;
   //ArraySetAsSeries(PID,true);
//----
   for (int i=0; i<=100; i++)
    {     
     //ArrayResize(PID,ArraySize(PID)+1);
     PID[i]=iMA(NULL,0,35,0,0,0,0);
     MAS=iMAOnArray(PID,0,45,3,MODE_EMA,0);
    } 
   Comment(DoubleToStr(PID[0],4)+"n"+DoubleToStr(MAS,4));
 

1. Надо делать 2 разных цикла: первый для заполнения буфера значениями SMA, второй для расчёта EMA на SMA
2. Не забывать об индексации - прямой и обратной.
3. А что это за запись в цикле такая? PID[i]=iMA(NULL,0,35,0,0,0,0); Вы все элементы массива PID заполняете одним и тем же значением
4. То же что и 3, только относительно массива MAS

 
stringo:

1. Надо делать 2 разных цикла: первый для заполнения буфера значениями SMA, второй для расчёта EMA на SMA
2. Не забывать об индексации - прямой и обратной.

До этого аробовал так:
   double PID[100];
   double MAS;
   ArraySetAsSeries(PID,true);
//----
   for (int i=0; i<=100; i++)
    {     
     //ArrayResize(PID,ArraySize(PID)+1);
     PID[i]=iMA(NULL,0,35,0,0,0,0);
    } 
   for (int i=0; i<=100; i++)
    {  
     MAS=iMAOnArray(PID,0,45,3,MODE_EMA,0);
    } 
   Comment(DoubleToStr(PID[0],4)+"n"+DoubleToStr(MAS,4));
Результат тоже не очень...
 

Я ещё пару пунктов добавил - 3 и 4

 
PID[i]=iMA(NULL,0,35,0,0,0,i);
Надо так? Но так я тоже пробовал.
 

Ну а вот это что такое?

   for (int i=0; i<=100; i++)
    {  
     MAS=iMAOnArray(PID,0,45,3,MODE_EMA,0);
    } 
   Comment(DoubleToStr(PID[0],4)+"\n"+DoubleToStr(MAS,4));

Попробуйте хотя бы вот так

 for (i=0; i<=100; i++)
    {  
     MAS=iMAOnArray(PID,0,45,3,MODE_EMA,i);
     Print(DoubleToStr(PID[i],4),"   ",DoubleToStr(MAS,4));
    }
 
   double PID[100];
   double MAS;
   ArraySetAsSeries(PID,true);
//----
   for (int i=0; i<=100; i++)
    {     
     //ArrayResize(PID,ArraySize(PID)+1);
     PID[i]=iMA(NULL,0,35,0,0,0,i);
    } 
   for (i=0; i<=100; i++)
    {  
     MAS=iMAOnArray(PID,0,45,0,MODE_EMA,0);
    } 
   Comment(DoubleToStr(PID[0],4)+"\n"+DoubleToStr(MAS,4));
Кажись победил...
 
Да точно... Всем спасибо. Последний мой пост - это правильный код. ..
Причина обращения: