Issue with CopyBuffer returning an array full of 0.0. - page 2

 
hi master programers can anyone explain this please I want to learn this

please i lern how find wrong it at 3 night but i thing i need mentor


//+------------------------------------------------------------------+
//|                                             Optimum Remember.mq5 |
//|                                      Copyright 2020, Issam Kadhi |
//|                           https://www.mql5.com/en/users/thelion1 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Issam Kadhi"
#property link      "https://www.mql5.com/en/users/thelion1"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_type1 DRAW_ARROW
#property indicator_type2 DRAW_ARROW
#property indicator_color1 clrGreen
#property indicator_color2 clrRed
#property indicator_width1 3
#property indicator_width2 3
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
input ENUM_TIMEFRAMES TimeFrame=PERIOD_M5;
input string symbol1="EURUSD";
input string symbol2="GBPUSD";
input int MaxBars=5000;
input int SetNumber=5;
input int X=5;
input int deviation=1;
input bool Alerts=true;
input bool MobileNotifications=true;
input string startTime="00:00";
input string endTime="22:00";
input bool trend=false;
int counter=0;
double buy[],sell[];
ulong chart1=-1,chart2=-1;
ulong startTimes=TimeCurrent();
string tableau1[],tableau2[];
int OnInit()
  {
   SetIndexBuffer(0,buy);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   SetIndexBuffer(1,sell);
   PlotIndexSetInteger(1,PLOT_ARROW,234);
   ArraySetAsSeries(buy,true);
   ArraySetAsSeries(sell,true);
   StringSplit(startTime,':',tableau1);
   StringSplit(endTime,':',tableau2);   
//   IndicatorSetInteger(INDICATOR_DIGITS,0,_Digits);
  // IndicatorSetInteger(INDICATOR_DIGITS,1,_Digits);
//---
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason=0)
{
   for(int i=0;i<Bars(Symbol(),PERIOD_CURRENT);i++)
   {
      buy[i]=0;
      sell[i]=0;
   }
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int mode;
datetime times=-1;
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(times==iTime(Symbol(),TimeFrame,1))return rates_total;
   times=iTime(Symbol(),TimeFrame,1);
   if(Period()<(int)TimeFrame)mode=0;
   else mode=1;
   int div=MathMax(Period()/((int)TimeFrame),((int)TimeFrame)/Period());
   
   if(already()){Comment("Setups Reached!!!");return rates_total;}
   int devi=deviation;devi--;
   long limit=MathMin((mode)?
   findPeriod(((ENUM_TIMEFRAMES)Period()),rates_total,TimeFrame):(rates_total*div),MaxBars)-prev_calculated-2;
   double close11,close21,open11,open21,high11,high21,low11,low21,
   close12,close22,open12,open22,high12,high22,low12,low22;
   for(int i=0;i<=rates_total-1; i++)//int i=MathMin(MaxBars,Bars(Symbol(),TimeFrame));i>=0;i--)//      int i=0; i<=rates_total;         i-+)//
   {
      if(!canTrade(iTime(Symbol(),TimeFrame,i),iTime(Symbol(),TimeFrame,i)))continue;
      close11=iClose(symbol1,TimeFrame,i-1);
      close21=iClose(symbol2,TimeFrame,i-1);
      close12=iClose(symbol1,TimeFrame,i-2);
      close22=iClose(symbol2,TimeFrame,i-2);
      open11=iOpen(symbol1,TimeFrame,i-1);
      open21=iOpen(symbol2,TimeFrame,i-1);
      open12=iOpen(symbol1,TimeFrame,i-2);
      open22=iOpen(symbol2,TimeFrame,i-2);
      high11=iHigh(symbol1,TimeFrame,i-1);
      high21=iHigh(symbol2,TimeFrame,i-1);
      high12=iHigh(symbol1,TimeFrame,i-2);
      high22=iHigh(symbol2,TimeFrame,i-2);
      low11=iLow(symbol1,TimeFrame,i-1);
      low21=iLow(symbol2,TimeFrame,i-1);
      low12=iLow(symbol1,TimeFrame,i-2);
      low22=iLow(symbol2,TimeFrame,i-2);

      int newI=iBarShift(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TimeFrame,i-1));
      int newIA=iBarShift(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TimeFrame,i-1));
      newI-=devi;
      bool selling=false,buying=false;
      if(!mode&&close[newIA-1]<open[div-newIA])
         selling=true;
      else if(!mode&&close[newIA-1]>open[div-newIA])
         buying=true;
      else if(!mode&&close[newIA-1]<open[1-newIA])
         selling=true;
      else if(!mode&&close[newIA-1]>open[1-newIA])
         buying=true;

      double clos1=iClose(symbol1,PERIOD_CURRENT,newIA-1);
      double ope1=iOpen(symbol1,PERIOD_CURRENT,newIA-1);
      double clos2=iClose(symbol2,PERIOD_CURRENT,newIA-1);
      double ope2=iOpen(symbol2,PERIOD_CURRENT,newIA-1);
      if(close11<open11&&close12>open12&&high11==open11&&close21>open21&&close22<open22&&low21==open21)  //whatis that
      {
         if(/*Symbol()==symbol2&&*/clos2<ope2&&((trend&&buying)))//||!trend))
         {
            buy[newI]=low[newI-1];
            if(Alerts&&!i)Alert("Optimium BUY "+Symbol());
            if(MobileNotifications&&!i)SendNotification("Optimium BUY "+Symbol());
         }
         else if(/*Symbol()==symbol1&&*/clos1>ope1&&((trend&&selling)))//||!trend))
         {
            sell[newI]=high[newI-1];
            if(Alerts&&!i)Alert("Optimium SELL "+Symbol());
            if(MobileNotifications&&!i)SendNotification("Optimium SELL "+Symbol());
         }
         else Print("Wrong Symbol");
      }
      else if(close11>open11&&close12<open12&&low11==open11&&close21<open21&&close22>open22&&high21==open21)  //what is that
      {
         if(/*Symbol()==symbol2&&*/clos2>ope2&&((trend&&selling)))//||!trend))
         {
            sell[newI]=high[newI-1];
            if(Alerts&&!i)Alert("Optimium SELL "+Symbol());
            if(MobileNotifications&&!i)SendNotification("Optimium SELL "+Symbol());
         }
         else if(/*Symbol()==symbol1&&*/clos1<ope1&&((trend&&buying)))//||!trend))
         {   
            buy[newI]=low[newI-1];
            if(Alerts&&!i)Alert("Optimium BUY "+Symbol());
            if(MobileNotifications&&!i)SendNotification("Optimium BUY "+Symbol());
         }
         else Print("Wrong Symbol 2");
      }
      
   }
   return(rates_total);
  }
//+------------------------------------------------------------------+
bool already()
{
   int win=0,loss=0,neu=0;
   for(int i=1;i<Bars(Symbol(),PERIOD_CURRENT)-X-1&&(ulong)iTime(Symbol(),PERIOD_CURRENT,i)>=startTimes;i++)
   {
      if(buy[i-X-1])
      {
         if(iClose(Symbol(),PERIOD_CURRENT,i)>buy[i-X-1])win++;
         else if(iClose(Symbol(),PERIOD_CURRENT,i)<buy[i-X-1])loss++;
         else neu++;
      }
      if(sell[i-X-1])
      {
         if(iClose(Symbol(),PERIOD_CURRENT,i)<sell[i-X-1])win++;
         else if(iClose(Symbol(),PERIOD_CURRENT,i)>sell[i-X-1])loss++;
         else neu++;
      }
   }
   Comment("Wins: ",win," Losses: ",loss," rest: ",neu);
   return ((win-loss>=SetNumber)?true:false);
}
long findPeriod(ENUM_TIMEFRAMES tim, int i, ENUM_TIMEFRAMES tim2)
{
    if(tim==tim2)return i;
    int lastCurrent=((int)tim2)/((int)tim);

    long now=((long)TimeCurrent()-(long)(iTime(Symbol(),tim2,1)+(iTime(Symbol(),tim2,2)-iTime(Symbol(),tim2,3))))/((long)tim*60);

    if(i<=now)return 0;
    return (i-now)/(lastCurrent+(long)MathMin(MathMod((i-now),lastCurrent),1));
}
long bahichi(ENUM_TIMEFRAMES tim, int i, ENUM_TIMEFRAMES tim2)
{
    if(tim==tim2)return 0;
    int lastCurrent=MathMax(((int)tim2)/((int)tim),((int)tim)/((int)tim2));
    if((int)tim>(int)tim2){ENUM_TIMEFRAMES aux=tim; tim=tim2;tim2=aux;}
    long now=((long)TimeCurrent()-(long)(iTime(Symbol(),tim2,1)+(iTime(Symbol(),tim2,2)-iTime(Symbol(),tim2,3))))/((long)tim*60);

    return now;
}
bool canTrade(datetime timo1, datetime timo2)
{
   datetime tii1=timo1;
   MqlDateTime tim1,tim2;
   TimeToStruct(timo1,tim1);
   TimeToStruct(timo2,tim2);

   tim1.min=(int)StringToInteger(tableau1[1]);
   tim1.hour=(int)StringToInteger(tableau1[0]);
   tim2.min=(int)StringToInteger(tableau2[1]);
   tim2.hour=(int)StringToInteger(tableau2[0]);
   timo1=StructToTime(tim1);
   timo2=StructToTime(tim2);
   if(tii1>=timo1&&tii1<timo2)
      return true;
   return false;
}
 

