如何编码? - 页 250

 
mladen:

嗨,Mladen,谢谢你的帮助,我应用了你的修改,但它没有真正发挥作用,如果EA只是忽略任何现有的未平仓交易,即让它们保持开放,然后打开和关闭自己的新单交易,可能会更简单。

目前,它打开和关闭自己的交易,但它也关闭任何额外的现有未平仓交易。

 

增加

从部分代码来看,这是我可以建议的。如果创建了 一个布尔参数 NoCloses,如果该参数被设置 为 "真",那么如果像片段中那样应用,就不应该关闭订单(如果CBCS 不等于1,代码就不会关闭订单)。

问候

姆拉登

increase:
嗨,Mladen,谢谢你的帮助,我应用了你的修改,但它并没有真正发挥作用,如果EA只是忽略任何现有的未平仓交易,即让它们保持开放,然后打开和关闭自己的新单交易,也许会更简单。 目前,它打开和关闭自己的交易,但它也关闭任何额外的现有未平仓交易
 
mladen:
增加

从部分代码来看,这是我可以建议的。如果创建了 一个布尔参数NoCloses,并且如果该参数被设置 为 "真",那么如果像片段中那样应用,它应该不会关闭订单(如果CBCS 不等于1,那么代码将不会关闭订单)

问候

Mladen

这是真的,但除非我理解错了,否则这意味着EA所开的交易也不会关闭,所以它只是在买入和卖出之间切换?

 

是的,这是正确的。

根据我的理解,这是你的想法:让EA打开订单,然后你将手动管理订单(关闭它们)。有了这个参数,你甚至可以把它切换回假的,然后EA将恢复关闭订单 - 所以它是 "可以从外部控制的",某种程度上来说。

increase:
这是真的,但除非我理解错了,否则这意味着EA所开的交易也将永远不会关闭,所以它只是在买入和卖出之间切换?
 
mladen:
是的,这是正确的,据我所知,这是你的想法:让EA打开订单,然后你将手动管理订单(关闭它们)。有了这个参数,你甚至可以把它切换回假的,然后EA将恢复关闭订单--所以它是 "可以从外部控制的",某种程度上来说。

啊,对不起,我说得很含糊,我想让EA打开和关闭它的订单,并忽略任何现有的订单,所以,比如说

1.我有5个卖出订单

2.2.我使用该EA,它打开了1个买入订单

3.现在我有5个卖单和1个买单

4.该EA现在触发了一个卖盘,所以它关闭了它的买盘。

5.我现在有6个卖单(5个现有的,1个EA卖单)。

6.EA现在触发了一个买入,所以它关闭了它的卖出。

7.我现在有5个卖盘和1个买盘等

我将关闭现有的卖盘,EA忽略了除其自身交易外的任何其他交易,如上所述。

 

增加

如果您将Magicparameter 设置为0以外的值,它已经这样做了(这是检查是否应该在平仓指令之前关闭买入指令的部分代码)。

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&( (OrderMagicNumber()==Magic)||Magic==0))

因此,如果"Magic"不等于0,并且Magic的值是唯一的,它将只关闭自己开的订单

increase:
对不起,我说得太含糊了,我想让EA打开和关闭它的订单,并忽略任何现有的订单,因此,比如说

1.我有5个卖出订单

2.2.我使用EA,它打开了1个买入订单

3.现在我有5个卖单和1个买单

4.该EA现在触发了一个卖盘,所以它关闭了它的买盘。

5.我现在有6个卖单(5个现有的,1个EA卖单)。

6.EA现在触发了一个买入,所以它关闭了它的卖出。

7.我现在有5个卖盘和1个买盘等

我将关闭现有的卖出,EA忽略任何其他交易,除了自己的交易,如上所述。
 

特定时间段的每条交易一次

你好,亲爱的fEllA们!

我有一个在测试器上运行良好的EA(耶,谁不知道),按照指示在每个4H Bar上进行多次交易。现在,当在演示版(Alpari UK)上测试11个货币对时,EA只进行1次交易,而它应该进行更多的交易(最多3次,按照指示)。如果条件得到满足,只在每个4H柱进行交易。

我有一个带有GlobalVariable的'Semaphor'函数,以及这段代码,以防止在一个预定义的时间框架(本例中为4H)内开启多个订单。

//买入

如果(Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))))

