编码帮助 - 页 198

 
cain82:
谢谢你的回答

但是,我怎样才能在一般的图表上得到一个MA的角度线,就像在这个di 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);

}

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

该指标正在计算类似于斜率的东西(不是角度,因为角度在时间序列图上永远无法精确计算,也不是精确的斜率,因为它试图使用一些不同于斜率所需的数学方法),对于MA的每一个柱子。如果你想反转它(我只是猜测你到底想要什么),你将得到那个起始MA作为结果(所以你将在图表上得到一个移动平均线)。

如果你想延长最后一个柱状体的斜率,那么你可以使用类似于这个指标的东西https://www.mql5.com/en/forum/173235/page36,用最后一个柱状体的斜率来延长移动平均线。

 
mladen:
该指标正在计算类似于斜率的东西(不是角度,因为角度在时间序列图上永远无法精确计算,也不是精确的斜率,因为它试图使用一些不同于斜率所需的数学方法),对于ma的每一个柱子。如果你想反转它(我只是猜测你到底想要什么),你将得到那个起始ma作为结果(所以你将在图表上得到一个移动平均值)。 如果你想延长最后一个柱状体的斜率,那么你可以使用类似于这个指标的东西https://www.mql5.com/en/forum/173235/page36,用最后一个柱状体的斜率来延长移动平均线。

谢谢你Mladen!这和我想要的非常相似

你在MTF模式下也有同样的情况吗?

 

毫升登...

我需要你的帮助来修改这个指标https://www.mql5.com/en/forum/general

 

Mladen,

使用移动平均线 的数据计算BBands。

作为一个应用于非标准MT4袜的例子。

作为AllAverages的移动平均线类型之一的例子。

是使用平均值的真实数据的BBands。

没有BBands SMA,使用不同类型的移动平均线。

 
Antonsan:
Mladen,

使用移动平均线的数据计算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。所以你现在可以用这个选项来控制它。

伟大的工作mlanden! 再次感谢。

 

用于EA的好指标

你好。

这个指标有5条线(中枢+R1+R2+S1+S2)。

我想做一个基于这些线的EA。不幸的是,这些线没有缓冲区。我需要有人为每条线分配一个缓冲区。

请帮助我

最好的问候。

巴米克

附加的文件:
 
bamik:
你好。

这个指标有5条线(中枢+R1+R2+S1+S2)。

我想做一个基于这些线的EA。不幸的是,这些线没有缓冲区。我需要有人为每条线分配一个缓冲区。

请帮助我

最好的问候。

巴米克

巴尼克

你是否查看过这个主题:https://www.mql5.com/en/forum/172894

在这个主题中,有很多使用缓冲区的枢轴指标。

 
mladen:
barnik

你是否检查过这个主题:https://www.mql5.com/en/forum/172894

在那条线上有很多使用缓冲区的中枢指标

谢谢小鹿mladen的帮助。

我下载并测试了这些指标中的大部分。只有 "AutoPivotIndicator_ver5 "指标与 "TARGETS-LINES "一样。

不幸的是,这个指标也不使用缓冲区而使用对象。

你是否介意改变我的简单指标。(为每一行分配一个缓冲区),这是一个小指标。

谢谢