Comment coder ? - page 132

 

Ajouter une position dans cet EA

Bonjour,

tout d'abord je dois m'excuser car l'anglais n'est pas ma langue maternelle.

Comment puis-je modifier cet EA pour lui dire d'ajouter une position (acheter 0.1 lots) à la clôture de la barre chaque fois que le RSI est supérieur à 67, et de vendre chaque fois que le RSI est inférieur à 33 ?

Par exemple :

heure fermeture RSI

17:31 1.3855 69.3 ---> acheter 0.1 lot

17:32 1.3858 70.5 ---> achat 0.1

17:33 1.3849 66.8 ---> aucune action

17:34 1.3856 68.4 ---> achat 0.1

Position totale +0.03

Idem pour la vente à découvert.

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

//| Ce MQL est généré par Expert Advisor Builder.

//| Expert Advisor Builder pour MetaTrader 4 | |

//| |

//| En aucun cas, l'auteur ne pourra être tenu responsable de quelque dommage que ce soit. |

//| Utilisez-le à vos risques et périls. |

//| |

//+------------------- NE PAS SUPPRIMER CET EN-TÊTE --------------------+

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder" (Constructeur de conseillers experts)

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

extern int MagicNumber = 0 ;

extern bool SignalMail = False ;

extern bool EachTickMode = False ;

extern double Lots = 0.1 ;

extern int Slippage = 3 ;

extern bool UseStopLoss = False ;

extern int StopLoss = 30 ;

extern bool UseTakeProfit = False ;

Externe int TakeProfit = 60 ;

extern bool UseTrailingStop = False ; extern int TrailingStop = 30 ;

extern int TrailingStop = 30 ;

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 Buy1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0) ;

double Buy1_2 = 67 ;

double Sell1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0) ;

double Sell1_2 = 33 ;

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

//| Fin de la variable |

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

//Vérification de 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) |

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

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

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

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

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

//| 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(UseTrailingStop && 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) Ordre = SIGNAL_BUY ;

si (Sell1_1 < Sell1_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 (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) ;

}

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

Merci beaucoup pour votre aide

Panurgo

 

Comment arrêter le trading après le profit réalisé pour la journée en cours ?

Bonjour.

J'ai un problème. Je vais coder un EA.

Lorsqu'un profit de 20 PIP du jour est pris, l'EA ne doit pas ouvrir d'ordre avant le jour suivant.

Merci de m'aider.

Merci

fxbeginner

 
fxbeginner:
Bonjour.

J'ai un problème. Je vais coder un EA.

Lorsqu'un profit de 20 PIP du jour est pris, l'EA ne devrait pas ouvrir d'ordre avant le jour suivant.

Veuillez m'aider.

Une idée serait de ne pas autoriser le trading après le premier ordre de la journée. Après la fonction ordersend(), placez un "trade = false ;".

Puis réinitialisez l'allocation de commerce chaque nouveau jour :

if(timeprev!=iTime(Symbol(),PERIOD_D1,0)) { //---- C'est un nouveau jour

timeprev = iTime(Symbol(),PERIOD_D1,0) ;

trade = true ; }

Ensuite, lorsque vous vérifiez votre signal :

if(trade) { votre condition de trading ici }

Juste un exemple ...

FerruFx

 

Ordres cachés

Comment puis-je coder un EA pour cacher tous les ordres d'achat ou de vente des yeux indiscrets des courtiers ? L'EA actuel a des ordres Stop d'achat et Stop de vente en attente.

Merci

LF

 
LazyForex:
Comment coder un EA pour cacher tous les ordres stop d'achat ou de vente des yeux indiscrets des courtiers. L'EA actuel a des ordres Stop d'achat et Stop de vente en attente.

Merci

LF

Enregistrez la valeur du buystop et du sellstop dans l'EA, une fois que le prix franchit le niveau du buystop, envoyez un ordre d'achat, et vice versa pour le sellstop.

 
Devil2000:
Enregistrez la valeur du buystop et du sellstop dans l'EA, une fois que le prix franchit le niveau du buystop, envoyez un ordre d'achat, vice versa pour le sellstop.

Merci. Je vous ai envoyé un PM

 

Demander à EA d'arrêter de travailler

Bonjour à tous,

J'ai presque terminé mon premier EA après près de 7 jours d'essais et d'erreurs, de découpage et de collage et des heures de recherche.....

Quelqu'un peut-il me dire comment donner une fonction de sortie ou d'arrêt à un EA ?

Je veux que l'EA supprime toutes les transactions en cours et en attente et qu'il sorte après avoir atteint 10 000 euros de capitaux propres. Vous trouverez ci-dessous la partie du code que j'ai utilisée jusqu'à présent :

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

for (cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

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

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

Comme vous pouvez le voir, l'EA regarde l'équité et met la valeur bool de la variable StopTrade à true. L'EA accuse ensuite réception de la commande et ne traite rien si StopTrade != true pendant un cycle, mais ensuite la valeur bool de StopTrade est réinitialisée et les transactions continuent.

Tout d'abord, y a-t-il un moyen pour moi de faire en sorte que cela fasse ce dont j'ai besoin de la manière dont je le fais ?

Deuxièmement, existe-t-il une fonction que je peux utiliser pour dire simplement à l'EA de quitter ?

Toute aide est la bienvenue.

 

Quel est le problème avec ce code ?

Quelqu'un peut-il me dire pourquoi je génère une erreur avec cette commande dans mon EA ?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);
My pending order is placed and returns the ticket number as assigned to bTicket, but then bTicket doesn't work in my OrderSelect(). I get an error 0 returned. I tried referencing by SELECT_BY_POS and assigning the returned ticket number to bTicket and it worked fine, but there's no way of knowing what the position number of all of my orders will be just be running the script. Any help is greatly appreciated.
 

Déplacer mon message n'a pas aidé.

Je ne peux pas utiliser le nombre magique parce que je fais tourner le même EA sur 8 paires différentes. Où se trouve mon message original pour que je puisse le suivre ?

 

Quel est le problème avec ce code ?

Quelqu'un peut-il me dire pourquoi je génère une erreur avec cette commande dans mon EA ?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);

Mon ordre en attente est placé et renvoie le numéro de ticket tel qu'il est assigné à bTicket, mais ensuite bTicket ne fonctionne pas dans mon OrderSelect(). Je reçois une erreur 0. J'ai essayé de me référer à SELECT_BY_POS et d'assigner le numéro du ticket retourné à bTicket et cela a bien fonctionné, mais il n'y a aucun moyen de savoir quel sera le numéro de position de tous mes ordres juste en exécutant le script. Toute aide est la bienvenue.