所以我想根据我的 EA 的多个标准进行交易......其实并不重要 TBH......
问题是 EA 在一个窗口中运行。所以很自然地,我希望 EA 可以打开评估条件并在一个图表中打开所有交易。一切都很好,除了...
经纪商不会允许在图表中运行的 EA 在不同的图表上打开交易......肯定是这样。我消除了任何其他情况。
仅用于此示例的输入:
input double LotSize = 0.01;
input int Slippage = 10;
input double StopLoss = 1000.0;
input double TakeProfit = 1000.0;
input const string SymbolA = "EURUSD";
input const string SymbolB = "GBPUSD";
我使用的命令(我让它们从另一个工作正常的 EA 复制粘贴,所以我确定它们也能工作,而且我使用极端 TP/SL 来超越经纪人可能具有的任何限制):
TicketA = OrderSend(SymbolA,OP_SELL,LotSize,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,EAComment,OrderTicket(),0,clrDarkRed);
Sleep(1000);
TicketB = OrderSend(SymbolB,OP_BUY,LotSize,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAComment,OrderTicket(),0,clrDarkBlue);
错误(当 EA 在 EURUSD 图表中运行时,EURUSD 正常开盘):
2020.12.18 01:01:45.318 '22644076':订单买入市场 0.01 GBPUSD sl:1.21670 tp:1.23670
2020.12.18 01:01:45.528 '22644076':订单买入 0.01 GBPUSD 在市场 sl 开盘:1.21670 tp:1.23670 失败 [无效的 S/L 或 T/P]
有什么建议我该如何解决/绕过这个问题?
提前致谢!
显然,你必须为另一个符号设置不同的开盘价、止损和止盈。因此,如果你要求当前 (SymbolA) 卖出:
TicketA = OrderSend(SymbolA,OP_SELL,LotSize,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,EAComment,OrderTicket(),0,clrDarkRed);
然后对于 SymbolB(不同的符号),你必须首先构建价格值:
double Ask_B = SymbolInfoDouble(SymbolB, SYMBOL_ASK);
double Point_B = SymbolInfoDouble(SymbolB, SYMBOL_POINT);
int Digits_B = SymbolInfoInteger(SymbolB, SYMBOL_DIGITS);
double SL_B = NormalizeDouble(Ask_B - StopLoss * Point_B, Digits_B);
double TP_B = NormalizeDouble(Ask_B + StopLoss * Point_B, Digits_B);
然后才调用这样的东西:
TicketB = OrderSend(SymbolB,OP_BUY,LotSize,Ask_B,Slippage,SL_B,TP_B,EAComment,OrderTicket(),0,clrDarkBlue);
权利。它从当前代码中获取 BID 和 ASK。将很快对其进行测试,并让您知道/批准它作为答案。
工作了!非常感谢。自己应该想到的。