如何编码? - 页 300

 

防止过度交易

大家好。

我测试了我的EA,在H4图表上使用所有的ticks方法,使用MACD交叉来启动订单(除其他外),策略测试者 在最初的几分钟内打开了大约200个头寸,所以在做了一些阅读之后,我意识到我需要限制它的交易数量,在我的系统中,它不应该每4小时进行超过1次交易,因为我在使用iMACD(. PRICE_CLOSE...)之前等待蜡烛关闭。...PRICE_CLOSE...),并将MACDMainCurrent和MACDSymbolCurrent偏移为0,MACDMainPrevious和MACDSymbolPrevious为1。

我的全局变量是

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

在我的EA检查多头或空头头寸之前,我已经插入了这段代码。

//---- 确定是否已经在H4时间块上下了订单

如果((GlobalVariableGet (barsGV) == 0)|| (GlobalVariableGet ( barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false)。

GlobalVariableSet(barsGV,Bars)。

}

//--- 检查多头头寸(BUY)的可能性

如果(GlobalVariableGet (hasOrderedGV, false))

{

如果......。(这是我实际检查MACD交叉和其他指标的地方)。

然后如果订单成功打开。

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true)。

{

如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green)。

等等等等。

谁能告诉我,我的方法是否正确?我不知道是否有一个更有效或更准确的方法来做?谢谢。

 

...

你为什么不简单地计算一下你的EA已经开了多少个订单,如果它已经开了一个订单,就不要再开新的订单?

只是一个想法(也是一个通常的、最简单的限制EA所开订单数量 的方法)

crsnape@btinternet.com:
大家好。

我测试了我的EA,在H4图表上使用所有的ticks方法,使用MACD交叉来启动订单(除其他外),策略测试者在最初的几分钟内打开了大约200个位置,所以在做了一些阅读之后,我意识到我需要限制它的交易数量,在我的系统中,它不应该每4小时进行超过1次交易,因为我使用iMACD(....PRICE_CLOSE...),并将MACDMainCurrent和MACDSymbolCurrent偏移为0,MACDMainPrevious和MACDSymbolPrevious为1。

我的全局变量是

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

在我的EA检查多头或空头头寸之前,我已经插入了这段代码。

//---- 确定是否已经在H4时间块上下了订单

如果((GlobalVariableGet (barsGV) == 0)|| (GlobalVariableGet ( barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false)。

GlobalVariableSet(barsGV,Bars)。

}

//--- 检查多头头寸(BUY)的可能性

如果(GlobalVariableGet (hasOrderedGV, false))

{

如果...(这是我实际检查MACD交叉和其他指标的地方)。

然后如果订单成功打开。

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true)。

{

如果(OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green)。

等等等等。

谁能告诉我,我的方法是否正确?我不知道是否有一个更有效或更准确的方法来做这件事?谢谢。
 

只是因为我的EA通常在同一时间有几个仓位;所以我不能使用说。

如果(CountedOrders > 5)

打破。

或类似的方法,因为我不知道在任何时间点上有多少头寸会被打开。我需要把它与时间联系起来,我在想。

 

我在我的5位数MT4账户上安装了这个EA。但它没有打开任何交易....

请帮助我

附加的文件:
dipu_2.mq4  5 kb
 

我需要编辑这个EA,让它在3个步骤中移动止损。

这个EA已经有了收支平衡的能力,但是我想让这个EA把我的

盈利时,将我的止损点从第一个盈亏平衡点移到另一个+20点。

+27点,当利润达到+50点时,再将其移动到+40点,甚至更多。

甚至更多,如果可能的话。

附加的文件:
 

嗨,姆拉登。

谢谢你的提醒!我已经成功地解决了这个问题。

顺便问一下,你知道在iStochasticdo 中MODE和SHIFT的功能 是什么,或者有什么地方可以提供更多的信息?我一直在阅读mql4网站上的文档,但对我来说并没有意义。他们提供的解释太简单了。

比如说

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0)。

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0)。

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Current + 1)。

电流+0等是做什么的?

谢谢,问候

Terrance

mladen:
Terrance 那是一个函数。把它放在你的EA的末尾,并在你认为合适的地方调用它,以检查一个订单是否已经在当前的酒吧打开。
 

你好,请问谁能告诉我哪里出了问题?我得到了错误代码')',在红色突出显示的一行中参数计数错误 - 但所有的参数加起来...

如果((GlobalVariableGet (barsGV) == 0)|| (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false)。

GlobalVariableSet(barsGV,Bars)。

}

//--- 检查多头头寸(BUY)的可能性

如果(GlobalVariableGet (hasOrderedGV, false)) 谢谢

 

...

特伦斯

MODE_MAIN意味着你正在读入随机 线的值。MODE_SIGNAL意味着你正在读入随机信号线的值。

至于SHIFT:它对每个指标都是一样的(甚至是自定义的指标)。举个例子:SHIFT=0表示当前的条形值,SHIFT=1表示第一个封闭条形值,以此类推......

tkuan77:
你好,Mladen。

谢谢你的提醒!我已经设法解决了这个问题。

顺便问一下,你知道在iStochasticdo 中MODE和SHIFT的功能是什么,或者有什么地方可以提供更多的信息?我一直在阅读mql4网站上的文档,但对我来说并没有意义。他们提供的解释太简单了。

比如说

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0)。

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0)。

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Current + 1)。

电流+0等是做什么的?

谢谢,问候

特伦斯
 

...

错误在于GlobalVariableGet() 只有一个参数(变量名)。你不需要第二个参数(你在调用该函数 时的"false")。

crsnape@btinternet.com:
嗨,谁能告诉我,我在哪里出了问题?我得到了错误代码')',在红色突出显示的行上有错误的参数计数 - 但所有的参数加起来...

如果((GlobalVariableGet (barsGV) == 0)|| (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false)。

GlobalVariableSet(barsGV,Bars)。

}

//--- 检查多头头寸(BUY)的可能性

如果(GlobalVariableGet (hasOrderedGV, false))谢谢
 

我把代码改成了这样,至少没有错误--可以吗?

如果(GlobalVariableGet (hasOrderedGV) == false)