Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 664

 
Roman Sharanov:

Не понимаю как писать индикаторы, объясните в чем проблема?

нужно чтобы строилась линия показывающая разницу в цене между активами active_1 и active_2

это работает

еще нужно, чтобы по этой линии строилась средняя ma_period периода, с этим уже проблема, она не отображается

Не проверяете результат копирования.

Копируете на каждом тике всю историю.

У неродного символа (не символа текущего графика) нужно копировать количество Bars(), а не rates_total.

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

Используйте SimpleMAOnBuffer() для сглаживания данных буфера dataBuffer

 
Artyom Trishkin:

Не проверяете результат копирования.

Копируете на каждом тике всю историю.

У неродного символа (не символа текущего графика) нужно копировать количество Bars(), а не rates_total.

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

Используйте SimpleMAOnBuffer() для сглаживания данных буфера dataBuffer

как то так? вообще перестал работать

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   int bars1 = Bars(active_1, timeframe), bars2 = Bars(active_2, timeframe);
   
   if(CopyClose(active_1,timeframe,0,bars1,firstBuffer) < 0) return 0;
   if(CopyClose(active_2,timeframe,0,bars2,secondBuffer) < 0) return 0;
   if(bars1 != bars2) return 0;
   int first, bar;
   
   if(prev_calculated == 0) first = begin; else first = prev_calculated - 1;
   
   for(bar = first; bar<bars1; bar++){
      dataBuffer[bar] = firstBuffer[bar]-secondBuffer[bar];
      maBuffer[bar] = SimpleMA(bar, ma_period, dataBuffer);
   }
   SimpleMAOnBuffer(bars1, prev_calculated, begin, ma_period, dataBuffer, maBuffer);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnTimer(){
   iTime(active_1,timeframe,1);
   iTime(active_2,timeframe,1);
}
void OnDeinit(const int reason){
   EventKillTimer();
}
 

Приветствую.

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

 
Andrey Sokolov:

Приветствую.

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

в коммент

 

Хочу понаблюдать за волатильностью. Для этого в массиве tmp1 вычисляю разницу close-open и потом строю по ней SMA за интересующий период.


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[])
  {


int i;
double tmp1[];

      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total; i++)
      {
      tmp1[i]=MathMax(open[i],close[i])-MathMin(open[i],close[i]);      
      ip1Buf[i]=iMA(NULL,0,1,0,0,tmp1[i],0);
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }


При компиляции ошибок не возникает, в терминале индикатор не рисуется, в логе запись  CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Это строка где вычисляется разница MathMax MathMin, в чем может быть причина?


 
psyman:

Хочу понаблюдать за волатильностью. Для этого в массиве tmp1 вычисляю разницу close-open и потом строю по ней SMA за интересующий период.



При компиляции ошибок не возникает, в терминале индикатор не рисуется, в логе запись  CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Это строка где вычисляется разница MathMax MathMin, в чем может быть причина?


С кодом не разбирался особо, а если так:

for(i=1; i<rates_total-1; i++)
 

Не работает.


UPD

Упростил строку до самого минимума tmp1[i]=close[i];      Ошибка осталась той же самой.

 
psyman:

Хочу понаблюдать за волатильностью. Для этого в массиве tmp1 вычисляю разницу close-open и потом строю по ней SMA за интересующий период.



При компиляции ошибок не возникает, в терминале индикатор не рисуется, в логе запись  CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Это строка где вычисляется разница MathMax MathMin, в чем может быть причина?


Массив tmp[] объявлен как динамический и изначально имеет нулевую длину. Отсюда и ошибка.

Надо этот массив объявить как индикаторный буфер для вычислений.

 
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

Alexey Viktorov, 2018.10.16 12:31

Массив tmp[] объявлен как динамический и изначально имеет нулевую длину. Отсюда и ошибка.

Надо этот массив объявить как индикаторный буфер для вычислений.


Почему нельзя использовать динамический массив?

В данном случае у меня туда переписывается цена закрытия без каких-либо вычислений.

Где можно почитать как пользоваться индикаторными буферами?

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