Подскажите, пожалуйста, как сделать расчёт в советнике на основе индикатора.
Заранее благодарен.
для расчета сигнальной линии придется создавать массив значений МАКД. В коде это будет выражено сложно для вас.
Поэтому пользуйтесь индикатором.
Если вопрос в том, как испольовать индикатор не через iMacd,
а как-то по-другому- те макди из mq4 файла,
то для этого нужен iCustom.
Сейчас постараюсь уточнить вопрос.
Столкнулся с тем что индикатор MACD (штатный не модифицированный) производит расчёт и выдает другие результаты чем эти строки
Расчёт основной линии
OsnLin = iMACD(NULL,TimeFrame,FastEmaPeriod,SlowEmaPeriod,SignalPeriod,PRICE_CLOSE,MODE_MAIN,Sdvig);
Расчёт сигнальной линии
SigLin = iMACD(NULL,TimeFrame,FastEmaPeriod,SlowEmaPeriod,SignalPeriod,PRICE_CLOSE,MODE_SIGNAL,Sdvig);
Задача вписать в индикатор для расчёта алгоритм идентичный штатному индикатору MACD для расчёта сигнальной и основной линий.
Как я понимаю модифицировать вот этот блок
{
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
for(int i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
return(0);
}
Заранее благодарен.
для расчета сигнальной линии придется создавать массив значений МАКД. В коде это будет выражено сложно для вас.
Поэтому пользуйтесь индикатором.
Как сделать на основе штатного
индикатора подсчет этих линий?
Как сделать на основе штатного индикатора подсчет этих линий?
ну вы же сами видите, что сигнальная линия вычисляется на основании массива. а значит что вам тоже необходимо будет в коде эксперта подавать массив в iMAOnArray
В это отношении - использование индикатора iCustom лучше.
А нет никакого способа просто достать этот расчёт из индикатора? Там же все как Вы говорите в массиве?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть один вопрос В советнике на основе MACD (прошу не критиковать мол он плох)
Я пользуюсь для расчета основной линии и сигнальной функциями:
// Расчёт основной линии
OsnLin = iMACD(NULL,TimeFrame,FastEmaPeriod,SlowEmaPeriod,SignalPeriod,PRICE_CLOSE,MODE_MAIN,Sdvig);
// Расчёт сигнальной линии
SigLin = iMACD(NULL,TimeFrame,FastEmaPeriod,SlowEmaPeriod,SignalPeriod,PRICE_CLOSE,MODE_SIGNAL,Sdvig);
В этот же момент индикатор MACD производит расчёт по такому алгоритму
//+------------------------------------------------------------------+
//| Custom MACD.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Silver
#property indicator_color2 Red
#property indicator_width1 2
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double MacdBuffer[];
double SignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_LINE);
SetIndexDrawBegin(1,SignalSMA);
IndicatorDigits(Digits+1);
//---- indicator buffers mapping
SetIndexBuffer(0,MacdBuffer);
SetIndexBuffer(1,SignalBuffer);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
for(int i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
return(0);
}
//+------------------------------------------------------------------+
Подскажите, пожалуйста, как сделать расчёт в советнике на основе индикатора.
Заранее благодарен.