{

如果(SignalsOnly)

{

// ------ 警报应该是每个信号只有一次,或者每15或30分钟一次。

如果(CheckAlertTime == iTime (NULL, 5, 0))返回(0)。

否则CheckAlertTime = iTime (NULL, 5, 0);

如果(Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY Signal")。

如果(PlaySounds)PlaySound(WhichSound)。

}

如果(!IsTrade && !SignalsOnly)

{

if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);

否则 CheckAlertTime = iTime (NULL, OncePerBarTF, 0);

//检查自由保证金

如果(AccountFreeMargin() < (1000 * Lots))

{

Print ("我们没有钱。Free Margin = ", AccountFreeMargin())。

return(0);

}

if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

{

如果(MoneyManagement)Lots = NormalizeDouble ((AccountFreeMargin() * Risk / 100 / ((Ask - BuySL) / Point / TickValue)), 2);

否则,Lots = Lots。

}

如果(TradeIsBusy() && IsTradingAllowed() < 0)

返回(-1)。

RefreshRates()。

Ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY " + MagicNo, MagicNo, 0, DodgerBlue);

如果(Ticket > 0)

{

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

{

Print ("7Qi BUY opened:", OrderOpenPrice())。

if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY opened");

如果 (PlaySounds) PlaySound (WhichSound);

}

否则

{

Print ("错误打开BUY: " , Err);

}

}

// TradedThisBar = Bars;

if (EachTickMode) TickCheck = True;

如果(!EachTickMode) BarCount = Bars;

TradeIsNotBusy();

返回(0)。

}

}

//-------------------------------------------------

是否可以这样的代码。

if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);

否则CheckAlertTime = iTime (NULL, OncePerBarTF, 0);

防止EA在一小时中进行交易?它是否只在条形图的开头检查?

如果我使用 "TradedThisBar = Bars "函数,我将不得不让EA只在一个时间框架上交易,对吗?

Semaphor "函数在TrailingStops中也有编码,PartialCloseLots也有。

谢谢大家的帮助。

祝您愉快。

西蒙

斯洛文尼亚

 

Iiiiiik - 我找到了问题所在

嗨!

我已经找到了问题所在--它很可能是以下的组合。

如果(TradeIsBusy() /*&& IsTradingAllowed()*/ < 0)

返回(-1)。

//-----------------------------------------------------------------------------------------

int IsTradingAllowed (int MaxWaitingSec = 30)

{

如果(!IsTradeAllowed())

{

int StartWaitingTime = GetTickCount();

Print ("交易环境很忙!等它空出来再说...")。

if (Alerts) Alert (Symbol() + " EA trading not allowed!等待...")。

while (true)

{

如果(IsStopped())

{

打印("EA被终止了!")。

return(-1);

}

如果(GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )

{

Print("超过等待限制("+MaxWaitingSec + " 秒)!");

return(-2);

}

如果(IsTradeAllowed())

{

打印("交易环境现在是自由的!")。

return(0);

}

睡眠(100)。

}

}

否则

{

打印("贸易背景是自由的!")。

return(1);

}

}

*/

//-----------------------------------------------

int TradeIsBusy (int MaxWaitingSec = 30)

{

如果(IsTesting())返回(1)。

int Err = 0, StartWaitingTime = GetTickCount();

while (true)

{

如果(IsStopped())

{

打印("EA被终止了!")。

return(-1);

}

如果(GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Print ("等待时间(" + MaxWaitingSec + " sec)超过了!")。

if (Alerts) Alert (Symbol() + " EA waiting time exceeded!") 。

返回(-2)。

}

如果(GlobalVariableCheck ("TradeIsBusy"))

断。

否则

{

Err = GetLastError();

如果(Err != 0)

{

打印("TradeIsBusy - GlobalVariableCheck - 错误#",Err)。

睡眠(100)。

继续。

}

}

如果(GlobalVariableSet ("TradeIsBusy", 1.0) > 0)返回(1)。

否则

{

Err = GetLastError();

如果(Err != 0)

{

Print ("TradeIsBusy - GlobalVariableSet - Error # ", Err);

Sleep(100);

继续。

}

}

}

while (true)

{

如果(IsStopped())

{

打印("EA被终止了!")。

return(-1);

}

如果(GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Print ("等待时间(" + MaxWaitingSec + " sec)超过了!")。

if (Alerts) Alert (Symbol() + " waiting time exceeded!")。

返回(-2)。

}

如果(GlobalVariableSetOnCondition ("TradeIsBusy", 1.0, 0.0 )) 返回(1)。

否则

{

Err = GetLastError();

如果(Err != 0)

{

Print ("TradeIsBusy - GlobalVariableSetOnCondition - Error # ", Err);

继续。

}

}

if (Alerts) Alert (Symbol() + " - waiting another EA to finish trading...")。

睡眠(1000)。

}

}

//--------------------------------

void TradeIsNotBusy()

{

int Err;

如果(IsTesting())

{

返回(0)。

}

while (true)

{

如果(IsStopped())

{

打印 (Symbol() + " EA被终止了!");

返回(-1)。

}

如果(GlobalVariableSet ("TradeIsBusy", 0.0) > 0) return(1);

否则

{

Err = GetLastError();

如果(Err != 0)

Print ("TradeIsNotBusy - GlobalVariableSet - Error # ", Err);

}

睡眠(100)。

}

}

//-----------------------------------------------------------------------------------------------

我将尝试不使用IsTradeAllowed函数

总之,谢谢你。

祝您愉快。

西蒙

 

错误代码 130

----- 删除了-----,没有必要了......

 

可下载的mq4教程

嗨,伙计们。

找不到关于mq4代码的教程或参考书(不是网上的!!)。

你能帮助我吗?

最好的问候

解决了,不得不用一个工具来解压该文件。