编码帮助 - 页 167

 

我想在下面的代码中使用 "CLOSE PRICE "而不是 "Median Price"....。请帮助。

非常感谢

int start()

{

double ClosePrice=Close[0];

int limit, i, flag, flagh, trend[5000];

double up[5000], dn[5000], medianPrice, atr;

int counted_bars = IndicatorCounted()。

//----,检查可能的错误

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

//---- 最后一个被计算的柱子将被重新计算

如果(counted_bars > 0) counted_bars--;

limit=Bars-1-counted_bars。

//打印(limit)。

//----

for (i = Bars; i >= 1; i--) {

TrendUp = EMPTY_VALUE;

TrendDown = EMPTY_VALUE;

atr = iATR(NULL, 0, Nbr_Periods, i)。

//打印("ATR: "+ATR)。

medianPrice = (High+Low)/2;

//打印("medianPrice: "+medianPrice)。

up=medianPrice+(Multiplier*atr);

//打印("涨:"+涨)。

dn=中位数价格-(乘数*atr)。

//打印("dn: "+dn)。

trend=1。

如果(Close>up) {

trend=1。

如果(trend == -1) changeOfTrend = 1;

//Print("trend: "+trend);

}

否则如果(Close<dn) {

trend=-1。

如果(trend == 1) changeOfTrend = 1;

//打印("trend: "+trend)。

}

否则如果(trend==1) {

trend=1。

changeOfTrend = 0。

}

否则,如果(trend==-1) {

trend=-1。

changeOfTrend = 0。

}

如果(trend0) {

flag=1。

//打印("flag: "+flag)。

}

否则 {

flag=0。

//打印("flagh: "+flag)。

}

如果(趋势>0 &&趋势<0) {

flagh=1。

//打印("flagh: "+flagh);

}

否则 {

flagh=0;

//打印("flagh: "+flagh);

}

如果(trend>0 && dn<dn)

dn=dn。

如果(trendup)

up=up。

如果(flag==1)

up=medianPrice+(Multiplier*atr)。

如果(flagh==1)

dn=medianPric-(Multiplier*atr)。

//-- 绘制指标

如果(trend==1) {

TrendUp=dn。

如果(changeOfTrend ==1) {

TrendUp = TrendDown;

changeOfTrend = 0;

}

}

否则,如果(趋势==-1) {

TrendDown=up。

如果(changeOfTrend == 1) {

TrendDown = TrendUp;

changeOfTrend = 0;

}

}

如果(trend==1 && trend==-1) {

UpBuffer = iLow(Symbol(),0,i)-(3*Point);

DnBuffer = EMPTY_VALUE。

}

如果(trend==-1 && trend==1) {

UpBuffer = EMPTY_VALUE。

DnBuffer = iHigh(Symbol(),0,i)+(3*Point);

}

}

WindowRedraw()。

//----

return(0);

}

 
rpasupathy:
我想在下面的代码中使用 "CLOSE PRICE "而不是中间价....。请帮助。

非常感谢

int start()

{

double ClosePrice=Close[0];

int limit, i, flag, flagh, trend[5000];

double up[5000], dn[5000], medianPrice, atr;

int counted_bars = IndicatorCounted()。

//----,检查可能的错误

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

//---- 最后一个被计算的柱子将被重新计算

如果(counted_bars > 0) counted_bars--;

limit=Bars-1-counted_bars。

//打印(limit)。

//----

for (i = Bars; i >= 1; i--) {

TrendUp = EMPTY_VALUE;

TrendDown = EMPTY_VALUE;

atr = iATR(NULL, 0, Nbr_Periods, i)。

//打印("ATR: "+ATR)。

medianPrice = (High+Low)/2;

//打印("medianPrice: "+medianPrice)。

up=medianPrice+(Multiplier*atr);

//打印("涨:"+涨)。

dn=中位数价格-(乘数*atr)。

//打印("dn: "+dn)。

trend=1。

如果(Close>up) {

trend=1。

如果(trend == -1) changeOfTrend = 1;

//Print("trend: "+trend);

}

否则如果(Close<dn) {

trend=-1。

如果(trend == 1) changeOfTrend = 1;

//打印("trend: "+trend)。

}

否则如果(trend==1) {

trend=1。

changeOfTrend = 0。

}

否则,如果(trend==-1) {

trend=-1。

changeOfTrend = 0。

}

如果(trend0) {

flag=1。

//打印("flag: "+flag)。

}

否则 {

flag=0。

//打印("flagh: "+flag)。

}

如果(趋势>0 &&趋势<0) {

flagh=1。

//打印("flagh: "+flagh)。

}

否则 {

flagh=0;

//打印("flagh: "+flagh);

}

如果(trend>0 && dn<dn)

dn=dn。

如果(trendup)

up=up。

如果(flag==1)

up=medianPrice+(Multiplier*atr)。

如果(flagh==1)

dn=medianPric-(Multiplier*atr)。

//-- 绘制指标

如果(trend==1) {

TrendUp=dn。

如果(changeOfTrend ==1) {

TrendUp = TrendDown;

changeOfTrend = 0;

}

}

否则,如果(趋势==-1) {

TrendDown=up。

如果(changeOfTrend == 1) {

TrendDown=TrendUp。

changeOfTrend = 0;

}

}

如果(trend==1 && trend==-1) {

UpBuffer = iLow(Symbol(),0,i)-(3*Point);

DnBuffer = EMPTY_VALUE。

}

如果(trend==-1 && trend==1) {

UpBuffer = EMPTY_VALUE。

DnBuffer = iHigh(Symbol(),0,i)+(3*Point);

}

}

WindowRedraw()。

//----

return(0)。

}

你可以替换:

(High+Low)/2

收盘价

 
mladen:
肯瓦

你所说的自动检查符号功能是什么?该代码中没有这样的内容

你所要做的就是在适当的参数字段中输入符号,它就会起作用(对任何符号,只要符号名称正确)使用 fareastol 提供的指标,因为它能做到你所说的所有需要。

嗨,mladen。

我在里面看到这些。

if (ForSymbol1=="") ForSymbol1 = Symbol();

if (ForSymbol2=="") ForSymbol2 = Symbol();

如果(ForSymbolSyn3a=="") ForSymbolSyn3a = Symbol();

如果(ForSymbolSyn3b=="") ForSymbolSyn3b = Symbol();

如果(ForSymbolSyn3c=="")ForSymbolSyn3c = Symbol()。

一些部分。

void checkSymbol(int limit, string ForSymbol, double& buffer[])

{

limit = MathMax(limit,MathMin(Bars-1,iCustom(ForSymbol,timeFrame,indicatorFileName, "returnBars",0,0)*timeFrame/Period() )。

for (int i=limit; i>=0; i--)

{

int y = iBarShift(ForSymbol,timeFrame,Time);

buffer = iCustom(ForSymbol,timeFrame,indicatorFileName, "calculateValue",MA_Period,MA_Method,CCI_Period,applied_price,",0,y)。

}

}

我不能确切地知道它在做什么,因为我的能力不能知道它的确切目的,但从我的原始猜测来看,似乎代码是自动检测我们外部输入的符号,然后显示在图表上,如果没有输入,将显示本地空图。然后我想,如果我故意把几个外部输入字符串留成空白(在那里什么都不填),指标会重复(至少是叠加)显示几次本地空图吗?我不知道该怎么做,但我试过了,是像附件中的方法那样做(使外部输入符号功能/识别 不敏感)?

顺便问一下,为什么我在第166页#1660之前做的版本,在现场还是会重绘? 是什么基本原因导致这种重绘?谢谢你的建议。

 
kenwa:
嗨 mladen,

我在里面看到这些。

if (ForSymbol1=="") ForSymbol1 = Symbol();

如果 (ForSymbol2=="") ForSymbol2 = Symbol();

如果(ForSymbolSyn3a=="") ForSymbolSyn3a = Symbol();

如果(ForSymbolSyn3b=="") ForSymbolSyn3b = Symbol();

如果(ForSymbolSyn3c=="")ForSymbolSyn3c = Symbol()。

一些部分。

void checkSymbol(int limit, string ForSymbol, double& buffer[])

{

limit = MathMax(limit,MathMin(Bars-1,iCustom(ForSymbol,timeFrame,indicatorFileName, "returnBars",0,0)*timeFrame/Period() )。

for (int i=limit; i>=0; i--)

{

int y = iBarShift(ForSymbol,timeFrame,Time);

buffer = iCustom(ForSymbol,timeFrame,indicatorFileName, "calculateValue",MA_Period,MA_Method,CCI_Period,applied_price,",0,y)。

}

}

我不能确切地知道它在做什么,因为我的能力不能知道它的确切目的,但从我的原始猜测来看,似乎代码是自动检测我们外部输入的符号,然后显示在图表上,如果没有输入,将显示本地空图。然后我想,如果我故意把几个外部输入字符串留成空白(在那里什么都不填),指标是否会重复(至少叠加)显示几次本地空图?我不知道该怎么做,但我尝试了一下,是不是像附件中的方法一样(使外部输入符号功能/识别不敏感)? 或者如何修改为内部预设符号?

顺便问一下,为什么我在第166页#1660之前做的版本,在现场还是会重绘? 是什么基本原因导致这种重绘?谢谢你的建议。

你可以查看这个帖子中的指标:https://www.mql5.com/en/forum/178416/page19,看看如何做一些额外的控制。

 

对于#1664,在阅读和下载之前,我不能适应这些代码,对我来说太先进和复杂。

 
kenwa:
对于#1664,在阅读和下载之前,我无法适应这些代码,对我来说太先进和复杂了。

不是所有的东西都可以用两行来写。在某些情况下,这是不可能的

 
fareastol:
嗨,Mladen

与我要求根据给定的市场情况计算目标波段的POC和VA有关,我已经尽可能地努力了。不幸的是,我只获得了POC值。获得VA高/低值超出了我目前的能力。

此外,在本周开始时,原始指标Level Sensor的代码似乎有错误,导致显示很糟糕,你可以在附图中看到。我不明白是什么原因,只是猜测这与MT4默认显示和较低时间框架(<W1)的数据之间的冲突有关。

请看一下并给我建议,以便继续前进。

深表感谢。

冯小刚

冯先生

屏幕上出现这种情况是因为图表上上周五的数据和第一个周日或周一的数据之间有一个时间差,当xshift时间被添加到线的时间中。

一个可能的解决方案是这个版本的解决方案:反转显示,而不是从右到左显示,而是从左到右显示(像图片上那样)。到目前为止,还没有找到从右到左显示的解决方案。

附加的文件:
 

有时只需要想一想(当我完成上一篇文章时,这个想法就出现了 )。

这是 "从右到左 "的解决方案(就我的测试而言,它现在工作得很好)。

附加的文件:
 

你好。

我已经 "手工 "计算了标准偏差 线。

现在我想画一个通道,就像metatrader的原始偏差通道一样。

但我不知道如何计算系数=0.618到我的正常偏差线,以便它能像原始通道一样工作 ...OBJPROP_DEVIATION,0.618)

 

嗨,姆拉登。

你提醒了我很多有意义的事情,也激励了我很多。

感谢所有

尊敬的先生

原因: