Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 798

 

Здравствуйте! Требуется ваша помощь, форумчане. Пишу индикатор. При обработке мне требуется значение времени открытия обрабатываемого бара. Казалось бы, это время должно хранится в time[], но там какая -то охинея.

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[])
  {
//---check for rates total


   if(rates_total<2)
      return(0);
//--- starting work
   int start=prev_calculated-1;
//--- correct position
   if(start<1) start=1;
//--- main cycle

CalculateVolume(start,rates_total,time);


//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CalculateVolume(const int nPosition,
                     const int nRatesCount,
                     const long &tim[],
                     )
  {
  
MqlDateTime dat1;


for(int j=nPosition;j<nRatesCount && !IsStopped();j++)
{
    TimeToStruct(tim[j],dat1);

    Print("год ",dat1.year," ",dat1.day," ",dat1.hour," ",dat1.min)


 }
} 

2017.11.20 17:48:01.590  (RTS-12.17,M1) год 2016 29 15 26     

2017.11.20 17:48:01.734  (RTS-12.17,M1) год 2016 29 15 27    

2017.11.20 17:48:01.878  (RTS-12.17,M1) год 2016 29 15 29     

2017.11.20 17:48:02.022  (RTS-12.17,M1) год 2016 29 15 33     

2017.11.20 17:48:02.165  (RTS-12.17,M1) год 2016 29 15 45   

2017.11.20 17:48:02.310  (RTS-12.17,M1) год 2016 29 21 12    

2017.11.20 17:48:02.454  (RTS-12.17,M1) год 2016 1 20 54    

2017.11.20 17:48:02.599  (RTS-12.17,M1) год 2016 2 12 52  

2017.11.20 17:48:02.743  (RTS-12.17,M1) год 2016 2 22 28     

2017.11.20 17:48:02.887  (RTS-12.17,M1) год 2016 2 23 20   

2017.11.20 17:48:03.031  (RTS-12.17,M1) год 2016 3 11 47     

2017.11.20 17:48:03.175  (RTS-12.17,M1) год 2016 3 22 34  

2017.11.20 17:48:03.320  (RTS-12.17,M1) год 2016 3 22 35     

2017.11.20 17:48:03.463  (RTS-12.17,M1) год 2016 4 21 56    

2017.11.20 17:48:03.609  (RTS-12.17,M1) год 2016 4 23 32   

такое ощущение, что в одном дне всего по несколько баров. Подскажите плз, мозги уже набекрень.

 
fxsaber:

Да, но криво.

pivomoe:
На первый взгляд CopyTick работает в тестере. Существуют ли какие то известные баги в работе CopyTicks в тестере  ? CopyTicksRange на реале работает без багов ? 

В следующем билде разработчики сделают корректное отображение TRADE-флагов в тестере.

fxsaber:

В тестере там баг со временем тиков. Надо отнимать определенную величину каждый раз. В СД в курсе проблемы.

Можно подробнее?
 
Доброго времени суток! Изучаю структуру торгового запроса (MqlTradeRequest) в разных вариантах. Взял готовый советник my_first_ea.mq5 из статьи https://www.mql5.com/ru/articles/100 и попытался в исходном коде поменять условие на открытие позиции при пересечении SAR - получилось. Затем добавил код трейлинга (изменение/модификация позиции по SAR) из справочника MQL5 по структуре MqlTradeRequest. Но устойчиво выдает ошибку [Invalid stops]. Видимо что-то с запросом не так. Короче застрял на изучении модификации позиции. Вообще не пойму, что не так делаю???
Файлы:
SAR_SAR.mq5  27 kb
 
Alexey Kozitsyn:

Можно подробнее?

void OnTick()
{
  MqlTick Ticks[];
  
  if (CopyTicksRange(_Symbol, Ticks) != -1)
  {
    ArrayPrint(Ticks);              
    
    ExpertRemove();
  }
}
 
Спасибо за помощь, столько желающих помочь!!!!!!!!!!!! Я про устал читать комментарии к моему коду..............
 
DCodec:
Спасибо за помощь, столько желающих помочь!!!!!!!!!!!! Я про устал читать комментарии к моему коду..............
Нет кода, нет комментариев. 
 

Прошу Вас подсказать, как узнать шаг цены (в спецификации "Размер тика")?

 
Aleksey Vyazmikin:

Прошу Вас подсказать, как узнать шаг цены (в спецификации "Размер тика")?

ht

 
Vladislav Andruschenko:
ht


Спасибо! А я искал и не нашел...

Тогда следующий вопрос, допустим шаг 25, то как организовать округление к числу кратному 25, может функция какая есть?

 
Aleksey Vyazmikin:

Спасибо! А я искал и не нашел...

Тогда следующий вопрос, допустим шаг 25, то как организовать округление к числу кратному 25, может функция какая есть?


Сделал функцию, вроде как работает

//+------------------------------------------------------------------+
//|Функция округления числа до кратного целого                       |
//+------------------------------------------------------------------+
double Okr(double cifra)
  {
     double TickSize=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
     double Okruglenie=NormalizeDouble(cifra/TickSize,_Digits)*TickSize;
     Print ("До кратного округления=",DoubleToString(cifra,_Digits), " После кратного округления=",DoubleToString(Okruglenie,_Digits));
     return(Okruglenie);
  }  
Причина обращения: