使用不同于 EA 在 MQL4 中运行的交易品种进行交易

Open trade in different symbol than the one the EA runs in MQL4

所以我想根据多个标准使用我的 EA 开立交易...TBH 并不重要...

问题是 EA 运行 合而为一 window。所以很自然地,我希望 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);

错误(EURUSD 开盘正常,因为 EA 运行s 在 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': order buy 0.01 GBPUSD opening at market sl: 1.21670 tp: 1.23670 failed [Invalid S/L or T/P]

有什么建议我怎么能fix/bypass这个?

提前致谢!

显然,您必须为另一个交易品种设置不同的开盘价、止损和止盈。因此,如果您要求当前 (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);