Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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
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
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
LFEnregistrez 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.
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 :
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 ?
buyOrder=OrderType();
else
Print("OrderSelect returned the error of ",GetLastError());
bTicket is assigned in this prior line:
if(bTicket<=0) Print("Error = ",GetLastError());
else Print("ticket = ",bTicket);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 ?
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.