编码帮助 - 页 100

 
dasssi:
毫升登

首先我希望你不要再对我生气了......

其次,我在加载EA时出现了错误。

dasssi

试着给EA重命名(由于名称中的法国字母,它可能会给你带来问题--没有其他问题会是这个原因,因为它是一个非常简单的EA)

 

谢谢,现在可以工作了/。

策略测试器上 看起来不是很好

 
dasssi:
谢谢,它现在可以工作了/在策略测试器上看起来不怎么样

这只是一个例子,当涉及到信号时,指标应该如何从EA中调用。它远不是一个完整的EA(看看精英和高级部分的新EA并比较代码--你会明白我的意思)。所以,这只是帮助After-rage解决他的编码问题。

 

谢谢你!!它对输入头寸的工作很好。我不知道为什么我的EA不工作,但这并不重要。所以我尝试添加代码 来关闭订单,但它也不起作用。很奇怪,因为我采用了类似于进场的结构代码,我只是将手的数量增加了一倍。你能看一下吗?

附加的文件:
 
After-rage:
谢谢你!它对输入头寸的工作很好。我不知道为什么我的EA不工作,但这并不重要。所以我尝试添加代码来关闭订单,但它也不起作用。很奇怪,因为我采用了类似于进场的结构代码,我只是将手的数量增加了一倍。你能看一下吗?

愤怒之后

你可以这样做(当信号改变时关闭已开的订单),现在的代码中就有这样的方法

附加的文件:
 

非常感谢您!这款产品非常好用。它工作得非常好。我将继续努力,看看为什么我错了。

 

有人知道是否可以通过代码来改变执行时间的指标设置吗? 例如,我想有一个CCI,其周期等于ATR,所以当ATR改变时,CCI的周期 也会改变,就像在每个新的条形图上启动指标。问题是,我不知道如何通过代码重新启动指标。我已经尝试在新条形图打开时调用init(),并且周期变化正确,但指标不会刷新...最后一个条形图的值是正确的,但我希望整个指标重新显示为新的设置。

 
AtApi:
有谁知道是否可以通过代码改变执行时间的指标设置? 例如,我想有一个CCI,其周期等于ATR,所以当ATR改变时,CCI周期也会改变。问题是,我不知道如何通过代码重新启动指标。我已经尝试在新条形图打开时调用init(),并且周期变化正确,但指标不会刷新...最后一个条形图的值是正确的,但我希望整个指标重新显示为新的设置。

如果你想重新绘制整个indi值,只需在开始时将主循环计数设置为Bars-1,然后用新的设置计算值。

 

感谢mladen的快速回答......

请看一下这个例子。

extern int IndicatorPeriod = 10;

extern int AtrPeriod= 10;

extern bool DynamicPeriod = TRUE;

int init()

{

if (DynamicPeriod)

{

double atr = NormalizeDouble(100*iATR(0,0,AtrPeriod,0),0);

IndicatorPeriod = atr;

}

}

int start()

{

datetime lastBarOpenTime;

datetime thisBarOpenTime = Time[0];

if (DynamicPeriod)

{

if(thisBarOpenTime != lastBarOpenTime)

{

lastBarOpenTime = thisBarOpenTime;

init();

}

}

int i,counted_bars=IndicatorCounted();

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

if(counted_bars>0) counted_bars--;

// is this what you are talking about?

int limit=MathMin(Bars-counted_bars,Bars-1);

for(i=limit; i>=0; i--) //MAIN LOOP

{

wherever calculation

}

}

 
AtApi:
感谢mladen的快速回答...

请看一下这个例子。

extern int IndicatorPeriod = 10;

extern int AtrPeriod= 10;

extern bool DynamicPeriod = TRUE;

int init()

{

if (DynamicPeriod)

{

double atr = NormalizeDouble(100*iATR(0,0,AtrPeriod,0),0);

IndicatorPeriod = atr;

}

}

int start()

{

datetime lastBarOpenTime;

datetime thisBarOpenTime = Time[0];

if (DynamicPeriod)

{

if(thisBarOpenTime != lastBarOpenTime)

{

lastBarOpenTime = thisBarOpenTime;

init();

}

}

int i,counted_bars=IndicatorCounted();

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

if(counted_bars>0) counted_bars--;

// is this what you are talking about?

int limit=MathMin(Bars-counted_bars,Bars-1);

for(i=limit; i>=0; i--) //MAIN LOOP

{

wherever calculation

}

}

AtApi

如果你想把数值保存到缓冲区(该条形的每个确切时间的一个数值),那么是的,这是正确的方法。但是,如果你想让所有的条形图都被 "重绘",那么就把linit设置为永远等于Bars-1