Comment coder ? - page 300

 

Empêcher le surtrading

Bonjour à tous,

J'ai testé mon EA en utilisant la méthode all ticks sur un graphique H4 en utilisant une croix MACD pour initier les ordres (entre autres) et le testeur de stratégie ouvre environ 200 positions dans les premières minutes, donc après avoir fait quelques lectures, je réalise que je dois limiter le nombre de trades qu'il place, sur mon système il ne devrait pas placer plus d'un trade toutes les 4 heures parce que j'attends que la bougie se ferme avant d'utiliser iMACD(...... PRICE_CLOSE...) et je le décale à 0 pour MACDMainCurrent & MACDSymbolCurrent et à 1 pour MACDMainPrevious & MACDSymbolPrevious.

Mes variables globales sont :

string hasOrderedGV = "has_ordered_GV" ;

string barsGV = "bars_GV" ;

Et j'ai inséré ce code avant que mon EA vérifie les positions longues ou courtes :

//--- Déterminer si l'ordre a déjà été placé sur le bloc de temps H4

si ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false) ;

GlobalVariableSet(barsGV,Bars) ;

}

//--- Vérification de la possibilité d'une position longue (BUY)

if (GlobalVariableGet (hasOrderedGV, false))

{

si ... (c'est ici que je vérifie le croisement MACD parmi d'autres indicateurs).

Puis si l'ordre s'est ouvert avec succès :

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true) ;

{

si (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green) ;

etc etc.

Quelqu'un peut-il me dire si je m'y prends de la bonne façon ? Je ne savais pas s'il y avait une façon plus efficace ou plus précise de le faire ? Merci.

 

...

Pourquoi ne pas simplement compter combien d'ordres votre EA a déjà ouvert et s'il a déjà ouvert un ordre, ne pas en ouvrir un nouveau ?

C'est juste une idée (et une façon habituelle et la plus simple de limiter le nombre d'ordres ouverts par un EA).

crsnape@btinternet.com:
Bonjour à tous,

J'ai testé mon EA en utilisant la méthode all ticks sur un graphique H4 en utilisant une croix MACD pour initier les ordres (entre autres) et le testeur de stratégie ouvre environ 200 positions dans les premières minutes, donc après avoir fait quelques lectures, je réalise que je dois limiter le nombre de trades qu'il place, sur mon système il ne devrait pas placer plus d'un trade toutes les 4 heures parce que j'attends la fermeture de la bougie avant d'utiliser iMACD(... PRICE_CLOSE...) et je le décale à 0 pour MACDMainCurrent & MACDSymbolCurrent et à 1 pour MACDMainPrevious & MACDSymbolPrevious.

Mes variables globales sont :

string hasOrderedGV = "has_ordered_GV" ;

string barsGV = "bars_GV" ;

Et j'ai inséré ce code avant que mon EA vérifie les positions longues ou courtes :

//--- Déterminer si l'ordre a déjà été placé sur le bloc de temps H4

si ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false) ;

GlobalVariableSet(barsGV,Bars) ;

}

//--- Vérification de la possibilité d'une position longue (BUY)

if (GlobalVariableGet (hasOrderedGV, false))

{

si ... (c'est ici que je vérifie le croisement MACD parmi d'autres indicateurs).

Puis si l'ordre s'est ouvert avec succès :

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true) ;

{

si (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green) ;

etc etc.

Quelqu'un peut-il me dire si je m'y prends de la bonne façon ? Je ne savais pas s'il y avait une façon plus efficace ou plus précise de procéder ? Merci.
 

Simplement parce que mon EA a généralement plusieurs positions ouvertes en même temps ; je ne pourrais donc pas utiliser, par exemple, la fonction suivante,

si (CountedOrders > 5)

Break ;

ou quelque chose de ce genre, car je ne sais pas combien de positions seront ouvertes à un moment donné. J'ai besoin de le relier au temps, je pense.

 

J'ai attaché cet EA à mon compte mt4 à 5 chiffres... Mais il n'ouvre aucun trade....

S'il vous plaît aidez-moi

Dossiers :
dipu_2.mq4  5 kb
 

J'ai besoin d'éditer cet EA pour déplacer le stoploss en 3 étapes.

Cet EA a déjà une capacité de breakeven mais je veux que cet EA déplace mon stoploss de son premier point de breakeven à un autre +20 pips une fois que mon profit est atteint.

déplacer mon stoploss de son premier point d'équilibre à un autre de +20 pips une fois que mon profit atteint +27 pips.

+27pips et le déplacer encore à +40pips quand il atteint +50pips et même plus si possible.

plus si possible.

Dossiers :
 

Salut Mladen,

Merci de m'avoir prévenu ! J'ai déjà réussi à le résoudre.

Au fait, savez-vous à quoi servent MODE et SHIFT dans iStochasticdo ou existe-t-il un endroit qui fournisse plus d'informations ? J'ai lu la documentation sur le site de mql4 mais cela n'a pas de sens pour moi. L'explication qu'ils fournissent est trop brève.

Par exemple

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Courant + 0) ;

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0) ;

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Courant + 1) ;

A quoi sert le courant + 0 etc.

Merci et salutations

Terrance

mladen:
Terrance C'est une fonction. Placez-la à la fin de votre EA et placez des appels à cette fonction là où vous pensez qu'il est approprié de vérifier si un ordre est déjà ouvert sur une barre courante.
 

Bonjour, quelqu'un pourrait-il me dire où je me trompe ici, s'il vous plaît ? J'obtiens un code d'erreur ')' avec un nombre de paramètres erroné sur la ligne surlignée en rouge - mais tous les paramètres s'additionnent...

if ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false) ;

GlobalVariableSet(barsGV,Bars) ;

}

//--- Vérification de la possibilité d'une position longue (BUY)

if (GlobalVariableGet (hasOrderedGV, false)) Merci

 

...

Terrance

MODE_MAIN signifie que vous lisez la valeur de la ligne stochastique. MODE_SIGNAL signifie que vous lisez la valeur de la ligne du signal stochastique.

Quant à SHIFT : il est le même pour tous les indicateurs (même les personnalisés). Par exemple : SHIFT=0 signifie la valeur de la barre courante, SHIFT=1 signifie la valeur de la première barre fermée et ainsi de suite ...

tkuan77:
Salut Mladen,

Merci pour l'info ! J'ai déjà réussi à résoudre ce problème.

A propos, savez-vous à quoi servent MODE et SHIFT dans iStochasticdo ou existe-t-il un endroit qui fournisse plus d'informations ? J'ai lu la documentation sur le site de mql4 mais cela n'a pas de sens pour moi. L'explication qu'ils fournissent est trop brève.

Par exemple

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Courant + 0) ;

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0) ;

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Courant + 1) ;

A quoi sert le courant + 0 etc.

Merci et salutations

Terrance
 

...

L'erreur est que GlobalVariableGet() n'a qu'un seul paramètre (le nom de la variable). Vous n'avez pas besoin du deuxième paramètre (le"false" que vous avez dans l'appel à la fonction)

crsnape@btinternet.com:
Bonjour, quelqu'un pourrait-il me dire où je me trompe ici ? J'obtiens un code d'erreur ')' avec un nombre de paramètres erroné sur la ligne surlignée en rouge - mais tous les paramètres s'additionnent...

si ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false) ;

GlobalVariableSet(barsGV,Bars) ;

}

//--- Vérifier la possibilité d'une position longue (BUY)

if (GlobalVariableGet (hasOrderedGV, false)) Merci
 

J'ai modifié le code comme suit, et il n'y a pas d'erreur au moins - est-ce correct ?

si (GlobalVariableGet (hasOrderedGV) == false)

Raison: