Demandez ! - page 11

 

Vous parlez d'avoir un script ou quelque chose pour faciliter comme un serveur pour les EAs pour être en mesure de communiquer. Je pense qu'il faudra un certain temps pour que metaquotes propose quelque chose comme ça. Cependant, en regardant sur mql4.com, ils disent que la fonction dont je parlais, GlobalVariableSetOnCondition() est atomique dans son exécution. Avec cela, je peux probablement trouver un ensemble de fonctions pour faire ce dont j'ai besoin.

 

Quelqu'un peut-il m'aider : https://www.mql5.com/en/forum/174184?

 

Aide - Division par zéro???

Bonjour à tous les codeurs...

Que dois-je faire pour résoudre cette erreur : division par zéro ?

Merci pour toute aide...

Dossiers :
ok.gif  16 kb
error.gif  16 kb
ttm_stoch.mq4  5 kb
 

jma

Bonjour codersguru,

puis-je utiliser le jma au lieu de l'ema dans le code EA ?

 
 

Besoin d'aide - MACD ajusté

J'essaie de créer un indicateur qui ajuste la ligne de signal en fonction de la valeur du RSI. En réalité, je voudrais dessiner une autre ligne de signal sur le MACD qui est ajustée et laisser la ligne de signal régulière en place.

edit :

J'ai obtenu que l'indicateur dessine la ligne RSI (première étape) dans la même fenêtre. Mais pour une raison quelconque, il ne dessine pas la dernière période. Veuillez voir la pièce jointe.

Dossiers :
 

n'importe quelle aide serait la bienvenue

voici un bout de code avec lequel j'ai un problème : //// il fonctionne quand je le charge sur northfinace une fois puis ne fait plus jamais de trade... mais il ne fait rien sur Interbank... c'est un système d'inversion utilisant kama le .0005 est des pips d'inversion... Je n'ai aucune idée de ce qui se passe, car il a fait 1 trade sur northfinance parfaitement quand je l'ai chargé pour la première fois, mais c'était un trade existant qui aurait déjà dû être fait...

 

le code

#property copyright "Expert Advisor Builder" (Conseiller expert en construction)

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0 ;

extern bool SignalMail = False ;

extern bool EachTickMode = True ;

extern double Lots = 1 ;

extern int Slippage = 3 ;

extern bool StopLossMode = True ;

extern int StopLoss = 40 ;

extern bool TakeProfitMode = False ;

extern int TakeProfit = 60 ;

extern bool TrailingStopMode = True ;

extern int TrailingStop = 35 ;

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

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 = iCustom(NULL, 0, "KAMATEST", 3, 2, 0.0005, 0, Current + 0) ;

double Var2 = iCustom(NULL, 0, "KAMA CCI", 14, 0, Current + 0) ;

double Var3 = iCustom(NULL, 0, "KAMARSI", 14, 0, Current + 0) ;

double Buy1_1 = Var1 ;

double Buy1_2 = 25 ;

double Buy2_1 = Var2 ;

double Buy2_2 = 80 ;

double Buy3_1 = Var3 ;

double Buy3_2 = 50 ;

double Sell1_1 = Var1 ;

double Sell1_2 = -25 ;

double Sell2_1 = Var2 ;

double Sell2_2 = -80 ;

double Sell3_1 = Var3 ;

double Sell3_2 = -50 ;

double CloseBuy1_1 = Var1 ;

double CloseBuy1_2 = -25 ;

double CloseBuy2_1 = Var2 ;

double CloseBuy2_2 = -80 ;

double CloseBuy3_1 = Var3 ;

double CloseBuy3_2 = -50 ;

double CloseSell1_1 = Var1 ;

double CloseSell1_2 = 25 ;

double CloseSell2_1 = Var2 ;

double CloseSell2_2 = 80 ;

double CloseSell3_1 = Var3 ;

double CloseSell3_2 = 50 ;

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

//| 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 && CloseBuy2_1 <= CloseBuy2_2 && CloseBuy3_1 <= CloseBuy3_2) 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(TrailingStopMode && 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_2 && CloseSell2_1 >= CloseSell2_2 && CloseSell3_1 >= CloseSell3_2) Order = SIGNAL_CLOSESELL ;

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

//| Signal End(Exit Sell) |

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

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(TrailingStopMode && TrailingStop > 0) {

si((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 && Buy2_1 >= Buy2_2 && Buy3_1 >= Buy3_2) Ordre = SIGNAL_BUY ;

si (Sell1_1 <= Sell1_2 && Sell2_1 = Sell3_2) 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 (StopLossMode) StopLossLevel = Ask - StopLoss * Point ; sinon StopLossLevel = 0.0 ;

if (TakeProfitMode) 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 (StopLossMode) StopLossLevel = Bid + StopLoss * Point ; sinon StopLossLevel = 0.0 ;

if (TakeProfitMode) 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) ;

}

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

 

j'ai changé la valeur de .0005 de l'indicateur dans l'expert car il ne montre que la ligne de canal, finalement les niveaux sont ce que vous devez changer 25,-25 pour .0005 ...30,,-30 pour .0006, et ainsi de suite....

 

Problème avec le seuil de rentabilité et le stop suiveur

Bonjour,

J'apprends à coder en utilisant le tutoriel MQL4 de Codersguru, et je travaille sur "My_First_EA". C'est vraiment mon premier EA. Il fonctionne très bien, mais j'essaie d'écrire un breakeven stop et je n'arrive pas à le comprendre. Le problème que j'ai est que le Breakeven Stop suit le prix tout comme un Trailing Stop. Je voudrais que le stoploss initial se déplace pour garder 1 pip de profit lorsque je fais 15 pips (par exemple), puis je veux que le stoploss reste au breakeven stop (1 pip de profit) jusqu'à ce que le trailing stop commence à fonctionner à 25 pips de profit. Ensuite, je veux que le trailing stop fonctionne comme d'habitude en déplaçant chaque pip de profit. Je pense que le problème pourrait être le "OrderStopLoss()", mais je ne sais plus rien. Mon cerveau est en bouillie. Merci

Voici le code pertinent que j'ai fait :

extern double TrailingStop=25.0 ;

extern double BreakEvenProfit=15 ;

extern double BreakEvenStop=1 ;

......................

mon code d'entrée et d'ouverture d'ordres fonctionne bien

......................

for (cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) ;

si (OrderType()<=OP_SELL&&OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY)//La position longue est ouverte

{

//doit-elle être fermée ?

if (FSAR > FMA) //mon signal de sortie

{

//----CLOSE LONG POSITION fonctionne bien

OrderClose(OrderTicket(),OrderLots(),Bid,3,Magenta) ;

return(0);//sortie

}

//////////////////// VOICI LA ZONE PROBLÉMATIQUE CI-DESSOUS/////////

//---- VÉRIFICATION DU BREAKEVEN STOP POSITION LONGUE------

si (Bid-OrderOpenPrice() > BreakEvenProfit*Point)

{

si (OrderStopLoss() < OrderOpenPrice()+ BreakEvenStop*Point)

{

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BreakEvenStop*Point,OrderTakeProfit(),0,Yellow) ;

retour(0) ;

}

}

//-----TOUT CE QUI SUIT FONCTIONNE COMME UN TRAILING STOP TYPIQUE.

//----check for trailing stop LONG POSITION

si(TrailingStop>0)

{

si (Bid-OrderOpenPrice()>Point*TrailingStop)

{

si (OrderStopLoss()<Bid-Point*TrailingStop)

{

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

retour(0) ;

}

}

}

}

else//aller à la position courte