[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 1127

 
drknn:
Merci beaucoup pour votre aide =)
 
Alexandr24:
Merci beaucoup pour votre aide =)


N'oubliez pas que dans le testeur, l'indicateur ne fait pas apparaître la fenêtre d'alerte, mais écrit des messages d'alerte dans les journaux. Il est préférable de déboguer de tels morceaux de code avec des scripts - c'est plus rapide.

De plus, les messages de l'indicateur, curieusement, ne sont pas écrits dans le testeur dans les journaux du testeur, mais dans les journaux en temps réel.

 
Comment puis-je prendre en compte la commission lorsque je teste un EA dans le testeur ?
 
Il semble être pris en compte car le testeur utilise tous les paramètres d'un courtier particulier. Une recherche vous permettra d'obtenir des informations plus précises.
http://www.google.ru/search?as_sitesearch=mql4.com&as_q=%EA%EE%EC%E8%F1%F1%E8%FF+%E2+%F2%E5%F1%F2%E5%F0%E5
 
Abzasc:

"Ce n'est pas une tâche simple.

Vous pourriez le faire de cette façon.

Ou j'ai aussi trouvé ceci


Merci !
 

Je ne comprends pas bien comment les conditions fonctionnent.

J'ai décidé de découvrir comment fonctionne un indicateur fractal, quelle est la différence entre MODE_UPPER et MODE_LOWER, et j'ai écrit le code suivant

int start()
{int y ;
y= WindowFirstVisibleBar();Alert ("y",y) ;
for (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y) ;
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y) ;
if (up>=1|down>=1){
Alert("La fractale supérieure précédente est :", up, " La fractale inférieure précédente est :", down);Alert ("y",y);}}

WindowFirstVisibleBar() donne le nombre de barres sur le graphique, ce truc fonctionne si vous rayez si (up>=1||down>=1) de l'EA, cela donne une belle série de barres comptées, seulement il y en a tellement.

C'est comme un signe || ou, l'opérateur semble faire les crochets {} si au moins une des conditions est vraie, ou si les deux sont vraies en même temps, non ?

Rien n'a changé du tout au tout pour moi !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Je crois que j'ai bien compris. Aide-moi à comprendre. ! !!!!!!

 
Dimka-novitsek:

Je ne comprends pas bien comment les conditions fonctionnent.

J'ai décidé de comprendre comment fonctionne un indicateur fractal, quelle est la différence entre MODE_UPPER et MODE_LOWER.

int start()
{int y ;
y= WindowFirstVisibleBar();Alert ("y",y) ;
pour (;y>=0;y--)
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y) ;
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y) ;
si (up>=1||down>=1){
Alert("La fractale supérieure précédente est :", up, " La fractale inférieure précédente est :", down);Alert ("y",y);}}

WindowFirstVisibleBar() donne le nombre de barres sur le graphique, cette chose fonctionne si vous croisez si (up>=1|down>=1), cela donne une belle série de barres calculées, mais il y en a beaucoup.

C'est comme un signe || ou, l'opérateur semble faire les crochets {} si au moins une des conditions est vraie, ou si les deux sont vraies en même temps, non ?

Rien n'a changé du tout au tout pour moi !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Je pense que tout est correct. Aidez-moi !!!!!!!



place du code normal via le contre-alt - M - réponse plus rapide...pas d'exclamations.
 
via counter-alt - M - Et plus de détails ?
 
Dimka-novitsek:

C'est comme si...

https://docs.mql4.com/ru/basis/operations/bool

Une opération logique OU.

Zy counter-alt - M est comme un bouton poussoir SRC et le code passe par là.

 
drknn:

J'ai essayé le code que vous avez suggéré. Le résultat est toujours le même - il continue à ouvrir des transactions pendant la journée. Encore une fois, j'aimerais conserver l'option marche/arrêt.

Voici les variantes essayées :

extern bool WaitForNewDay = true ;

void init()

{

SMB=Symbole() ;

retour ;

}

void start()

{

bool Trade=true ;

if(WaitForNewDay){if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)!=0) Trade=false;}

if(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen() ; return;}

}

//-----------------------------------------------------------------

int HistoryBuy(int MAGICMA)

{int BuyOrders=0 ;

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

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

Print(" ",GetLastError()," ",i) ;

}

else {

if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGICMA){ continue;}

if(OrderType()==OP_BUY){

si(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){

BuyOrders++ ;

}

}

}

}

return(BuyOrders) ;

}

//-----------------------------------------------------------------

int HistorySell(int MAGICMA){

int SellOrders=0 ;

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

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

Print(" ",GetLastError()," ",i) ;

}

else {

if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGICMA){ continue;}

if(OrderType()==OP_SELL){

si(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){

SellOrders++ ;

}

}

}

}

retourner(SellOrders) ;

}

//////////////Autre option/////////////////////

extern bool WaitForNewDay = true ;

Commerce=vrai ;

void init()

{

SMB=Symbole() ;

if(WaitForNewDay) {Trade=false;}

retour ;

}

void start()

{

if(WaitForNewDay) {if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)==0) Trade=true;}

if(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen() ; Trade=false ; return;}

}