Warm tip: This article is reproduced from serverfault.com, please click

forex-以不同于 EA 在 MQL4 中运行的符号进行交易

(forex - Open trade in different symbol than the one the EA runs in MQL4)

发布于 2021-01-05 18:55:27

所以我想根据我的 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]

有什么建议我该如何解决/绕过这个问题?

提前致谢!

Questioner
Pantelis Pap.
Viewed
0
Enivid 2021-01-06 04:03:51

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