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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
jaffer wilson
2451
jaffer wilson  

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

#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);
  }
//+------------------------------------------------------------------+


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

Файлы:
Rashid Umarov
Админ
16665
Rashid Umarov  
Nobody can help you without details - what do expect to get, what did you get actually, what is wrong on your opinion
jaffer wilson
2451
jaffer wilson  
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 не обновляет и не добавляет галочки, как вы видите на картинке.

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

Evgeniy Zhdan
16150
Evgeniy Zhdan  
jaffer wilson:

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

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

Rashid Umarov
Админ
16665
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
Админ
16665
Rashid Umarov  

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?

Rashid Umarov
Админ
16665
Rashid Umarov  
Third - check result of functions and GetLastError
Сергей Таболин
2643
Сергей Таболин  
Evgeniy Zhdan:

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

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

Tro alta memestimo kondukas al la paranoia ...
jaffer wilson
2451
jaffer wilson  
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


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

jaffer wilson
2451
jaffer wilson  
Rashid Umarov :

Secondly, are you sure with those parameters?

Is their order proper?

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий