Comment coder ? - page 344

 
mladen:

tkuan77

Vous devez trouver la dernière barre fermée et voir si le jour de la dernière barre fermée est le même que le jour actuel.

Vous pouvez utiliser quelque chose comme cette fonction pour obtenir l'heure de la dernière barre fermée :

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime();

}

return(CloseTime);

}

Et ensuite vous pouvez vérifier si la date est la même.

Bonjour mladen,

Mais où dois-je insérer cette partie du code ? Je suis désolé de demander cela car je suis encore assez nouveau dans le codage et je n'arrive toujours pas à comprendre comment fonctionne la boucle For.

Salutations

Ryan

 
tkuan77:

Salut mladen,

Mais où dois-je insérer cette partie du code ? Désolé de vous poser cette question car je suis encore assez novice en matière de codage et je n'arrive toujours pas à comprendre le fonctionnement de la boucle For.

Salutations

Ryan

Ryan

Quelque chose comme ceci :

if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // pas de transaction

 
mladen:

Ryan

Quelque chose comme ceci :

si (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime())) // pas de négociation

Bonjour mladen, j'ai ajouté le code mais il semble donner une sorte d'erreur de variable globale. De plus, j'ai remarqué que vous avez une variable MagicNumber qui n'est pas définie, puis-je demander à quoi elle sert ? Je l'ai ajoutée sous int mais je ne suis pas sûr de l'utilité de cette variable.

Veuillez me conseiller. Merci encore pour votre patience.

//---- paramètres d'entrée

extern double TakeProfit = 1000.0 ;

extern double Lots = 0.1 ;

extern double StopLoss = 980.0 ;

extern int Entry_Hour_1st = 21 ;

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

//| fonction d' initialisation de l'expert

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

int init()

{

//----

//----

return(0) ;

}

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

//| fonction de désinitialisation experte |

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

int deinit()

{

//----

//----

return(0) ;

}

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

//| fonction de démarrage expert |

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

int start()

{

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

//-- Déclenchement du commerce

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

int ticket, total, MagicNumber ;

double TP_Value, SL_Value ;

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0 ;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime() ;

}

return(CloseTime) ;

}

total = OrdersTotal() ; // vérification du nombre total de transactions actuellement ouvertes

if(total < 1)

{

if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

si ((Close[1] - Open[1]) > 0.00100)

{

TP_Value = (Close[1] - Open[1]) ;

SL_Value = (Low[1] - 0.0010) ;

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

si ((Open[1] - Close[1]) > 0.00100)

{

TP_Value = (Open[1] - Close[1]) ;

SL_Value = (Low[1] - 0.0010) ;

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

si ((Open[1] - Close[1]) <= 0.00100)

{

TP_Value = (High[1] - Low[1]) ;

SL_Value = (Low[1] - 0.0010) ;

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

}

if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

si ((Close[1] - Open[1]) > 0.00100)

{

TP_Value = (Close[1] - Open[1]) ;

SL_Value = (High[1] + 0.0010) ;

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

si ((Open[1] - Close[1]) > 0.00100)

{

TP_Value = (Open[1] - Close[1]) ;

SL_Value = (High[1] + 0.0010) ;

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

si ((Open[1] - Close[1]) <= 0.00100)

{

TP_Value = (High[1] - Low[1]) ;

SL_Value = (High[1] + 0.0010) ;

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

}

}

return(0) ;

}

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

 
tkuan77:

Bonjour mladen, j'ai ajouté le code mais il semble donner une sorte d'erreur de variable globale. Aussi, j'ai remarqué que vous avez une variable MagicNumber qui n'est pas définie, puis-je demander à quoi elle sert ? Je l'ai ajoutée sous int mais je ne suis pas sûr de l'utilité de cette variable.

Veuillez me conseiller. Merci encore pour votre patience.

//---- paramètres d'entrée

extern double TakeProfit = 1000.0 ;

extern double Lots = 0.1 ;

extern double StopLoss = 980.0 ;

extern int Entry_Hour_1st = 21 ;

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

//| fonction d'initialisation de l'expert

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

int init()

{

//----

//----

return(0) ;

}

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

//| fonction de désinitialisation experte |

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

int deinit()

{

//----

//----

return(0) ;

}

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

//| fonction de démarrage expert |

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

int start()

{

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

//-- Déclenchement du commerce

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

int ticket, total, MagicNumber ;

double TP_Value, SL_Value ;

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0 ;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime() ;

}

return(CloseTime) ;

}

total = OrdersTotal() ; // vérification du nombre total de transactions actuellement ouvertes

if(total < 1)

{

if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

si ((Close[1] - Open[1]) > 0.00100)

{

TP_Value = (Close[1] - Open[1]) ;

SL_Value = (Low[1] - 0.0010) ;

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

si ((Open[1] - Close[1]) > 0.00100)

{

TP_Value = (Open[1] - Close[1]) ;

SL_Value = (Low[1] - 0.0010) ;

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

si ((Open[1] - Close[1]) <= 0.00100)

{

TP_Value = (High[1] - Low[1]) ;

SL_Value = (Low[1] - 0.0010) ;

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

}

if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

si ((Close[1] - Open[1]) > 0.00100)

{

TP_Value = (Close[1] - Open[1]) ;

SL_Value = (High[1] + 0.0010) ;

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

si ((Open[1] - Close[1]) > 0.00100)

{

TP_Value = (Open[1] - Close[1]) ;

SL_Value = (High[1] + 0.0010) ;

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

si ((Open[1] - Close[1]) <= 0.00100)

{

TP_Value = (High[1] - Low[1]) ;

SL_Value = (High[1] + 0.0010) ;

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

}

}

return(0) ;

}

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

C'est une fonction

Déplacez-la en dehors du corps de la fonction start().

 

mladen:

C'est une fonction

Déplacez-le en dehors du corps de la fonction start()

Bonjour mladen, j'ai essayé de déplacer la fonction hors de Start function, cependant, mon EA déclenche toujours plus d'une transaction par jour au lieu de se limiter à ne déclencher qu'une seule transaction par jour.

J'apprécie l'éclairage.

Salutations

//---- paramètres d'entrée

extern double TakeProfit = 1000.0 ;

extern double Lots = 0.1 ;

extern double StopLoss = 980.0 ;

extern int Entry_Hour_1st = 21 ;

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

//| fonction d'initialisation de l'expert

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

int init()

{

//----

//----

return(0) ;

}

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

//| fonction de désinitialisation experte |

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

int deinit()

{

//----

//----

return(0) ;

}

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

//| fonction de démarrage expert |

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

int MagicNumber ;

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0 ;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime() ;

}

return(CloseTime) ;

}

int start()

{

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

//-- Déclenchement du commerce

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

int ticket, total ;

double TP_Value, SL_Value ;

total = OrdersTotal() ; // vérification du nombre total de transactions actuellement ouvertes

if(total < 1)

{

if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

si ((Close[1] - Open[1]) > 0.00100)

{

TP_Value = (Close[1] - Open[1]) ; // valeur du corps long

SL_Value = (Low[1] - 0.0010) ; // toujours la même valeur pour un long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

si ((Open[1] - Close[1]) > 0.00100)

{

TP_Value = (Open[1] - Close[1]) ; // valeur du corps court

SL_Value = (Low[1] - 0.0010) ; // toujours la même chose pour le long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

si ((Open[1] - Close[1]) <= 0.00100)

{

TP_Value = (High[1] - Low[1]) ; // valeur de toute la bougie, y compris la tête et la queue de bougie

SL_Value = (Low[1] - 0.0010) ; // toujours la même pour un long terme.

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

}

if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

si ((Close[1] - Open[1]) > 0.00100)

{

TP_Value = (Close[1] - Open[1]) ; // valeur du corps long

SL_Value = (High[1] + 0.0010) ; // toujours la même chose pour le short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

si ((Open[1] - Close[1]) > 0.00100)

{

TP_Value = (Open[1] - Close[1]) ; // valeur du corps court

SL_Value = (High[1] + 0.0010) ; // toujours la même valeur pour le short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

si ((Open[1] - Close[1]) <= 0.00100)

{

TP_Value = (High[1] - Low[1]) ; // valeur de la bougie entière, y compris la tête et la queue.

SL_Value = (High[1] + 0.0010) ; // toujours la même chose pour le short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

}

}

return(0) ;

}

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

 
tkuan77:

Bonjour mladen, j'ai essayé de déplacer la fonction hors de la fonction Start, mais mon EA continue à déclencher plus d'une transaction par jour au lieu de se limiter à déclencher une seule transaction par jour.

Merci pour vos explications.

Salutations

//---- paramètres d'entrée

extern double TakeProfit = 1000.0 ;

extern double Lots = 0.1 ;

extern double StopLoss = 980.0 ;

extern int Entry_Hour_1st = 21 ;

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

//| fonction d'initialisation de l'expert

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

int init()

{

//----

//----

return(0) ;

}

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

//| fonction de désinitialisation experte |

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

int deinit()

{

//----

//----

return(0) ;

}

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

//| fonction de démarrage expert |

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

int MagicNumber ;

datetime GetLastClosedOrderTime()

{

datetime CloseTime = 0 ;

for(int i=OrdersHistoryTotal()-1;i>=0;i--)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)

CloseTime = OrderCloseTime() ;

}

return(CloseTime) ;

}

int start()

{

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

//-- Déclenchement du commerce

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

int ticket, total ;

double TP_Value, SL_Value ;

total = OrdersTotal() ; // vérifier le nombre total de transactions actuellement ouvertes

if(total < 1)

{

if (Hour()==Entry_Hour_1st && ((High[0] - High[1]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

si ((Close[1] - Open[1]) > 0.00100)

{

TP_Value = (Close[1] - Open[1]) ; // valeur du corps long

SL_Value = (Low[1] - 0.0010) ; // toujours la même valeur pour un long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

si ((Open[1] - Close[1]) > 0.00100)

{

TP_Value = (Open[1] - Close[1]) ; // valeur du corps court

SL_Value = (Low[1] - 0.0010) ; // toujours la même chose pour le long

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

si ((Open[1] - Close[1]) <= 0.00100)

{

TP_Value = (High[1] - Low[1]) ; // valeur de la bougie entière, y compris la tête et la queue.

SL_Value = (Low[1] - 0.0010) ; // toujours la même pour un long terme.

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Val ue,Ask+TP_Value, "My EA",200,0,Green) ;

retour(0) ;

}

}

if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))

{

si ((Close[1] - Open[1]) > 0.00100)

{

TP_Value = (Close[1] - Open[1]) ; // valeur du corps long

SL_Value = (High[1] + 0.0010) ; // toujours la même chose pour le short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

si ((Open[1] - Close[1]) > 0.00100)

{

TP_Value = (Open[1] - Close[1]) ; // valeur du corps court

SL_Value = (High[1] + 0.0010) ; // toujours la même valeur pour le short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

si ((Open[1] - Close[1]) <= 0.00100)

{

TP_Value = (High[1] - Low[1]) ; // valeur de la bougie entière, y compris la tête et la queue.

SL_Value = (High[1] + 0.0010) ; // toujours la même chose pour le short

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red) ;

retour(0) ;

}

}

}

return(0) ;

}

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

tkuan77

Remplacer ceci :

if(total < 1)

par ceci :

if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;

Et il ne devrait plus le faire

 
mladen:

tkuan77

Remplacez ceci :

if(total < 1)

par ceci :

if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;

Et il ne devrait plus le faire

Bonjour mladen, après avoir entré le code, au lieu de déclencher 1 transaction par jour, il a déclenché plusieurs transactions à la fois jusqu'à ce que le compte explose. Est-ce que cela peut être dû à un mécanisme de déclenchement qui provoque cela ?

Salutations

 

Bonjour mladen, j'ai ce code particulier qui fermera toutes les transactions en attente que j'ai après avoir déclenché une transaction. Comment puis-je faire pour annuler seulement ma transaction en attente actuelle après avoir déclenché une transaction au lieu de toutes les futures transactions en attente ?

merci.....

int new_del()

{

int i,a ;

int total = OrdersTotal() ;

string comentario,par ;

for (i=total-1 ; i >=0 ; i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

si (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

for (a=total-1 ; a >=0 ; a--)

{

OrderSelect(a,SELECT_BY_POS,MODE_TRADES) ;

comentario=OrderComment() ;

par=StringSubstr(comentario,0,6) ;

if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())

{

OrderDelete(OrderTicket()) ;

Print("Suppression de SELL_STOP"," Ordertype :",OrderType()) ;

return(1) ;

}

if(OrderType()==OP_BUYSTOP)// && par==Symbol())

{

OrderDelete(OrderTicket()) ;

Print("Suppression de BUY_STOP"," Ordertype :",OrderType()) ;

return(1) ;

}

}

}

}

}

 
tkuan77:
Bonjour mladen, j'ai ce code particulier qui fermera toutes les transactions en attente que j'ai après avoir lancé une transaction. Comment puis-je faire en sorte d'annuler uniquement ma transaction en attente actuelle après avoir déclenché une transaction au lieu de toutes les futures transactions en attente ?

merci.....

int new_del()

{

int i,a ;

int total = OrdersTotal() ;

string comentario,par ;

for (i=total-1 ; i >=0 ; i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ;

si (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

for (a=total-1 ; a >=0 ; a--)

{

OrderSelect(a,SELECT_BY_POS,MODE_TRADES) ;

comentario=OrderComment() ;

par=StringSubstr(comentario,0,6) ;

if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())

{

OrderDelete(OrderTicket()) ;

Print("Suppression de SELL_STOP"," Ordertype :",OrderType()) ;

return(1) ;

}

if(OrderType()==OP_BUYSTOP)// && par==Symbol())

{

OrderDelete(OrderTicket()) ;

Print("Suppression de BUY_STOP"," Ordertype :",OrderType()) ;

return(1) ;

}

}

}

}

}

tkuan77

Que signifie "current pending trade" et que signifie "future pending trade" ?

 
mladen:

tkuan77

Que signifie l'expression "current pending trade" et "future pending trade" ?

Bonjour mladen,

Le "Current pending trade" signifie qu'une fois qu'une condition a été remplie, l'ea va créer 2 positions en attente (1 longue et 1 courte). Ainsi, si la position longue est déclenchée, l'ea annule automatiquement la position courte en attente.

Future pending trade signifie qu'après que l'ea a annulé les précédentes transactions en attente et que la condition est à nouveau remplie, l'ea devrait automatiquement établir 2 autres transactions en attente (1 longue et 1 courte). Cependant, si l'ea a actuellement une transaction en cours, l'ea annulera automatiquement tous les ordres en attente que l'ea essaie d'établir.

Ce que j'essaie de faire, c'est de laisser le système annuler uniquement la transaction en cours après qu'une transaction ait été déclenchée. merci de votre aide.

salutations