Comment coder ? - page 145

 

Bonjour Roger09,

Merci encore pour votre aide. Mon objectif est d'utiliser un script pour déplacer mon seuil de déclen chement à l'équilibre plus x pips dans une transaction d'achat ou à l'équilibre moins x pips dans une transaction de vente. J'ai défini une touche de raccourci pour le script afin de pouvoir verrouiller rapidement un bénéfice lorsque la transaction évolue en ma faveur. Je sais que certaines ES'a ont cette fonction mais je préfère utiliser un script pour pouvoir le faire manuellement.

 

Progrmming un stop buy et stop sell

Bonjour,

J'utilise un EA avec CCI.

Mon programme met un ordre d'achat lorsque la barre précédente est supérieure à CCI>100, mais je veux acheter 5 pips plus haut que la dernière barre.

Je veux la même chose avec l'ordre de vente stop (5 pips sous le dernier bas).

Voici mon EA, pouvez-vous m'aider

Merci

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

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

//| Expert Advisor Builder pour MetaTrader 4.

//| |

/+------------------- 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 = 1.0 ;

extern int Slippage = 30 ;

extern bool UseStopLoss = True ;

extern int StopLoss = 200 ;

extern bool UseTakeProfit = True ;

Externe int TakeProfit = 600 ;

extern bool UseTrailingStop = True ;

extern int TrailingStop = 250 ;

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 = iCCI(NULL, 0, 20, PRICE_CLOSE, Current + 0) ;

double Var2 = iCCI(NULL, 0, 20, PRICE_CLOSE, Current + 1) ;

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0) ;

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1) ;

double Buy2_1 = Var1 ;

double Buy2_2 = 100 ;

double Buy3_1 = Var2 ;

double Buy3_2 = 100 ;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0) ;

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1) ;

double Sell2_1 = Var1 ;

double Sell2_2 = - 100 ;

double Sell3_1 = Var2 ;

double Sell3_2 = - 100 ;

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

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

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

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

//| 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 && 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 (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 d'un ordre d'achat : ", 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) ;

}

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

 
tk748:
Bonjour Roger09, merci encore pour votre aide. Mon objectif est d'utiliser un script pour déplacer mon seuil de déclenchement à l'équilibre plus x pips dans une transaction d'achat ou à l'équilibre moins x pips dans une transaction de vente. J'ai défini une touche de raccourci pour le script afin de pouvoir verrouiller rapidement un bénéfice lorsque la transaction évolue en ma faveur. Je sais que certaines ES'a ont cette fonction mais je préfère utiliser un script pour pouvoir le faire manuellement.

Si vous avez besoin de définir votre stop une seule fois, utilisez ce code EA

extern int pips=10;//

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

//| fonction de démarrage du programme de script |

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

int start()

{

//----

int ot = OrdersTotal() ;

for (int i=0 ; i<ot ; i++)

{

int o = OrderSelect(i, SELECT_BY_POS) ;

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

{

double sl = 0 ;

si (OrderType() == OP_BUY&& OrderStopLoss() =pips*Point)

sl = OrderOpenPrice() +pips*Point ;

si (OrderType() == OP_SELL && (OrderStopLoss() > OrderOpenPrice()||OrderStopLoss()==0)

&&OrderOpenPrice()-Ask>=pips*Point)

sl = OrderOpenPrice() -pips*Point ;

if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0))

Print("Error_Modifying - ",GetLastError()) ;

}

}

//----

return(0) ;

}

 
cgassfr67:
Bonjour,

J'utilise un EA avec CCI.

Mon programme met un ordre d'achat lorsque la barre précédente est supérieure à CCI>100, mais je veux acheter 5 pips plus haut que la dernière barre.

Je veux la même chose avec l'ordre de vente stop (5 pips sous le dernier bas).

Voici mon EA, pouvez-vous m'aider

Merci

Remplacer

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 100;

double Buy3_1 = Var2 ;

double Buy3_2 = 100;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 100;

double Sell3_1 = Var2 ;

double Sell3_2 = - 100;[/CODE]

To

[CODE]

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 105;

double Buy3_1 = Var2 ;

double Buy3_2 = 105;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 105;

double Sell3_1 = Var2 ;

double Sell3_2 = - 105;
 
Roger09:
Remplacer
double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 100;

double Buy3_1 = Var2 ;

double Buy3_2 = 100;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 100;

double Sell3_1 = Var2 ;

double Sell3_2 = - 100;[/CODE]

To

[CODE]

double Buy1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Buy1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Buy2_1 = Var1 ;

double Buy2_2 = 105;

double Buy3_1 = Var2 ;

double Buy3_2 = 105;

double Sell1_1 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 0);

double Sell1_2 = iMA(NULL, 0, 55, 0, MODE_EMA, PRICE_CLOSE, Current + 1);

double Sell2_1 = Var1 ;

double Sell2_2 = - 105;

double Sell3_1 = Var2 ;

double Sell3_2 = - 105;

Oui, mais avec ce code, je veux entrer à l'ouverture de la prochaine barre, et je serais sûr que la prochaine barre va augmenter, donc un achat obligatoire avec 5 pips au-dessus du dernier sommet.

 

trade en haut de l'heure

Bonjour - Je cherche à invoquer mon EA en fonction de l'heure de la journée. Peut-être 5h et 17h, ou toutes les 30 minutes, etc.

Comment puis-je faire cela ?

Merci beaucoup pour toute aide.

Kevin

 

Ceci peut peut-être vous aider :

if((TimeHour(TimeLocal( ) )!=5&&TimeMinute(TimeLocal( ) )!=0)||(TimeHour(TimeLocal( ) )!=17

&&TimeMinute(TimeLocal( ) )!=0))return() ;

Mettez-le au début de start().

 

Quelqu'un pourrait-il jeter un coup d'œil à ce document et me dire pourquoi il ne fonctionne pas ?

Je cherche à l'utiliser comme commentaire.

double AvgWin()

{

double CountTrades = 0 ;

double CountPips = 0 ;

for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY) ;

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())

CountTrades++ ;

{

si(OrderProfit() >= 0)

CountPips++ ;

}

si(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())

CountTrades++ ;

{

si(OrderProfit() >= 0)

CountPips++ ;

}

}

}

si(CountPips < 0)

return(MathRound(CountPips/CountTrades)*10) ;

sinon

Print("Real Time AvgWin not Available") ;

return(mAvgWin) ;

}

 

Tout d'abord, remplacez

SELECT_BY_TICKET par SELECT_BY_POS

Deuxièmement, CountPips est toujours supérieur à 0.

 
Roger09:
Tout d'abord remplacer

SELECT_BY_TICKET à SELECT_BY_POS

Deuxièmement, CountPips est toujours supérieur à 0.

Est-ce correct ?

int AvgWin()

{

int CountTrades = 0 ;

int CountPips = 0 ;

for(int Ticket=0;Ticket<OrdersHistoryTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_POS,MODE_HISTORY) ;

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())

CountTrades++ ;

{

si(OrderProfit() >= 0)

CountPips++ ;

}

si(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())

CountTrades++ ;

{

si(OrderProfit() >= 0)

CountPips++ ;

}

}

}

si(CountPips > 0)

return(MathRound(CountPips/CountTrades)*10) ;

sinon

Print("Real Time AvgWin not Available") ;

return(mAvgWin) ;

}

Raison: