Comment coder ? - page 67

 

compteur ?

Je programme des indicateurs depuis tellement de mois que je suis un peu déficient en experts mais j'ai l'intention de résoudre ce problème. En cours de route, j'ai besoin d'un peu d'aide. Dans mon expert, je dois vérifier à la clôture de la barre s'il y a une condition qui justifierait la clôture de la transaction.

Je commence par une variable globale,

//--- Global variable

datetime PreviousBar; // record candle/bar time[/CODE]

and set one bool in init()

int init()

{

do_this = true;

}

[/CODE]

blah blah boring stuff.... etc, etc

then in the main loop I have:

[CODE]

if(do_this == true)

{

PreviousBar = Time[0];

do_this= false; // so it does this only once only

}

if(NewBar() == true)

{

if(TotalOpenOrders() == blah blah close my order you crazy monkey)

}

and outside the main loop I have:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}

OK, donc c'est configuré pour faire une fois par barre. Ce que je veux faire, c'est avoir une fonction qui incrémente 90 secondes ou 60 secondes ou autre, puis met un bool à true après avoir incrémenté ce temps. En fait, je veux vérifier les indicateurs toutes les 60, 90, 120 secondes ou autre au lieu de le faire à la clôture de la barre. Comment puis-je faire cela ?

Merci pour toute aide,

- Nittany1

 
nittany1:
Je programme des indicateurs depuis tellement de mois que je suis un peu déficient en experts mais j'ai l'intention de résoudre ce problème. En cours de route, j'ai besoin d'un peu d'aide. Dans l'expert que j'ai créé, je fais vérifier à la clôture de la barre si une condition justifie la clôture de la transaction.

Je commence par une variable globale,

//--- Global variable

datetime PreviousBar; // record candle/bar time[/CODE]

and set one bool in init()

int init()

{

do_this = true;

}

[/CODE]

blah blah boring stuff.... etc, etc

then in the main loop I have:

[CODE]

if(do_this == true)

{

PreviousBar = Time[0];

do_this= false; // so it does this only once only

}

if(NewBar() == true)

{

if(TotalOpenOrders() == blah blah close my order you crazy monkey)

}

and outside the main loop I have:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}

OK, donc c'est configuré pour faire une fois par barre. Ce que je veux faire, c'est avoir une fonction qui incrémente 90 secondes ou 60 secondes ou autre, puis met un bool à true après avoir incrémenté ce temps. En fait, je veux vérifier les indicateurs toutes les 60, 90, 120 secondes ou autre au lieu de le faire à la clôture de la barre. Comment puis-je faire cela ?

Merci pour toute aide,

- nittany1

Ceci devrait faire l'affaire. Rappelez-vous que MT utilise une exécution basée sur les ticks, donc la précision à la seconde près n'est pas possible (à moins que vous ne boucliez tout dans le sous-programme Init()).

if (CallIndicatorsCheck())

{

// votre code ici

}

bool CallIndicatorsCheck()

{

static datetime Oldtime ;

int Secs = 90 ;

bool Drapeau ;

if (CurrTime() >= Oldtime) {

Oldtime = CurrTime() + Secs ;

Drapeau = vrai ; }

return(Drapeau) ;

}

 

Placement des commentaires

Quelqu'un pourrait-il me montrer le code permettant de placer un commentaire dans lecoin SUPÉRIEURDROIT de l'écran, plutôt que dans le coin supérieur gauche par défaut ?

Merci !

 
wolfe:
Quelqu'un pourrait-il me montrer le code pour placer un commentaire dans lecoin SUPERIEURDROIT de l'écran, plutôt que dans le coin supérieur gauche par défaut ? Merci !

Vous ne pouvez pas. Extrait du manuel MQL4 :

void Comment( ...)La fonction sort le commentaire défini par l'utilisateur dans le coin supérieur gauche du graphique.

Si vous avez besoin par décès, vous pourriez créer des objets.

 
wolfe:
Quelqu'un pourrait-il me montrer le code permettant de placer un commentaire dans lecoin SUPÉRIEURDROIT de l'écran, au lieu du coin supérieur gauche par défaut ? Merci !

LinusGuy a raison ; il n'y a pas de moyen direct. La solution de contournement la plus simple est d'ajouter des espaces à votre commentaire...

Comment(" hello world !") ;

décalera le texte vers la droite.

Vous pouvez également insérer des retours à la ligne pour faire descendre la page.

Comment("\n\n\n\n\n\n\n\n\N\N\N\N\N\N\N\N votre texte") ;

ou combiner les sauts de ligne et les espaces pour imprimer dans le coin inférieur droit de l'écran.

mog

 
mog:
LinusGuy a raison ; il n'y a pas de moyen direct. La solution de contournement la plus simple consiste à garnir votre commentaire d'espaces --

Comment(" hello world !") ;

décalera le texte vers la droite.

Vous pouvez également mettre des flux de lignes pour faire descendre la page.

Comment("\n\n\n\n\n\n\N\N\N\N\N\N\N\N\N\N\N votre texte") ;

ou combiner les sauts de ligne et les espaces pour imprimer dans le coin inférieur droit de l'écran.

mog

Merci de votre aide. Je vais essayer !

 

Pas de nouveau trade pendant X barres après un trade perdant

Bonjour, j'espère que quelqu'un pourra m'aider...

comment faire pour qu'un nouveau trade ne commence pas avant 10 barres si le dernier trade était une perte ?

merci

 

La fonction ci-dessous renvoie true si l'historique du compte contient une transaction à perte qui a été clôturée à ou après l'ouverture de la 10ème barre passée (la barre actuelle est 0),

et renvoie false sinon.

bool postMortem()

{

datetime since = Time[ bar+10 ];

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

if ( ! OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )

continue;

if ( OrderProfit() = since )

return( true );

}

return( false );

}

[/PHP]

If you add that function to your EA, then include a statement like the following in the start() function, then Bob's your uncle.

[PHP]if ( postMortem() ) return( 0 );
 

Merci beaucoup pour cela - je vais essayer.

salutations

 

Les gars, avez-vous le même problème ?

J'ai codé un expert. Je veux ouvrir une position lorsque le prix est le même que celui d'un indicateur. Pour ce faire, j'utilise la phrase suivante :

//pour acheter

double indicatorpast = icustom(....................,1) ;

double indicatornow = icustom(....................,0) ;

si (close[1]indicateurnow) OpenBUY() ;

si (close[1]>indicatorpast && close[0]<indicatornow) OpenSELL() ;

mais avec ce satatement, l'expert ouvre des positions non seulement quand le prix traverse l'indicateur, il ouvre des positions au dessus de l'indicateur aussi. Je veux que l'expert ouvre une position UNIQUEMENT quand le prix traverse l'indicateur, donc j'ai essayé cela :

//pour acheter

double indicatorpast = icustom(....................,1) ;

double indicatornow = icustom(....................,0) ;

si (close[1]<indicatorpast && close[0]==indicatornow) OpenBUY() ;

si (close[1]>indicatorpast && close[0]==indicatornow) OpenSELL() ;

Mais cette instruction ne fonctionne pas.

Savez-vous ce qui se passe ? Parce que je pense qu'il n'y a pas d'erreurs dans l'instruction.

Salutations.

Raison: