Comment coder ? - page 237

 

Gardez à l'esprit que vous pouvez avoir besoin de stocker continuellement l'écart ainsi ... selon le type d'EA que vous écrivez. autrement inutile

 

c'est HIGH [0] -- la barre actuelle qui vient de START

pour low, je ne sais pas, peut-être low[1]

 

Bon ordre pour mettre OrderSend(),OrderModify()

Il y a un jour, j'ai lu un sujet dans le forum sur les fonctions OrderSend() et OrderModify().

et ce sujet m'a donné un indice sur la raison pour laquelle certaines EA fonctionnent et d'autres non, et je me demande comment vérifier si la fonction OrderSend() et OrderModify() est correctement écrite.

 

Bonjour à tous...

Veuillez me dire comment coder pour obtenir la liste de toutes les paires dans MT4 ?

Merci

Charles

 
sunshineh:
Bonjour,

Je sais que ce n'est pas correct d'écrire Ask[1] mais comment puis-je obtenir le prix de l'Ask à partir du dernier tick ?

Merci !

Vous devez sauvegarder les ticks en temps réel, et ensuite y accéder depuis votre EA ou indicateur. Je peux essayer de coder un exemple pour vous si vous êtes toujours intéressé.

 
DooMGuarD:
Bonjour à tous...

Veuillez me dire comment coder pour obtenir la liste de toutes les paires dans MT4 ?

Merci

Charles

Je pense que c'est plus facile à faire dans Mql5, alors attendez que les choses se mettent en place.

 

obtenir des valeurs de tendance magique dans une variable...

Bonjour !

je travaille sur un EA et je me demande comment je peux obtenir les valeurs de l'indicateur de tendance magique dans une variable. évidemment il n'y a pas de fonction native pour la tendance magique, comme iMA le fait pour les moyennes mobiles et ainsi.....

Pour l'instant, il semble que je doive le coder à partir de zéro, mais je ne trouve aucune information sur les mathématiques !

Quelqu'un pourrait-il m'aider ?

merci beaucoup !!!

 
atch3000:
hi !

je travaille sur un EA et je me demande comment je peux obtenir les valeurs de l'indicateur magic trend dans une variable. évidemment il n'y a pas de fonction native pour magic trend, comme iMA le fait pour les moyennes mobiles et ainsi.....

jusqu'à présent, il semble que je doive le coder à partir de zéro. mais je ne trouve aucune information sur les mathématiques !

Quelqu'un pourrait-il m'aider ?

merci beaucoup !!!

Cherchez des informations sur l'utilisation de la fonction ICustom dans MQL4. Avec cette fonction, vous pouvez appeler des indicateurs externes dans votre EA.

-guyver

 

Robot - Automate EA sur 2 moyennes mobiles MA rapide et lente

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

extern int MagicNumber = 0 ;

extern bool SignalMail = False ;

extern bool EachTickMode = True ;

extern double Lots = 0.2 ;

extern int Slippage = 3 ;

extern bool UseStopLoss = True ;

extern int StopLoss = 15 ;

extern bool UseTakeProfit = True ;

extern int TakeProfit = 30 ;

extern bool UseTrailingStop = True ;

extern int TrailingStop = 20 ;

int BarCount ;

int Current ;

bool TickCheck = False ;

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert

//+------------------------------------------------------------------+

int init() {

BarCount = Bars ;

if (EachTickMode) Current = 0 ; sinon Current = 1 ;

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation experte |

//+------------------------------------------------------------------+

int deinit() {

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage de l'expert |

//+------------------------------------------------------------------+

int start() {

int Ordre = SIGNAL_NONE ;

int Total, Ticket ;

double StopLossLevel, TakeProfitLevel ;

if (EachTickMode && Bars != BarCount) TickCheck = False ;

Total = OrdersTotal() ;

Ordre = SIGNAL_NONE ;

//+------------------------------------------------------------------+

//| Début de la variable |

//+------------------------------------------------------------------+

double Var1 = iMA("EURUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

double Var2 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

double Buy1_1 = iMA("EURUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

double Buy1_2 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

double Sell1_1 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

double Sell1_2 = iMA("EURUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

double CloseBuy1_1 = iMA("EURUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

double CloseBuy1_2 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

double CloseSell1_1 = iMA("EURUSD", PERIOD_M5, 7, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

double CloseSell1_2 = iMA("GBPUSD", PERIOD_M5, 14, 0, MODE_SMA, PRICE_MEDIAN, Current + 1) ;

//+------------------------------------------------------------------+

//| Fin de variable |

//+------------------------------------------------------------------+

//Vérifier la position

bool IsTrade = False ;

for (int i = 0 ; i < Total ; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True ;

if(OrderType() == OP_BUY)) {

//Fermeture

//+------------------------------------------------------------------+

//| Signal Begin(Exit Buy) |

//+------------------------------------------------------------------+

if (CloseBuy1_1 > CloseBuy1_2 && False) Order = SIGNAL_CLOSEBUY ;

//+------------------------------------------------------------------+

//| Signal End(Exit Buy) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) | (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen) ;

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy") ;

if (!EachTickMode) BarCount = Bars ;

IsTrade = False ;

continuer ;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen) ;

if (!EachTickMode) BarCount = Bars ;

continuer ;

}

}

}

} else {

//Fermeture

//+------------------------------------------------------------------+

//| Signal Begin(Exit Sell) |

//+------------------------------------------------------------------+

if (CloseSell1_1 > CloseSell1_2False) Order = SIGNAL_CLOSESELL ;

//+------------------------------------------------------------------+

//| Fin du signal (sortie de vente) |

//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) | (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange) ;

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell") ;

if (!EachTickMode) BarCount = Bars ;

IsTrade = False ;

continuer ;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange) ;

if (!EachTickMode) BarCount = Bars ;

continuer ;

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Signal Begin(Entry) |

//+------------------------------------------------------------------+

si (Buy1_1 < Buy1_2 && False) Ordre = SIGNAL_BUY ;

si (Sell1_1 < Sell1_2 && False) Ordre = SIGNAL_SELL ;

//+------------------------------------------------------------------+

//| Fin du signal |

//+------------------------------------------------------------------+

//Acheter

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Contrôle de la marge libre

if (AccountFreeMargin() < (1000 * Lots)) {

Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin()) ;

return(0) ;

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point ; sinon StopLossLevel = 0.0 ;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point ; sinon TakeProfitLevel = 0.0 ;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue) ;

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Ordre BUY ouvert : ", OrderOpenPrice()) ;

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy") ;

} else {

Print("Erreur lors de l'ouverture de l'ordre BUY : ", GetLastError()) ;

}

}

if (EachTickMode) TickCheck = True ;

if (!EachTickMode) BarCount = Bars ;

return(0) ;

}

}

//Vente

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) | (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Contrôle de la marge libre

if (AccountFreeMargin() < (1000 * Lots)) {

Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin()) ;

return(0) ;

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point ; sinon StopLossLevel = 0.0 ;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point ; sinon TakeProfitLevel = 0.0 ;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink) ;

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Ordre SELL ouvert : ", OrderOpenPrice()) ;

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell") ;

} else {

Print("Erreur lors de l'ouverture d'un ordre de vente : ", GetLastError()) ;

}

}

if (EachTickMode) TickCheck = True ;

if (!EachTickMode) BarCount = Bars ;

return(0) ;

}

}

if (!EachTickMode) BarCount = Bars ;

return(0) ;

}

//+------------------------------------------------------------------+

//où se trouve l'erreur, car je ne sais pas, aidez-moi.

 

Quelle erreur obtenez-vous ?