自己设计的一个ea,打开了两个货币对,EURUSD和GBPUSD,都挂了同一个EA。下单都按技术指标准确下单,并用了全局输入变量magic参数来区分品种。
但平仓的时候发生了错误。即:当一个品种达到平仓条件时,却将本EA下的所有单全部平掉了。
全局输入变量:其中EURUSD的magic=3333;GBPUSD的magic=4444;
下单代码
平仓代码:
最终欧美达到平仓条件,镑美未达到平仓条件。但ea自动将本ea下的所有订单都平仓了,平仓输出结果magic都是3333,但查询历史订单中,magic却是按输入时的数字而不同,即欧美magic=3333,镑美magic=4444.
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
OrderClose..........................
}
Stringcompare 个人感觉多此一举,去掉,跟换成对货币对进行一次确认就可以了OrderSymbol()==Symbol()
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
OrderClose..........................
}
Stringcompare 个人感觉多此一举,去掉,跟换成对货币对进行一次确认就可以了OrderSymbol()==Symbol()
感谢你的回复。
确实多此一举,当初加这个是因为用magic来判断品种,平仓的时候平了所有订单。所以才加了判断品种,没想到还是平了所有订单。
根據你的編法 有兩個問題你可以自行檢查看看
1/. GBPUSD下單後的Magic是不是跟設定的一樣
2/. 根據設定條件 不同品種應該要在不同的報價框才能執行 這個也要確認一下
很可能是下單後的Magic是同一個編碼造成的
根據你的編法 有兩個問題你可以自行檢查看看
1/. GBPUSD下單後的Magic是不是跟設定的一樣
2/. 根據設定條件 不同品種應該要在不同的報價框才能執行 這個也要確認一下
很可能是下單後的Magic是同一個編碼造成的
感谢你的回复。
1.GBPUSD下单的Magic和设定是一致,请看附件,附件1.png是平仓时Print的结果,OrderMagicNumber()输出是3333,但用OrderPrint()打印历史订单,magic是4444,见附件2.png,这两张图的订单号一致。
2.由于我在EURUSD和GBPUSD都挂了此EA,并且在平仓的函数里通过Magic和Symbol都加以判断,所以平仓条件就没再考虑品种和报价的问题。
终于找到原因了。问题出在Profit()函数里。该函数OrderSelect选择了最新的一个持仓订单,改变了原来选择的订单,所以全都平仓了。
感谢各位的回复!
void Profit() //计算本EA持仓利润 { double zlirun=0; for(int i =0;i < OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS)) if(OrderMagicNumber() == magic) zlirun=zlirun+OrderProfit()+OrderSwap()+OrderCommission(); } Print("本EA持仓利润计:",DoubleToStr(zlirun,2),",开始平仓."); }
自己设计的一个ea,打开了两个货币对,EURUSD和GBPUSD,都挂了同一个EA。下单都按技术指标准确下单,并用了全局输入变量magic参数来区分品种。
但平仓的时候发生了错误。即:当一个品种达到平仓条件时,却将本EA下的所有单全部平掉了。
全局输入变量:其中EURUSD的magic=3333;GBPUSD的magic=4444;
下单代码
平仓代码:
最终欧美达到平仓条件,镑美未达到平仓条件。但ea自动将本ea下的所有订单都平仓了,平仓输出结果magic都是3333,但查询历史订单中,magic却是按输入时的数字而不同,即欧美magic=3333,镑美magic=4444.