使用不同于 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);
所以我想根据多个标准使用我的 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);