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

metatrader4-如何在MQL4 Metatrader 4中打开多个OrderSend()?

(metatrader4 - How to open multiple OrderSend() in MQL4 Metatrader 4?)

发布于 2016-09-07 17:54:13

我正在尝试同时使用ExpertAdvisor或Script在MQL4中开设多个交易。但是,当我将EA拖到图表上时,它只会打开一个订单,而不打开第二个订单(或第三个订单,等等)。

extern double lots = 0.01;
extern int takeprofit = 40;
extern int stoploss = 40;

void OnStart(){

double profitlvl_buy;
double losslvl_buy;

profitlvl_buy = Ask+takeprofit*Point;
losslvl_buy = Ask-stoploss*Point;

int ticket1;
int ticket2;

ticket1 = OrderSend("EURUSD", OP_BUY, lots, MarketInfo("EURUSD", MODE_ASK), 10, losslvl_buy, profitlvl_buy, NULL);
ticket2 = OrderSend("GBPUSD", OP_BUY, lots, MarketInfo("GBPUSD", MODE_ASK), 10, losslvl_buy, profitlvl_buy, NULL);

}

我需要做什么才能使其执行多个OrderSend()调用?

Questioner
rainerbrunotte
Viewed
0
1 2016-09-08 15:03:46

好的。在图表上部署EA /脚本时,它会使用有关图表的信息(符号,时间范围和其他信息-在编辑器中通常为粉红色)

因此,在假设EURUSD,图表上部署EA时,它会如下所示:

profitlvl_buy = Ask+takeprofit*Point;

并认为“ Ask”绝对AskEURUSD(或换句话说,Ask图表的价格_Symbol),那么你请求发送GBPUSD,具有takeprofitstoploss计算的交易EURUSD,因此我认为takeprofit是不正确的。Ask1.12,takeprofit是1000滴答,所以tp = 1.13,英镑价格为1.33,takeprofit不能(在市场定单上)低于交易条目。

为了解决:

double ask  = MarketInfo( "EURUSD", MODE_ASK );
int ticket1 = OrderSend(  "EURUSD", OP_BUY, lots, ask, 10, ask-stoploss*Point, ask+takeprofit*Point, NULL );

       ask  = MarketInfo( "GBPUSD", MODE_ASK );
int ticket2 = OrderSend(  "GBPUSD", OP_BUY, lots, ask, 10, ask-stoploss*Point, ask+takeprofit*Point, NULL );

同样,通常一种好的方法是确保票务退回int number(成功的情况下),或者-1在这种情况下打印错误代码,在这种情况下为error#130