que vous souhaitez... Maintenant, selon mes exigences, lorsque le prix sera de 7 pip [103.603] de profit, le Stop Loss du 1er et du 2ème trade deviendra de 1 pip de profit [103.543] et le Stop Loss du 3ème trade restera à 103.386.
1er et 2ème trade deviendront disons 1 pip de profit [103.543] et le Stop Loss du 3ème trade restera à 103.386.
make extern int BreakEven = 7
(* 10 ) correction chez un courtier à 5 chiffres pour obtenir la valeur du pip.
ohh, oui, c'est certainement un défaut. Tout mon dur labeur depuis ce soir est devenu vain maintenant !
J'ai essayé de distinguer les transactions en fonction de la fonction'order comment' et j'ai écrit un code.
Quoi qu'il en soit, le code que vous avez donné va déplacer la partie Stop Loss vers BE ou au point désiré, mais mon problème avec le 'Troisième' trade n'est toujours pas résolu.
J'ai aussi cette partie du code qui déplace le BE mais je suis coincé avec le SL non-mobile pour le troisième trade.
Je viens d'avoir une autre idée et je l'essaie maintenant.
if (Order_Symbol== "EURUSD") //it has to be a string if you do it this way
{ //==EURUSD) failsint Magic_Number_3=1303int Magic_Number_2=1302int Magic_Number_1=1301
}
de cette façon, vous devez chercher 3 nombres magiques différents.
Ce n'est pas un problème. Le symbole du courtier sur lequel je teste l'EA est EURUSD,GBPUSD.....
Si j'attache l'EA au courtier dont le symbole est EURUSDpro, j'ajouterai simplement le 'pro'.
Avez-vous examiné mon code ?
La fonction de profit minimum est un "échec".
Elle ferme simplement tous les trades ouverts à chaque fois qu'elle est exécutée, sans tenir compte des pertes ou des profits des trades !
Mais mon objectif n'est pas comme ça.
Je veux que si une transaction entre dans la zone de profit et qu'ensuite le marché commence à se retourner, cette fonction "Profit minimum" garantira que
que la transaction soit fermée avec le profit minimum que je souhaite.
Et là aussi, je ne veux pas que la "troisième" transaction soit affectée par cette fonction.
J'ai essayé d'écrire quelque chose comme ça mais maintenant ça ne marche pas.
Ce n'est pas un problème. Le symbole du courtier sur lequel je teste l'EA est EURUSD,GBPUSD.....
Si j'attache l'EA au courtier dont le symbole est EURUSDpro, j'ajouterai simplement le 'pro'.
Avez-vous examiné mon code ?
La fonction de profit minimum est un "échec".
Elle ferme simplement tous les trades ouverts à chaque fois qu'elle est exécutée, sans tenir compte des pertes ou des profits des trades !
Mais mon objectif n'est pas comme ça.
Je veux que si une transaction entre dans la zone de profit et qu'ensuite le marché commence à se retourner, cette fonction "Profit minimum" garantira que
que la transaction soit fermée avec le profit minimum que je souhaite.
Et là encore, je ne veux pas que la "troisième" transaction soit affectée par cette fonction.
J'ai essayé d'écrire quelque chose comme ça, mais maintenant ça ne marche pas.
Vous le rendez beaucoup trop complexe parce que vous n'avez aucune idée de comment gérer ça.
Plus vous lisez et essayez de vous programmer vous-même, plus il devient facile de faire des choses complexes.
mais commencez par des choses simples si vous commencez à faire fonctionner un programme pour un trade puis plus tard vous essayez avec plus de trades
vous devez apprendre beaucoup de choses.
si vous commencez par choisir un programme court et simple et que vous y apportez quelques modifications pour le tester
vous pourriez apprendre comment ce programme fonctionne
Votre problème vous avez commencé
Voir comment je le ferais
//+------------------------------------------------------------------+//| MACD Sample.mq4 |//| Copyright 2005-2014, MetaQuotes Software Corp. |//| https://www.mql4.com |//+------------------------------------------------------------------+#property copyright"2005-2014, MetaQuotes Software Corp."#property link"https://www.mql4.com"inputdouble TakeProfit =50;
inputdouble Lots =0.1;
inputint MagicNumber =16384;
inputint TakeProfit1 = 15;
inputint TakeProfit2 = 25;
inputint TakeProfit3 = 0;
inputint StopLoss = 100;
inputdouble BreakEven =10;
inputdouble BreakEvenSL =5;
inputdouble TrailingStop =30;
inputdouble TrailingStep =30;
inputint SlippagePips =3;
inputdouble MACDOpenLevel =3.0;
inputdouble MACDCloseLevel=2;
inputint MATrendPeriod =26;
int count,countbuy,countsell;
//++++ These are adjusted for 5 digit brokers.int pips2points; // slippage 3 pips 3=points 30=pointsdouble pips2dbl; // Stoploss 15 pips 0.015 0.0150int Digitspips; // DoubleToStr(dbl/pips2dbl, Digitspips)int Slip;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---if(Digits % 2 == 1) // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
{pips2dbl = Point*10; pips2points = 10; Digitspips = 1;}
else {pips2dbl = Point; pips2points = 1; Digitspips = 0;}
// OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
Slip = pips2points * SlippagePips; //Slippage //---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick(void)
{
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int cnt,ticket,total;
//---// initial data checks// it is important to make sure that the expert works with a normal// chart and the user did not make any mistakes setting external // variables (Lots, StopLoss, TakeProfit, // TrailingStop) in our case, we check TakeProfit// on a chart of less than 100 bars//---if(Bars<100)
{
Print("bars less than 100");
return;
}
//---if((countbuy>0)||(countsell>0))
{
int CMD;
double SL,TP,price;
int LastError = 0;
RefreshRates();
if (countbuy>0)
{
count=countbuy;
CMD = OP_BUY;
price = Ask;
if(StopLoss>0)SL= price-StopLoss*pips2dbl;
if(count==3 && TakeProfit1>0)TP= price+TakeProfit1*pips2dbl;
if(count==2 && TakeProfit2>0)TP= price+TakeProfit2*pips2dbl;
if(count==1 && TakeProfit3>0)TP= price+TakeProfit3*pips2dbl;
}
else
{
count=countsell;
CMD = OP_SELL;
price = Bid;
if(StopLoss>0)SL= price+StopLoss*pips2dbl;
if(count==3 && TakeProfit1>0)TP= price-TakeProfit1*pips2dbl;
if(count==2 && TakeProfit2>0)TP= price-TakeProfit2*pips2dbl;
if(count==1 && TakeProfit3>0)TP= price-TakeProfit3*pips2dbl;
}
ticket=OrderSend(Symbol(), CMD, Lots, price , Slip, SL, TP,"macd sample",MagicNumber,0,Green);
if (ticket>0) //Checking if the order was opened or not
{
OrderPrint();
countbuy--;
countsell--;
}
else {
LastError = GetLastError();
if(CMD==OP_BUY)Print("Error sending buy order "+count+ ". Error code= " + LastError);
if(CMD==OP_SELL)Print("Error sending sell order "+count+ ". Error code= " + LastError);
}
if((countbuy>0)||(countsell>0))return;
}
//--- to simplify the coding and speed up access data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
//--- it is important to enter the market correctly, but it is more important to exit it correctly...
total=0;
for(cnt = OrdersTotal()-1; cnt>=0 ; cnt--)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)break;
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)continue;
if(OrderType()<=OP_SELL)// check for opened position
{
total++;
//--- long position is openedif(OrderType()==OP_BUY)
{
//--- should it be closed?if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*pips2dbl))
{
//--- close orderOrderClose(OrderTicket(),OrderLots(),Bid,Slip,Violet);
}
//--- check for breakeven if(BreakEven>0)
{
if(Bid-OrderOpenPrice()>=pips2dbl*BreakEven)
{
if(OrderStopLoss()<OrderOpenPrice())
{
//--- modify orderif(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
}
}
}
//--- check for trailing stopif(TrailingStop>0)
{
if(OrderOpenPrice()<OrderStopLoss())
{
if(OrderStopLoss()<Bid-pips2dbl*(TrailingStop+TrailingStep))
{
//--- modify orderOrderModify(OrderTicket(),OrderOpenPrice(),Bid-pips2dbl*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
else// go to short position
{
//--- should it be closed?if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*pips2dbl))
{
//--- close order and exitOrderClose(OrderTicket(),OrderLots(),Ask,Slip,Violet);
}
//--- check for breakeven if(BreakEven>0)
{
if(OrderOpenPrice()-Ask>pips2dbl*BreakEven)
{
if(OrderStopLoss()>OrderOpenPrice())
{
//--- modify orderif(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
}
}
}
//--- check for trailing stopif(TrailingStop>0)
{
if((OrderOpenPrice()>OrderStopLoss())&&(OrderStopLoss()>Point))
{
if(OrderStopLoss()>(Ask+pips2dbl*(TrailingStop+TrailingStep)))
{
//--- modify orderOrderModify(OrderTicket(),OrderOpenPrice(),Ask+pips2dbl*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
if(total<1)
{
countbuy = 0;
countsell = 0;
//--- no opened orders identifiedif(AccountFreeMargin()<(3000*Lots))//3trades*1000
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
//--- check for long position (BUY) possibilityif(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*pips2dbl) && MaCurrent>MaPrevious)
{
countbuy = 3;//we can open
}
//--- check for short position (SELL) possibilityif(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*pips2dbl) && MaCurrent<MaPrevious)
{
countsell = 3;//we can open
}
}
//---
}
//+------------------------------------------------------------------+
Ce n'est pas un problème. Le symbole du courtier sur lequel je teste l'EA est EURUSD,GBPUSD.....
Si j'attache l'EA au courtier dont le symbole est EURUSDpro, j'ajouterai simplement le 'pro'.
Avez-vous examiné mon code ?
La fonction de profit minimum est un "échec".
Elle ferme simplement tous les trades ouverts à chaque fois qu'elle est exécutée, sans tenir compte des pertes ou des profits des trades !
Mais mon objectif n'est pas comme ça.
Je veux que si une transaction entre dans la zone de profit et qu'ensuite le marché commence à se retourner, cette fonction "Profit minimum" garantira que
que la transaction soit fermée avec le profit minimum que je souhaite.
Et là encore, je ne veux pas que la "troisième" transaction soit affectée par cette fonction.
J'ai essayé d'écrire quelque chose comme ça mais maintenant ça ne fonctionne pas.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
OrderComment peut être écrasé par votre courtier.
que vous souhaitez... Maintenant, selon mes exigences, lorsque le prix sera de 7 pip [103.603] de profit, le Stop Loss du 1er et du 2ème trade deviendra de 1 pip de profit [103.543] et le Stop Loss du 3ème trade restera à 103.386.
1er et 2ème trade deviendront disons 1 pip de profit [103.543] et le Stop Loss du 3ème trade restera à 103.386.
make extern int BreakEven = 7
(* 10 ) correction chez un courtier à 5 chiffres pour obtenir la valeur du pip.
ohh, oui, c'est certainement un défaut. Tout mon dur labeur depuis ce soir est devenu vain maintenant !
J'ai essayé de distinguer les transactions en fonction de la fonction'order comment' et j'ai écrit un code.
Quoi qu'il en soit, le code que vous avez donné va déplacer la partie Stop Loss vers BE ou au point désiré, mais mon problème avec le 'Troisième' trade n'est toujours pas résolu.
J'ai aussi cette partie du code qui déplace le BE mais je suis coincé avec le SL non-mobile pour le troisième trade.
Je viens d'avoir une autre idée et je l'essaie maintenant.
Est-ce que c'était valide ?
string comment_sell="Sell Order" ;
SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red) ;
si (OrderComment()=="comment_sell") // ?
Est-ce que c'est valable ?
Disons que j'ai attaché l'EA au graphique EURUSD.
si (Order_Symbol()==EURUSD)
Est-ce que cela comparera si le graphique actuel est en EURUSD ou non ?
Voici une façon de distinguer les commandes par le biais du "numéro magique" que j'ai trouvé.
Les accolades ne sont pas équilibrées.
Est-ce possible ?
de cette façon, vous devez chercher 3 nombres magiques différents.
il me semble possible de faire
Ok, après une période de travail continu (du moins pour moi), j'ai rendu l'EA "sans erreur" !
Affichage des changements en bref:
J'ai une confusion avec la fonction Set_Magic_Number() .
L'ai-je bien défini ? De plus, en l'appelant dans d'autres fonctions, cela fonctionnera-t-il correctement?
Salutations
J'ai une confusion avec la fonction Set_Magic_Number().
L'ai-je définie correctement ? De même, si je l'appelle dans d'autres fonctions, cela fonctionnera-t-il correctement ?
Salutations
J'ai lu ici que votre symbole n'est pas "EURUSD".
vous devez utiliser le bon symbole
J'ai lu ici que votre symbole n'est pas "EURUSD".
vous devez utiliser le bon symbole
Ce n'est pas un problème. Le symbole du courtier sur lequel je teste l'EA est EURUSD,GBPUSD.....
Si j'attache l'EA au courtier dont le symbole est EURUSDpro, j'ajouterai simplement le 'pro'.
Avez-vous examiné mon code ?
La fonction de profit minimum est un "échec".
Elle ferme simplement tous les trades ouverts à chaque fois qu'elle est exécutée, sans tenir compte des pertes ou des profits des trades !
Mais mon objectif n'est pas comme ça.
Je veux que si une transaction entre dans la zone de profit et qu'ensuite le marché commence à se retourner, cette fonction "Profit minimum" garantira que
que la transaction soit fermée avec le profit minimum que je souhaite.
Et là aussi, je ne veux pas que la "troisième" transaction soit affectée par cette fonction.
J'ai essayé d'écrire quelque chose comme ça mais maintenant ça ne marche pas.
Ce n'est pas un problème. Le symbole du courtier sur lequel je teste l'EA est EURUSD,GBPUSD.....
Si j'attache l'EA au courtier dont le symbole est EURUSDpro, j'ajouterai simplement le 'pro'.
Avez-vous examiné mon code ?
La fonction de profit minimum est un "échec".
Elle ferme simplement tous les trades ouverts à chaque fois qu'elle est exécutée, sans tenir compte des pertes ou des profits des trades !
Mais mon objectif n'est pas comme ça.
Je veux que si une transaction entre dans la zone de profit et qu'ensuite le marché commence à se retourner, cette fonction "Profit minimum" garantira que
que la transaction soit fermée avec le profit minimum que je souhaite.
Et là encore, je ne veux pas que la "troisième" transaction soit affectée par cette fonction.
J'ai essayé d'écrire quelque chose comme ça, mais maintenant ça ne marche pas.
Vous le rendez beaucoup trop complexe parce que vous n'avez aucune idée de comment gérer ça.
Plus vous lisez et essayez de vous programmer vous-même, plus il devient facile de faire des choses complexes.
mais commencez par des choses simples si vous commencez à faire fonctionner un programme pour un trade puis plus tard vous essayez avec plus de trades
vous devez apprendre beaucoup de choses.
si vous commencez par choisir un programme court et simple et que vous y apportez quelques modifications pour le tester
vous pourriez apprendre comment ce programme fonctionne
Votre problème vous avez commencé
Voir comment je le ferais
pas besoin de différentes entrées pour Symbol()
3 nombres magiques différents...
Ce n'est pas un problème. Le symbole du courtier sur lequel je teste l'EA est EURUSD,GBPUSD.....
Si j'attache l'EA au courtier dont le symbole est EURUSDpro, j'ajouterai simplement le 'pro'.
Avez-vous examiné mon code ?
La fonction de profit minimum est un "échec".
Elle ferme simplement tous les trades ouverts à chaque fois qu'elle est exécutée, sans tenir compte des pertes ou des profits des trades !
Mais mon objectif n'est pas comme ça.
Je veux que si une transaction entre dans la zone de profit et qu'ensuite le marché commence à se retourner, cette fonction "Profit minimum" garantira que
que la transaction soit fermée avec le profit minimum que je souhaite.
Et là encore, je ne veux pas que la "troisième" transaction soit affectée par cette fonction.
J'ai essayé d'écrire quelque chose comme ça mais maintenant ça ne fonctionne pas.
J'ai compilé votre code 80 erreurs 6 avertissements
principalement des identifiants non déclarés
J'ai besoin de votre code avec tous les identifiants déclarés
si le fichier est trop gros, joignez-le
compilez le fichier et vérifiez les erreurs que vous obtenez