Hey, I noticed the fisher wasnt updating on chart so i changed it. hope you like it.

//+------------------------------------------------------------------+
//|                                                Fisher Modern.mq5 |
//|                              Copyright © 2020, Vladimir Karputov |
//|                     https://www.mql5.com/ru/market/product/43516 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, Vladimir Karputov"
#property link      "https://www.mql5.com/ru/market/product/43516"
#property version   "1.000"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   1
//--- plot Fisher
#property indicator_label1  "Fisher"
#property indicator_type1   DRAW_COLOR_HISTOGRAM
#property indicator_color1  clrLime,clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_level1 0
//--- input parameters
input int   Inp_ma_period  = 10; // Averaging period
//--- indicator buffers
double   FisherBuffer[];
double   FisherColor[];
double   IntermediateValue[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
//--- indicator buffers mapping
   SetIndexBuffer(0,FisherBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,FisherColor,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,IntermediateValue,INDICATOR_CALCULATIONS);
//--- set the accuracy of values to be displayed in the Data Window
   IndicatorSetInteger(INDICATOR_DIGITS,Digits()+1);
//--- set as an empty value 0
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]){
        
   if(rates_total < Inp_ma_period) return 0;
   int iStart  = MathMax(0, prev_calculated-Inp_ma_period);
   
   if(prev_calculated==0){
      iStart = Inp_ma_period;
      for(int i=0; i<iStart; i++){
         FisherBuffer[i]=0.0;
         FisherColor[i]=0.0;
         IntermediateValue[i]=0.0;
        }
     }
     
   for(int i=iStart; i<rates_total; i++){
      double max_high            = high[ArrayMaximum(high,i,Inp_ma_period)];
      double min_low             = low[ArrayMinimum(low,i,Inp_ma_period)];
      double price               = (high[i]+low[i])/2.0;
      double intermediate_value  = (max_high-min_low==0.0)?0.0:0.33*2.0*((price-min_low)/(max_high-min_low)-0.5)+0.67*IntermediateValue[i-1];
      intermediate_value         = MathMin(MathMax(intermediate_value, -0.999), 0.999);
//--- 
      double calculations        = (1.0-intermediate_value==0.0)?0.0:0.5*MathLog((1.0+intermediate_value)/(1.0-intermediate_value))+0.5*FisherBuffer[i-1];
      FisherBuffer[i]            = calculations;
      
      if(FisherBuffer[i]<0.0)
         FisherColor[i]=1.0;
      else
         FisherColor[i]=0.0;
      IntermediateValue[i]=intermediate_value;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+