Comment coder ? - page 110

 

Bonjour.

J'ai hâte d'apprendre vos astuces et de vous montrer les miennes.

 
CodeMuncher:
Bonjour, je suis impatient d'apprendre vos astuces et de vous montrer les miennes.

Vous trouverez beaucoup de choses intéressantes sur ce forum.

Lisez et utilisez la fonction de recherche sans aucune restriction ! !!

N'hésitez pas à demander ce que vous voulez... Il y a beaucoup d'excellents contributeurs/assistants ici.

FerruFx

 
fireslayer26:
Dans ce code, le trailing stop est fixé à 45 pips. Mais le stop suiveur ne semble pas s'activer avant que la transaction ne bouge de 45 pips. Comment dois-je le modifier pour que le stop suiveur soit activé lorsque la transaction est placée ?

extern string Remark1 = "== Main Settings ==";

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = true;

extern double Lots = 4;

extern int Slippage = 2;

extern bool UseStopLoss = false;

extern int StopLoss = 100;

extern bool UseTakeProfit = false;

extern int TakeProfit = 15;

extern bool UseTrailingStop = true;

extern int TrailingStop = 45;

extern bool MoveStopOnce = False;

extern int MoveStopWhenPrice = 50;

extern int MoveStopTo = 1;

extern int MaxConcurrentTrades = 2;

//Version 2.01

int BarCount;

int Current;

bool TickCheck = False;

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

//| expert initialization function |

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

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

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

//| expert deinitialization function |

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

int deinit() {

return(0);

}

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

//| expert start function |

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

int start()

{

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Order = SIGNAL_NONE;

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

//| Variable Begin |

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

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

//| Variable End |

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

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

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

continue;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderStopLoss() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

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

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

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

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

continue;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(((OrderStopLoss - Ask) > (Point * TrailingStop)) || OrderStopLoss() == 0) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

Changé en rouge

 

J'ai fait les changements en rouge, mais maintenant l'EA ne semble pas vouloir fonctionner. Je vais poster l'EA complète pour que vous puissiez y jeter un coup d'oeil. Merci !

Dossiers :
williams_ea.mq4  12 kb
 

Assurez-vous de mettre () après orderstoploss.

 

Cool, ça a marché !

Que pensez-vous de cet indicateur....

Pourrait-on le modifier pour que les prix affichent des couleurs différentes en fonction de leur ouverture ? Par exemple, si l'ouverture est supérieure à celle de la barre précédente, le prix serait vert, s'il est inférieur, alors rouge, et s'il est égal, alors jaune ? Ces couleurs étant sélectionnables ? De plus, pourriez-vous l'étendre pour montrer 10 ouvertures au lieu de 6 seulement ?

De plus, sur l'EA que nous venons de corriger, comment pourrais-je mettre un paramètre d'entrée comme "Pips pour activer le Trailing Stop". Je l'ai dans un autre EA mais je ne sais pas comment le coder.

Dossiers :
period_open.mq4  23 kb
 

OrderComment()

OrderTicket()

OrderLots()

OrderStopLoss()

OrderTakeProfit()

OrderOpenTime()

Ce sont tous des outils potentiels de filtrage des ordres.

Qu'y a-t-il d'autre dans ces transactions spécifiques qui les rende uniques ?

 
Ronald Raygun:
OrderComment()

OrderTicket()

OrderLots()

OrderStopLoss()

OrderTakeProfit()

OrderOpenTime()

Ce sont tous des outils potentiels de filtrage des ordres.

Qu'y a-t-il d'autre dans ces métiers spécifiques qui les rende uniques ?

Deux des plus importants pour filtrer les ordres sont OrderSymbol() et OrderMagicNumber(). Un autre outil intéressant est OrderComment().

La meilleure idée est de saisir l'une de ces fonctions dans le Metaeditor, puis de cliquer sur le mot asnd et d'appuyer sur F1. Vous afficherez ainsi l'aide et la liste de toutes les fonctions d' ordre.

Bonne programmation,

Hiachiever

 

Utiliser OrderComment

Soyez prudent lorsque vous utilisez OrderComment() pour identifier des transactions. Parfois, le courtier ajoute des caractères au commentaire.

Il est préférable d'utiliser

si (StringFind(OrderComment(), UserComment, 0) > 0)

{

// l'ordre identifié par UserComment est trouvé dans OrderComment

}

au lieu de

if (OrderComment() == UserComment)

{

// l'ordre peut être identifié par UserComment

// si OrderComment n'a pas été modifié par le courtier

}

Robert

 

Fermer les transactions chez beakeven

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