编码帮助 - 页 61

 
mladen:
该指标使用 "蛇力"(居中TMA)进行平滑,不能改变不重新计算和保持不变。居中TMA的 "非重绘"(端点)版本是一个简单的LWMA,但不要指望用它有和居中TMA一样的结果。关于居中TMA的更多信息,你可以在这里阅读:https://www.mql5.com/en/forum/181241 至于改变或改进该代码:它的基础是一个反编译的代码。我怀疑有人会改变一个反编译的代码。

非常感谢Mladen提供的信息,这很有帮助。

 

你好。

我从网上下载了这个指标,但是当我把它连接起来的时候,出现了2个级别的独立窗口,但是没有出现条形图。

你能帮助我解决这个问题吗?

谢谢你。

震荡器.MQ4

附加的文件:
 

dasio。

这只是另一个太阳风指标(有人试图改变它的一些东西)。

dasio:
你好。

我从网上下载了这个指标,但当我把它连接到一起时,出现了有两个级别的独立窗口,但没有出现条形图。

你能帮助我解决这个问题吗?

谢谢你

oscillator.mq4
 
mladen:
dasio,这只是另一个太阳风指标(有人试图改变它的一些东西)。

谢谢你。但是当我开始回测时,条形图出现了。这怎么可能呢?

谢谢你

 

dasio

检查专家和日志选项卡,是否有一些错误被写在那里。在我的经纪商数据上,它是有效的,所以我不能告诉你的经纪商数据上发生了什么(也许是零除 法或类似的东西)。

dasio:
谢谢你。但是当我开始回测时,条形图出现了。这怎么可能呢? 谢谢
 

Mladen ,

当你写一个代码或查看一些人的代码时,你如何评估代码的质量?当你写一个代码时,你如何测试代码的健壮性?谢谢。

 

:)

我的两个主要标准是:

- 简单性(使代码简单使其更容易开发、增强和调试)。

- 整洁(谁认为代码可以随便扔在一堆上就能工作,谁就没有在一段时间后看过自己的代码。另外,调试一个不整洁的代码本身就是一个故事)

当这两点得到满足时,我才会再看一眼,然后才会 "读 "它,但这是一个很长的故事,可以做什么来获得质量--我想这个过程更多的是主观而不是客观...

nevar:
Mladen , 当你写一个代码或查看一些人的代码时,你如何评估代码的质量?当你写一个代码时,你如何测试代码的健壮性?谢谢。
 
drofwarc:
你好。

我想改编一个调用iFractals的指标,改为调用一个具有可调周期功能的自定义分形指标。我试图改编的指标见附件。它叫做 "closesrelativejtozpreviousofractal"。

closesrelativejtozpreviousofractal.mq4

该代码在价格突破前一个分形高点时绘制了一个向上的箭头,反之则是一个向下的箭头。

我试图用iCustom调用的指标也在附件中。它被称为 "分形 - 可调"。

fractal_-_adjustable.mq4

下面是我试图修改原始指标,使其调用Fractals - adjustable。该代码成功地在高位和低位分形上绘制了点,而且分形周期可以调整,正如我所希望的那样。问题出在用于绘制前期高点和低点分形水平的突破点的箭头上。我不能让它们正确地绘图。

如果能得到任何帮助,我将不胜感激。

谨此致意。

drofwarc

int start()

{

int counted_bars = IndicatorCounted();

if (counted_bars > 0) counted_bars--;

int limit = Bars - counted_bars;

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

{

UpFractalsBuffer=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 0, i); //-Draw the high fractal

if (UpFractalsBuffer!=0) //-If it is available, put in the array of fractals for higher levels

HighLevel=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 2, i);

if(Close>HighLevel)

UpArrowBuffer=(Low-(PipBuffer)*Poin); //Arrows

DownFractalsBuffer=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 1, i); //-Draw the low fractal

if(DownFractalsBuffer!=0) //- If it is available put in the array of lower levels

LowLevel=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 3, i);

if(Close<LowLevel)

DownArrowBuffer=(High+(PipBuffer)*Poin);//Arrows

}

return(0);

}

最终解决了这个问题。问题出在缓冲区的混淆上。

 

使一个指标在信号之间跳过n个柱子的代码

大家好。

我知道可以通过使用Sleep()或记录一个时间戳,并在时间戳后等待n秒再允许另一个信号,使EA在交易之间暂停。

但是否有可能对一个指标做同样的事情。

例如,我希望能够使一个在两条移动平均线 交叉时绘制箭头的指标在交叉后跳过n个小节再绘制另一个箭头。换句话说,如果在n个柱子之前发生了另一个交叉,该指标将忽略该交叉而不绘制箭头。

我已经广泛地寻找一个能做到这一点的指标,但没有任何运气。

谁能把已经有这个功能的指标贴出来,让我研究一下代码?或者给我提供一个可以实现这一建议的代码例子,以便我可以尝试实现它。

非常感谢。

drofwarc

 

它不能正常显示,谁能帮我解决这个问题?

#属性 indicator_separate_window

#属性 indicator_buffers 1

#属性 indicator_color1 Red

#属性 indicator_maximum 100

#属性 indicator_level1 70

#属性 indicator_level2 50

#属性 indicator_level3 30

#perty indicator_minimum 0

//---- 输入参数

Extern int rsiperiod = 14 ;

extern int Shortperiod = 5 ;

extern int Middleperiod = 8;

extern int Longperiod = 13;

Extern int mamode = 2 ;

//---- 缓冲区

double RSI[]。

double ShortRSI[];

double MiddleRSI[];

双倍LongRSI[]。

双倍SMRSI[]。

int period ;

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

//|自定义指标 初始化函数

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

int init()

{

//---- 指标

IndicatorBuffers(5);

SetIndexBuffer(0,SMRSI);

SetIndexBuffer(1,RSI);

SetIndexBuffer(2,ShortRSI);

SetIndexBuffer(3,MiddleRSI);

SetIndexBuffer(4,LongRSI);

//---- DataWindow和指标子窗口标签的名称

IndicatorShortName("SMRSI("+rsiperiod+", "+Shortperiod+", "+Middleperiod+", "+Longperiod+", "+mamode+")")。

SetIndexDrawBegin(0,rsiperiod+Longperiod);

period=Shortperiod+Middleperiod+Longperiod。

返回(0)。

}

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

//|自定义指标迭代函数|

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

int start()

{

int counted_bars=IndicatorCounted()。

int i,limit;

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

如果(counted_bars>0) counted_bars--。

limit = Bars-counted_bars;

for( i=limit; i>=0; i--) RSI=iRSI(NULL,0,rsiperiod,0,i)。

for( i=limit; i>=0; i--) ShortRSI=iMAOnArray(RSI,0,Shortperiod,0,mamode,i);

for( i=limit; i>=0; i--) MiddleRSI=iMAOnArray(RSI,0,Middleperiod,0,mamode,i);

for( i=limit; i>=0; i--) LongRSI=iMAOnArray(RSI,0,Longperiod,0,mamode,i);

for( i=limit; i>=0; i--) { if(period!=0) SMRSI=(Shortperiod/period)*ShortRSI+(Middleperiod/period)*MiddleRSI+(Longperiod/period)*LongRSI;}

return(0);

}

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