Перебор полученных значений в цикле - страница 3

 
forex2030:

Что может мешать результатам обновляться?


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

 
Ihor Herasko:

Все результаты обновляются.

У меня только параметры МА обновляются))
А все остальные значения после первого результата не меняются
Не понимаю уже что ещё сделать, всё перепробовал, но итога всё нет

 
forex2030:

У меня только параметры МА обновляются))

В представленном коде (первое сообщение топика) не видно, где меняются параметры МА. Они берутся такими, которые установлены по умолчанию.

А все остальные значения после первого результата не меняются

Что такое "первый результат"?

Не понимаю уже что ещё сделать, всё перепробовал, но итога всё нет

Тяжело помочь, когда задача не сформулирована четко.

P. S. Насчет тиков вопрос остается актуальным: если не используете их, то зачем цикл обрабатывает текущий бар?

 
Ihor Herasko:

Что такое "первый результат"?

Параметр меняется, а значение прибыльных уже нет

#property indicator_chart_window
#property indicator_buffers 2
//+------------------------------------------------------+
int LastTik,NewTik,MAslow,MAfast;
bool buy=true,sell=true;
double PriceBuy=0,PriceSell=0,SignalPips=0;
datetime tPriceBuy=0,tPriceSell=0;
double MAs[],MAf[];
//+------------------------------------------------------+
//| Expert initialization function                       |
//+------------------------------------------------------+
void init(){
   SetIndexBuffer(0,MAs); SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(1,MAf); SetIndexStyle(1,DRAW_NONE);
   }
//+------------------------------------------------------+
//| Expert deinitialization function                     |
//+------------------------------------------------------+
void deinit(){
   Comment("");}
//+------------------------------------------------------+
//| Custom indicator iteration function                  |
//+------------------------------------------------------+
void start(){  
//=========================|
// Перебор параметров 
//  на каждом тике
   if(LastTik!=NewTik)
      {
      MAslow-=5;
      LastTik=NewTik;
      } 
      NewTik++;
   if(NewTik>=10)NewTik=0;
   if(MAslow<=0) MAslow=100;
      MAfast = MAslow+5;
//=========================|
   int i,limit;
   int counted_bars=IndicatorCounted();
   if (counted_bars<0) return;
   if (counted_bars>0) counted_bars--;
       limit = MathMin(Bars-counted_bars,Bars-1);
   if (counted_bars==0) {limit--; limit-=10;} else limit++;

   int Profit=0;
   for(i=limit; i>=0; i--) {
//================================================================|  
      MAs[i]=iMA(Symbol(),0,MAslow,0,MODE_EMA,PRICE_OPEN,i+1);
      MAf[i]=iMA(Symbol(),0,MAfast,2,MODE_EMA,PRICE_CLOSE,i+1);
      
      if(MAs[i]>MAf[i] && buy) {PriceBuy=Open[i]; tPriceBuy=Time[i]; sell=true; buy=false;}
      if(MAs[i]<MAf[i] && sell) {PriceSell=Open[i]; tPriceSell=Time[i]; buy=true; sell=false;}

      if(PriceBuy!=0.0 && PriceSell!=0.0 && tPriceBuy!=0 && tPriceSell!=0)
        {
         double pp=MathAbs((PriceBuy-PriceSell)/Point); 
        
         if(SignalPips!=pp)
           {
            if(tPriceSell>tPriceBuy)
              {
              if(PriceSell>PriceBuy) Profit++;
              }
            SignalPips=pp;
           }//SignalPips END
        }
    }//limit END
   Comment("Параметр = "+MAslow+" / Прибыльных = "+Profit);
   Print("Параметр = "+MAslow+" / Прибыльных = "+Profit);
}//start END
 
forex2030:


Так ведь на первом тике считается вся история, а на следующем - только новые бары (чаще всего нулевой). Вы же на следующем тике зануляете значение переменной Profit. Вот оно и остается равным нулю. Если нужно оставлять значение с прошлого тика, то следует где-то сохранять его и еще побеспокоиться о том, чтобы более одного раза за новый бар не добавлять данные к предыдущим.

 
Ihor Herasko:

Так ведь на первом тике считается вся история, а на следующем - только новые бары (чаще всего нулевой). Вы же на следующем тике зануляете значение переменной Profit. Вот оно и остается равным нулю. Если нужно оставлять значение с прошлого тика, то следует где-то сохранять его и еще побеспокоиться о том, чтобы более одного раза за новый бар не добавлять данные к предыдущим.

Если вынести переменную Profit за старт, то результат будет вместо 0 постоянно первое значение 63
Я наверно уже не понимаю что к чему)) 

Причина обращения: