2016-09-07 2 views
1

J'essaye d'ouvrir simultanément plusieurs métiers dans MQL4 avec un ExpertAdvisor ou un Script. Cependant, lorsque je fais glisser l'EA à un graphique, il ouvre seulement un ordre, pas le second (ou troisième, fouth, etc.)Comment ouvrir plusieurs OrderSend() dans MQL4 Metatrader 4?

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); 

} 

Que dois-je faire pour faire exécuter ces multiples OrderSend() appels?

Répondre

3

Ok. Lorsque vous déployez votre EA/script sur le graphique, il utilise des informations sur tableau (symbole, calendrier et autres - ils sont roses en règle dans l'éditeur)

Ainsi, lorsque vous déployez une EA sur, supposons que EURUSD, graphique, il va à la ligne:

profitlvl_buy = Ask+takeprofit*Point; 

et pense que « Ask » est certainement Ask de EURUSD (ou en d'autres termes, le prix Ask du tableau _Symbol) alors vous demandez d'envoyer opérations sur GBPUSD, ayant takeprofit et stoploss calculé pour EURUSD, je suppose que oui takeprofit est incorrect. C'est à dire. Ask est 1.12 et takeprofit est 1000 ticks donc tp = 1.13 et le prix de GBP est 1.33, takeprofit ne peut pas être (pour les commandes à Market) ci-dessous une entrée commerciale.

Pour fixer:

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); 

aussi est généralement une bonne pratique de faire des déclarations billet que int number (en cas de succès) ou -1 et dans ce code imprime cas d'une erreur, en ce cas - erreur # 130