Код не работает, как ожидалось.

 

Я не понимаю, что не так с моим кодом. Посмотрите и дайте мне знать.

#property indicator_chart_window
#property script_show_inputs
#property indicator_buffers 1
#property indicator_plots 1
#include "Symbol.mqh" 
#include <TradeAlgorithms.mqh> CIsNewBar newbar;
int HOUR=-24 *1; 

#define Offset 3600 * HOUR
long id;
const SYMBOL SYMB(_Symbol+"51");
int OnInit()
  {

   if(SYMB.IsExist()) 
     {
      SYMB.CloneProperties();
      int rates_total=(int) SeriesInfoInteger(_Symbol,PERIOD_M1,SERIES_BARS_COUNT);
      Print(rates_total);
      MqlRates Rates[]; MqlTick Ticks[];
      int rate_total=CopyRates(_Symbol,PERIOD_M1,0,rates_total,Rates);
      int Ticks_total=CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,ulong(Rates[0].time)*1000,ulong(Rates[rate_total-1].time+60)*1000);
      for(int r=0;r<rate_total;r++)Rates[r].time+=Offset;
      for(int t=0;t<Ticks_total;t++){Ticks[t].time+=Offset;Ticks[t].time_msc=long(Ticks[t].time)*1000;}

      if(SYMB.CloneTicks(Ticks)>0 && SYMB.On() && SYMB.CloneRates(Rates)>0) 
        {
         id=ChartOpen(SYMB.Name,PERIOD_CURRENT); ChartSetInteger(id,CHART_AUTOSCROLL,1);ChartSetInteger(id,CHART_SHIFT,0,ChartGetInteger(ChartID(),CHART_SHIFT));
        }
      else{Alert(string(GetLastError()));}
     }
   return(INIT_SUCCEEDED);
  }
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[])
  {
   MqlRates Rates[]; MqlTick Ticks[];
   if(SYMB.IsExist() && newbar.IsNewBar(_Symbol,_Period))
     {
      int rate_total=CopyRates(_Symbol,PERIOD_M1,0,2,Rates);
      int Ticks_total=CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,ulong(Rates[0].time)*1000,ulong(Rates[rate_total-1].time+60)*1000);
      for(int r=0;r<rate_total;r++)Rates[r].time+=Offset;
      for(int t=0;t<Ticks_total;t++){Ticks[t].time+=Offset;Ticks[t].time_msc=long(Ticks[t].time)*1000;}
      if(CustomTicksAdd(SYMB.Name,Ticks)<1)SYMB.CloneTicks(Ticks);
      if(CustomRatesUpdate(SYMB.Name,Rates)<1)SYMB.CloneRates(Rates);
     }

   int rate_total=CopyRates(_Symbol,PERIOD_M1,0,1,Rates);
   int Ticks_total=CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,ulong(Rates[0].time)*1000,ulong(Rates[rate_total-1].time+60)*1000);
   for(int r=0;r<rate_total && !IsStopped();r++)Rates[r].time+=Offset;
   for(int t=0;t<Ticks_total && !IsStopped();t++){Ticks[t].time+=Offset;Ticks[t].time_msc=long(Ticks[t].time)*1000;}
   if(CustomTicksAdd(SYMB.Name,Ticks)<1)SYMB.CloneTicks(Ticks);
   if(CustomRatesUpdate(SYMB.Name,Rates)<1)SYMB.CloneRates(Rates);
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int r)
  {
   if(id!=0)ChartClose(id);
  }
//+------------------------------------------------------------------+


Клещи не меняются.

Файлы:
 
Nobody can help you without details - what do expect to get, what did you get actually, what is wrong on your opinion
 
Rashid Umarov : Nobody can help you without details - what do expect to get, what did you get actually, what is wrong on your opinion

Это русский форум. Вас могут забанить за то, что вы пишете на английском.

Я объясню.

Я пытаюсь создать новый пользовательский символ с EURUSD.

Только я пытаюсь получить записи день назад.

Но MT5 не обновляет и не добавляет галочки, как вы видите на картинке.

Я хочу знать, что не так с кодом.

 
jaffer wilson:

Вас могут забанить за то, что вы пишете на английском.

Ходите по лезвию бритвы

 

Firstly , style your code please, now it is impossible to read such spaghetti

It is bad practice when if and for statement is written in one line


 

Secondly, are you sure with those parameters?

int Ticks_total=CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,ulong(Rates[0].time)*1000,ulong(Rates[rate_total-1].time+60)*1000);

Is their order proper?

 
Third - check result of functions and GetLastError
 
Evgeniy Zhdan:

Ходите по лезвию бритвы

И лично мне очень стыдно, но это правда.......

Tro alta memestimo kondukas al la paranoia ...
 
Rashid Umarov :

Firstly , style your code please, now it is impossible to read such spaghetti

It is bad practice when if and for statement is written in one line


Большое спасибо за ваши добрые советы. Я попробовал встроенный стайлер, но он не работал в моем окне редактора. Тем не менее я буду помнить это.

 
Rashid Umarov :

Secondly, are you sure with those parameters?

Is their order proper?

Это должно быть в правильном порядке. Я имею в виду, я собираю ставки из функции CopyRates () MQL5. Я распечатал это, чтобы проверить последовательность. Это от более низкого datetime к более высокому datetime

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