Наверно, к разработчикам

 

Натолкнулся на проблему.

Код простейшего индикатора. По логике, при восходящем "тренде" Close должно быть больше Open, при нисходящем - наоборот.

Но не получется так. Такое впечатление, что функция iMa вместо Close использует Open.

Буду рад, если я где-то ошибся.



//+------------------------------------------------------------------+
//| Test.mq4 |
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#property copyright " "
#property link ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Lime
//---- parameters
extern int MaMetod = MODE_EMA;
extern int MaPeriod = 21;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//|------------------------------------------------------------------|
int init()
{
//---- indicators
IndicatorBuffers(8);

SetIndexStyle(0,DRAW_LINE, 0, 2, Red);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE, 0, 2, Lime);
SetIndexBuffer(1, ExtMapBuffer2);
//---- indicator buffers mapping
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexBuffer(1,ExtMapBuffer2);
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
double maOpen, maClose, maLow, maHigh;
if(Bars<=10) return(0);
ExtCountedBars=IndicatorCounted();
//---- check for possible errors
if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
if (ExtCountedBars>0) ExtCountedBars--;
int pos=Bars-ExtCountedBars-1;
while(pos>=0)
{
maOpen=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_OPEN,pos);
maClose=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_CLOSE,pos);

ExtMapBuffer1[pos]=maOpen;
ExtMapBuffer2[pos]=maClose;

pos--;
}

//----
return(0);
}
//+------------------------------------------------------------------+


Файлы:
123.zip  111 kb
 
vaa20003:

Натолкнулся на проблему.

Код простейшего индикатора. По логике, при восходящем "тренде" Close должно быть больше Open, при нисходящем - наоборот.

Но не получется так. Такое впечатление, что функция iMa вместо Close использует Open.

Буду рад, если я где-то ошибся.



maOpen=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_OPEN,pos);
maClose=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_CLOSE,pos);

Попробуй использовать другие константы. PRICE_OPEN и PRICE_CLOSE

 
Vinin:
vaa20003:

Натолкнулся на проблему.

Код простейшего индикатора. По логике, при восходящем "тренде" Close должно быть больше Open, при нисходящем - наоборот.

Но не получется так. Такое впечатление, что функция iMa вместо Close использует Open.

Буду рад, если я где-то ошибся.



maOpen=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_OPEN,pos);
maClose=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_CLOSE,pos);

Попробуй использовать другие константы. PRICE_OPEN и PRICE_CLOSE

Спасибо. Заигрался :)

 
Vinin:

maOpen=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_OPEN,pos);

maClose=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_CLOSE,pos);

Попробуй использовать другие константы. PRICE_OPEN и PRICE_CLOSE

Кстати, Виктор, а почему в iMA вообще работают MODE_OPEN и MODE_CLOSE, и что при этом получается? В документации ничего не нашел, но встречал МА с этими идентификаторами в индикаторе #Heiken_Ashi_Ma 20 из Code Base.

 
granit77:
Vinin:

maOpen=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_OPEN,pos);

maClose=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_CLOSE,pos);

Попробуй использовать другие константы. PRICE_OPEN и PRICE_CLOSE

Кстати, Виктор, а почему в iMA вообще работают MODE_OPEN и MODE_CLOSE, и что при этом получается? В документации ничего не нашел, но встречал МА с этими идентификаторами в индикаторе #Heiken_Ashi_Ma 20 из Code Base.

Значения MODE_OPEN =0,MODE_CLOSE=3...

Значенния PRICE_OPEN =1, PRICE_CLOSE=0...

Таким образом, MODE_OPEN =PRICE_CLOSE, а MODE_CLOSE=PRICE_LOW... Поэтому и работает не так...

 
granit77:

Кстати, Виктор, а почему в iMA вообще работают MODE_OPEN и MODE_CLOSE, и что при этом получается? В документации ничего не нашел, но встречал МА с этими идентификаторами в индикаторе #Heiken_Ashi_Ma 20 из Code Base.

MODE_OPEN и MODE_CLOSE - такие же константы как PRICE_OPEN и PRICE_CLOSE, просто значения у них другие (наверное).

Проверяем так: Print( "MODE_OPEN = ", MODE_OPEN, ", MODE_CLOSE = ", MODE_CLOSE ); ;)


ps: опоздал )

 

И еще кто-то жалуется. что на форуме не отвечают на вопросы... Даже кофе не успел выпить.

Однако, если бы обратил внимание, что applied_price имеет тип int, мог бы сообразить сам.

Спасибо, ребята.

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