Aide au codage - page 395

 

EA n'ouvre pas une contre-position

Salut MQL Coders,

J'ai une question concernant un bug dans mon EA. Il semble ne pas ouvrir une position de contre-tendance (voir capture d'écran ci-jointe).

Il ferme le trade, mais il n'ouvre pas un nouveau trade pour suivre la nouvelle direction de la tendance donnée.

// Indicator HMA NMC

double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);

double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);

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

//| BUY |

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

if(trendc!=trendp)

{

if(trendc==1) // code for buy

OpenBuy();

return(0);

}

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

//| SELL |

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

if(trendc==-1) // code for sell

{

OpenSell();

return(0);

}

}

[/CODE]

[CODE]

void CheckForClose()

{

RefreshRates();

double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);

double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()!= MAGIC) continue;

if(OrderSymbol() != s_symbol) continue;

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

//| Close BUY |

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

if(trendc_c!=trendp_c) // Check trend

{

if(OrderType()==OP_BUY)

{

if(trendc_c==-1) //is buy?

{

bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);

if(buyClose==false)

{

int ErrorCode = GetLastError();

string ErrDesc = ErrorDescription(ErrorCode);

string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);

if(ShowAlerts == true) Alert(ErrAlert);

string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());

Print(ErrLog);

}

}

break;

}

}

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

//| Close SELL |

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

if(trendc_c!=trendp_c)

{

if(OrderType()==OP_SELL)

{

if(trendc_c==1) // SELL

{

bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);

if(sellClose == false)

{

ErrorCode = GetLastError();

ErrDesc = ErrorDescription(ErrorCode);

ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);

if(ShowAlerts==true) Alert(ErrAlert);

ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());

Print(ErrLog);

}

}

break;

}

}

}

}

Merci d'avance !

 
secretcode:
Cher Mladen

Est-il possible d'ajouter une bande dans l'indicateur ci-joint comme dans ce post : https://www.mql5.com/en/forum/172894/page45

Cet indicateur est de la section elite mais j'aime la façon dont vous ajoutez la bande sur celui-ci.

Merci pour toute aide

code secret

secretcode

Voici une version avec des bandes ajoutées : ema_variation__filter_amp_bands_amp_mtf.ex4

 
mladen:
secretcode Voici une version avec des bandes ajoutées : ema_variation__filter_amp_bands_amp_mtf.ex4

Merci Mladen J'apprécie vraiment votre expertise.

Sincèrement

secretcode

 
tfi_markets:
Salut les codeurs MQL,

J'ai une question concernant un bug dans mon EA. Il semble ne pas pouvoir ouvrir une position de contre-tendance (voir la capture d'écran ci-jointe).

Il ferme le trade, mais il n'ouvre pas un nouveau trade pour suivre la nouvelle direction de la tendance donnée.

// Indicator HMA NMC

double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);

double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);

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

//| BUY |

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

if(trendc!=trendp)

{

if(trendc==1) // code for buy

OpenBuy();

return(0);

}

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

//| SELL |

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

if(trendc==-1) // code for sell

{

OpenSell();

return(0);

}

}

[/CODE]

[CODE]

void CheckForClose()

{

RefreshRates();

double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);

double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()!= MAGIC) continue;

if(OrderSymbol() != s_symbol) continue;

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

//| Close BUY |

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

if(trendc_c!=trendp_c) // Check trend

{

if(OrderType()==OP_BUY)

{

if(trendc_c==-1) //is buy?

{

bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);

if(buyClose==false)

{

int ErrorCode = GetLastError();

string ErrDesc = ErrorDescription(ErrorCode);

string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);

if(ShowAlerts == true) Alert(ErrAlert);

string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());

Print(ErrLog);

}

}

break;

}

}

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

//| Close SELL |

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

if(trendc_c!=trendp_c)

{

if(OrderType()==OP_SELL)

{

if(trendc_c==1) // SELL

{

bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);

if(sellClose == false)

{

ErrorCode = GetLastError();

ErrDesc = ErrorDescription(ErrorCode);

ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);

if(ShowAlerts==true) Alert(ErrAlert);

ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());

Print(ErrLog);

}

}

break;

}

}

}

}

Merci d'avance !

tfi_markets

Essayez de déplacer les deux déclarations de rupture d'une ligne vers le haut (pour être à l'intérieur du "}").

 

Bonjour Mladen,

Auriez-vous l'amabilité de me dire où je me suis trompé avec ce code.

Ci-joint l'indicateur All Pivots, je l'ai retravaillé pour montrer également la ligne d'ouverture du jour précédent, la ligne de fermeture du jour précédent et la ligne d'ouverture du jour courant.

Mais l'indicateur est incohérent. Il affiche toujours les pivots correctement mais rarement, voire jamais, le code que j'ai ajouté pour l'ouverture quotidienne, l'ouverture du jour précédent et les lignes de fermeture.

Je ne comprends pas pourquoi, le code est le même que celui des pivots, il devrait donc s'afficher et parfois il le fait, mais pas toujours. J'ai fait quelque chose de mal mais je ne sais pas quoi.

Merci beaucoup.

PG

allpivots_daily.mq4

Dossiers :
 
pgtips:
Bonjour Mladen,

Auriez-vous l'amabilité de me dire où je me suis trompé dans ce code.

Ci-joint l'indicateur All Pivots, je l'ai retravaillé pour qu'il affiche également la ligne d'ouverture du jour précédent, la ligne de fermeture du jour précédent et la ligne d'ouverture du jour actuel.

Mais l'indicateur est incohérent. Il affiche toujours les pivots correctement mais rarement, voire jamais, le code que j'ai ajouté pour l'ouverture quotidienne, l'ouverture du jour précédent et les lignes de fermeture.

Je ne comprends pas pourquoi, le code est le même que celui des pivots, il devrait donc s'afficher et parfois il le fait, mais pas toujours. J'ai fait quelque chose de mal mais je ne sais pas quoi.

Merci beaucoup.

PG

allpivots_daily.mq4

PG

Cela fonctionne bien (voir la liste des objets créés). Vérifiez s'il y a des prix qui se chevauchent (cela pourrait rendre certaines lignes invisibles).

N'oubliez pas non plus d'ajouter vos lignes nouvellement créées dans la fonction ObjectDel().

Dossiers :
objects.gif  49 kb
 

Merci Mladen, j'ai continué à vérifier et il semble être pointilleux sur les noms des lignes à l'intérieur du "", ce qui n'est pas ce que j'attendais.

Comme toujours, je vous remercie pour votre temps et votre aide,

PG

mladen:
PG

Cela fonctionne bien (voir la liste des objets créés). Vérifiez s'il y a des prix qui se chevauchent (cela pourrait rendre certaines lignes invisibles).

 
pgtips:
Merci Mladen, j'ai continué à vérifier et il semble être pointilleux sur les noms des lignes à l'intérieur du "", ce qui n'est pas ce que j'attendais.

Comme toujours, je vous remercie pour votre temps et votre aide,

PG

Le nom de l'objet doit toujours être unique - mais d'après ce que j'ai vu, vous vous êtes occupé de cela.

 

S'il vous plaît, aidez-moi pour ce https://www.mql5.com/en/forum/174385/page263

 

Merci, Mladen,

J'ai un problème et c'est que :

mon premier signal d'achat après la dernière vente, j'ai besoin que ce soit après que la barre soit fermée au-dessus de la résistance ou "srUp" du code.

de même pour la vente, il faut que la barre soit fermée en dessous du support ou "srDown".

Comment puis-je corriger cela dans le code ?

Et deuxièmement, le numéro un de la question précédente, comment puis-je fixer dans mon code pour montrer le premier signal d'achat après la vente dans une couleur différente ?

#property strict

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 clrLime

#property indicator_color2 clrRed

#property indicateur_color3 clrMagenta

#property indicator_color4 clrCyan

#define BUY 1

#define SELL 2

double Buy[],

Sell[],

FirstBuy[],

FirstSell[] ;

int OnInit() {

SetIndexBuffer(0,FirstBuy) ;

SetIndexBuffer(1,FirstSell) ;

SetIndexBuffer(2,Buy) ;

SetIndexBuffer(3,Sell) ;

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

SetIndexStyle (i,DRAW_ARROW,STYLE_SOLID,2);}

SetIndexArrow (0,233) ;

SetIndexArrow (1,234) ;

SetIndexArrow (2,233) ;

SetIndexArrow (3,234) ;

return(INIT_SUCCEEDED);}

void OnDeinit(const int reason) {}

int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[],

const double &open[], const double &high[], const double &low[],

const double &close[], const long &tick_volume[], const long &volume[],

const int &spread[]) {

static int lastSignal=0 ;

for(int i=MathMin(rates_total-prev_calculated, rates_total-1) ; i>=0 ; i--) {

FirstBuy=FirstSell=Buy=Sell=EMPTY_VALUE ;

datetime when=Time ;

int w=iBarShift(NULL,PERIOD_H4, when),

x=iBarShift(NULL,PERIOD_H1, when),

y=iBarShift(NULL,PERIOD_M15,when),

z=iBarShift(NULL,PERIOD_M5, when) ;

double srUpH4 = iCustom(NULL,PERIOD_H4, "Support and Resistance (Barry)",0,w),

srDownH4 = iCustom(NULL,PERIOD_H4, "Support and Resistance (Barry)",1,w),

MidH4 = (srUpH4+srDownH4)/2,

srUpH1 = iCustom(NULL,PERIOD_H1, "Support et résistance (Barry)",0,x),

srDownH1 = iCustom(NULL,PERIOD_H1, "Support and Resistance (Barry)",1,x),

MidH1 = (srUpH1+srDownH1)/2,

srUp15M = iCustom(NULL,PERIOD_M15, "Support et résistance (Barry)",0,y),

srDown15M = iCustom(NULL,PERIOD_M15, "Support and Resistance (Barry)",1,y),

Mid15M = (srUp15M+srDown15M)/2,

srUp5M = iCustom(NULL,PERIOD_M5, "Support and Resistance (Barry)",0,z),

srDown5M = iCustom(NULL,PERIOD_M5, "Support and Resistance (Barry)",1,z),

Mid5M = (srUp5M+srDown5M)/2,

srUp = iCustom(NULL,0, "Support et Résistance (Barry)",0,i),

srDown = iCustom(NULL,0, "Support and Resistance (Barry)",1,i) ;

if(ClosesrUp) { // premier signal d'achat

Buy=Low-_Point ; }

else {

Buy=EMPTY_VALUE ; } }

if(Close>Mid5M && Close>srUp) { // Deuxième signal d'achat

Buy=Low-_Point ; }

autre {

Achat=EMPTY_VALUE ; }

if(Close>MidH4 && Close>Mid15M && Close<srDown) { // premier signal vendre

Sell=High+_Point ; }

sinon {

Sell=EMPTY_VALUE ; } }

if(Close<Mid5M && Close<srDown) { // deuxième signal de vente

Sell=High+_Point ; }

else {

Sell=EMPTY_VALUE ; }}

return(rates_total);}

voici ce que j'ai pour les alertes, dois-je l'utiliser ou utiliser plutôt l'Alert( t("text for pop up")) ??

void SoundAlert(datetime i, string dir) {

static datetime lastAlert=0 ;

if(lastAlert!=i) {

Alert(StringFormat("%s signal on %s at %s",dir,Symbol(),TimeToStr(i))) ;

lastAlert=i;}}

merci mladen

Dossiers :
signals.png  31 kb
Raison: