Помощь в кодировании - страница 198

 
cain82:
Спасибо за ответ!

Но как я могу получить угловые линии MA на общем графике, как в этом коде indi hystogramm?

//---- indicator settings

#property indicator_separate_window

#property indicator_buffers 3

#property indicator_color1 LimeGreen

#property indicator_color2 FireBrick

#property indicator_color3 Yellow

#property indicator_width1 2

#property indicator_width2 2

#property indicator_width3 2

//---- indicator parameters

extern int TimeFrame = 60;

extern int MAMode = 0;

extern int MAPeriod = 50;

extern int Price = 4;

extern double AngleTreshold = 0.25;

extern int StartMAShift = 2;

extern int EndMAShift = 0;

extern int MaxBars = 500;

string TF1;

//---- indicator buffers

double UpBuffer[];

double DownBuffer[];

double ZeroBuffer[];

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

//---- 2 additional buffers are used for counting.

IndicatorBuffers(3);

//---- drawing settings

SetIndexStyle(0,DRAW_HISTOGRAM);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+2 );

//---- 3 indicator buffers mapping

if(!SetIndexBuffer(0,UpBuffer) &&

!SetIndexBuffer(1,DownBuffer) &&

!SetIndexBuffer(2,ZeroBuffer))

Print("cannot set indicator buffers!");

SetIndexLabel(0,"");

SetIndexLabel(1,"");

SetIndexLabel(2,"");

switch(TimeFrame)

{

case 1: TF1="M1"; break;

case 5: TF1="M5"; break;

case 15: TF1="M15"; break;

case 30: TF1="M30"; break;

case 60: TF1="H1"; break;

case 240: TF1="H4"; break;

case 1440: TF1="D1"; break;

case 10080: TF1="W1"; break;

case 43200: TF1="MN1"; break;

default: {TimeFrame = Period(); init(); return(0);}

}

IndicatorShortName("MAAngle MTF * "+TF1+" *");

//---- initialization done

return(0);

}

//+------------------------------------------------------------------+

//| The angle for EMA |

//+------------------------------------------------------------------+

int start()

{

double fEndMA, fStartMA;

double fAngle, mFactor, dFactor;

int nLimit, i;

int nCountedBars;

double angle;

int ShiftDif;

string Sym;

if (MAMode >= 4) MAMode = 0;

if(EndMAShift >= StartMAShift)

{

Print("Error: EndMAShift >= StartMAShift");

StartMAShift = 6;

EndMAShift = 0;

}

nCountedBars = IndicatorCounted();

dFactor = 2*3.14159/180.0;

mFactor = 10000.0;

Sym = StringSubstr(Symbol(),3,3);

if (Sym == "JPY") mFactor = 100.0;

ShiftDif = StartMAShift-EndMAShift;

mFactor /= ShiftDif;

//---- check for possible errors

if(nCountedBars<0) return(-1);

//---- last counted bar will be recounted

if(nCountedBars>0) nCountedBars--;

nLimit=Bars-nCountedBars;

nLimit=MathMax(nLimit,TimeFrame/Period());

nLimit=MathMin(nLimit,MaxBars );

//---- main loop

for(i=0; i<nLimit; i++)

{

int y = iBarShift(NULL,TimeFrame,Time);

if (TimeFrame<Period()) TimeFrame=Period();

fEndMA=iMA(NULL,TimeFrame,MAPeriod,0,MAMode,Price,y+EndMAShift);

fStartMA=iMA(NULL,TimeFrame,MAPeriod,0,MAMode,Price,y+StartMAShift);

// 10000.0 : Multiply by 10000 so that the fAngle is not too small

// for the indicator Window.

fAngle = mFactor * (fEndMA - fStartMA)/2.0;

//fAngle = MathArctan(fAngle)/dFactor;

DownBuffer = 0.0;

UpBuffer = 0.0;

ZeroBuffer = 0.0;

if(fAngle > AngleTreshold)

UpBuffer = fAngle;

else if (fAngle < -AngleTreshold)

DownBuffer = fAngle;

else ZeroBuffer = fAngle;

}

return(0);

}

//+------------------------------------------------------------------+

Этот индикатор вычисляет что-то похожее на наклон (не угол, так как угол никогда не может быть вычислен точно на графике временных рядов, как и точный наклон, так как он пытается использовать другую математику, чем та, которая нужна для наклона) для каждого бара МА. Если вы хотите инвертировать его (я просто догадываюсь, что именно вы хотите), то в результате вы получите начальную МА (таким образом, вы получите скользящую среднюю на графике).

Если вы хотите расширить наклон последнего бара, то вы можете использовать что-то подобное этому индикатору https://www.mql5.com/en/forum/173235/page36, который расширяет скользящую среднюю, используя наклон последнего бара.

 
mladen:
Этот индикатор рассчитывает что-то похожее на наклон (не угол, так как угол никогда не может быть рассчитан точно на графике временных рядов, как и точный наклон, так как он пытается использовать другую математику, чем та, которая нужна для наклона) для каждого бара ма. Если вы хотите инвертировать его (я просто догадываюсь, что именно вы хотите), то в результате вы получите этот начальный ма (таким образом, вы получите скользящее среднее на графике). Если вы хотите расширить наклон последнего бара, то вы можете использовать что-то подобное этому индикатору https://www.mql5.com/en/forum/173235/page36, который расширяет скользящую среднюю, используя наклон последнего бара.

Спасибо, Младен! Это очень похоже на то, что я хочу.

У вас есть то же самое с режимом MTF?

 

младен...

мне нужна ваша помощь, чтобы модифицировать этот индикатор https://www.mql5.com/en/forum/general

 

Младен,

Рассчитать BBands, используя данные скользящей средней.

Как пример для применения к нестандартным скользящим MT4.

В качестве примера для одного из типов скользящих средних AllAverages.

Это BBands, использующий реальные данные из средней.

Не BBands SMA, с другим типом скользящей средней.

 
Antonsan:
Младен,

Рассчитать BBands, используя данные скользящей средней.

Как пример для применения к нестандартным скользящим MT4.

В качестве примера для одного из типов скользящей средней AllAverages.

Это BBands, который использует реальные данные из средней.

Не BBands SMA, а скользящая средняя другого типа.

Antonsan

Вы можете рассчитать полосы Боллинджера на любом значении, если используете функцию iStdDevOnArry().

Заполните массив значениями, которые вы хотите использовать (например, значениями любого среднего), вычислите его отклонение с помощью iStdDevOnArray() и рассчитайте среднюю линию для полос Боллинджера с помощью iMaOnArray() (используя тот же массив, который использует iStrDevOnArry()), а затем полосы будут простыми: средняя линия + отклонение*мультипликатор для верхней, и средняя линия - отклонение*мультипликатор для нижней полосы.

 

Антонсан

Вот очень простой пример кода, который вы можете использовать в качестве шаблона для построения полос Боллинджера любой величины. Все, что вам нужно сделать, это заменить вызов iRsi() в этой строке:

for(i=limit; i >= 0; i--) value = iRSI(NULL,0,RsiLength,RsiPrice,i);

с нужной функцией или вызовом iCustom() любого пользовательского индикатора, и он рассчитает полосы Боллинджера для этого значения

Файлы:
 
mladen:
person77 Добавлена еще одна опция : AllowCloseEqualOpen. так что вы можете контролировать это с помощью этой опции теперь

Отличная работа Мландена! Еще раз спасибо.

 

Хороший индикатор для советника

Здравствуйте,

Этот индикатор имеет 5 линий.(pivot+R1+R2+S1+S2).

Я хочу сделать советника, который будет основываться на этих линиях. К сожалению, у этих линий нет буфера. Мне нужно, чтобы кто-то выделил буфер для каждой линии.

Пожалуйста, помогите

С наилучшими пожеланиями;

Бамик

Файлы:
 
bamik:
Здравствуйте,

Этот индикатор имеет 5 линий.(pivot+R1+R2+S1+S2).

Я хочу сделать ea, которая основывается на этих линиях. К сожалению, у этих линий нет буфера. Мне нужно, чтобы кто-то выделил буфер для каждой линии.

Пожалуйста, помогите

С наилучшими пожеланиями;

Бамик

barnik

Проверьте эту тему: https: //www.mql5.com/en/forum/172894

В этой теме много разворотных индикаторов, использующих буферы.

 
mladen:
barnik

Вы проверили эту тему: https: //www.mql5.com/en/forum/172894

В этой теме есть много индикаторов разворота, использующих буферы.

Спасибо deer mladen за вашу помощь,

Я скачал и протестировал большинство этих индикаторов. Только индикатор " AutoPivotIndicator_ver5" оказался таким же, как и "TARGETS-LINES".

К сожалению, этот индикатор также не использует буфер и использует объект.

Не могли бы вы, пожалуйста, изменить мой простой индикатор.(выделить буфер для каждой линии).Это маленький индикатор.

Спасибо

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