Croix universelle MA EA - page 105

 
sachin_syd:
Cher Mrtools/Mladen

Pouvez-vous définir le paramètre de distance maximale comme étant la distance entre le prix de clôture d'une barre et le ma lent ?

le paramètre actuel n'a aucun sens

Merci

Sachin

Sachin

Trouvez simplement la ligne qui va comme ceci :

MaxDistance = MathFloor(MathAbs((FastMACurrent-SlowMACurrent)/pPoint)) ;

et remplacez le FastMACurrent par Close[1] (pour la clôture de la première barre fermée) ou Close[0] (pour la clôture de la barre encore ouverte).

 

ok j'ai fait ce test maintenant...merci.

Vous pouvez également m'aider sur ce point : https://www.mql5.com/en/forum/general

mladen:
Sachin

Trouvez simplement la ligne qui va comme ceci :

MaxDistance = MathFloor(MathAbs((FastMACurrent-SlowMACurrent)/pPoint)) ;

et remplacez le FastMACurrent par Close[1] (pour la clôture de la première barre fermée) ou Close[0] (pour la clôture de la barre encore ouverte).
 

Cher Mladen, pourriez-vous vérifier pourquoi le filtre temporel ne fonctionne pas ? Vous voyez des lignes verticales rouges sur le graphique, là où il n'est pas censé trader mais où il a tradé. Dans Ea, j'ai configuré la négociation à certaines heures seulement. Merci beaucoup.

mladen:
Sachin

Trouvez simplement la ligne qui va comme ceci :

MaxDistance = MathFloor(MathAbs((FastMACurrent-SlowMACurrent)/pPoint)) ;

et remplacez le FastMACurrent par Close[1] (pour la clôture de la première barre fermée) ou Close[0] (pour la clôture de la barre encore ouverte).
Dossiers :
untitled.png  28 kb
untitled_1.png  29 kb
 

Salut Mladen,

Je n'ai pas pu compiler le code mql4 à cause des erreurs suivantes :

extern string Pivot.Setting = "---------- Pivot Filter Setting" ;

extern bool Use.Pivot.Filter = false ;

==> '.' - point-virgule attendu MACrossEAV1.5.mq4 77 28 if(Use.Pivot.Filter==true)

==> 'Use' - identifiant non déclaré MACrossEAV1.5.mq4 458 7

Pivot' - Type de structure ou de classe attendu MACrossEAV1.5.mq4 458 11

Filter' - struct ou class type attendu MACrossEAV1.5.mq4 458 17

Qu'est-ce que j'ai fait de mal ?

Merci pour votre aide

 
StephFX:
Salut Mladen,

Je n'ai pas pu compiler le code mql4 à cause des erreurs suivantes :

extern string Pivot.Setting = "---------- Pivot Filter Setting" ;

extern bool Use.Pivot.Filter = false ;

==> '.' - point-virgule attendu MACrossEAV1.5.mq4 77 28 if(Use.Pivot.Filter==true)

==> 'Use' - identifiant non déclaré MACrossEAV1.5.mq4 458 7

Pivot' - Type de structure ou de classe attendu MACrossEAV1.5.mq4 458 11

Filter' - struct ou class type attendu MACrossEAV1.5.mq4 458 17

Qu'est-ce que j'ai fait de mal ?

Merci pour votre aide

StephFX

Enlevez le "." du nom de la variable

Vous pouvez le remplacer par "_" par exemple et vous aurez alors :

extern string Pivot_Setting = "---------- Pivot Filter Setting" ;

extern bool Use_Pivot_Filter = false ;

et ceci

if(Use_Pivot_Filter==true)

et alors tout se compile bien

 

Bonjour à tous,

Comme je suis en train d'essayer une stratégie martingale, j'ai essayé de faire en sorte que "STOP AND REVERSE" ne fonctionne que lorsque le dernier trade était gagnant.

int histotal=OrdersHistoryTotal() ; if (histotal>0)

{

for(int count=histotal-1;count>=0;count--)

{

if(OrderSelect(count,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)

{

si(OrderProfit()>0)

{

if(StopAndReverse==true && subTotalTrade()>0)

{

if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true))

{

subCloseOrder() ;

si(subTotalTrade()>0) subCloseOrder() ;

si(subTotalTrade()>0) subCloseOrder() ;

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !") ;

}

}

}

}

}

}

}

Cependant, cela ne semble pas fonctionner. Il s'arrête et s'inverse même si la dernière transaction était une perte. Avez-vous des suggestions ?

Nous vous en remercions.

 
BlackCoq:
Bonjour à tous,

Comme j'essaie une stratégie martingale, j'ai essayé de faire en sorte que "STOP AND REVERSE" ne fonctionne que lorsque la dernière transaction a été gagnante.

Cependant, cela ne semble pas fonctionner. Il s'arrête et s'inverse même si la dernière transaction est une perte. Avez-vous des suggestions ?

Merci !

Vous ne vérifiez pas l'heure de l'ordre. Vous devez également vérifier l'heure de clôture de l'ordre, et l'ordre dont l'heure de clôture est la plus élevée est celui dont vous voulez vérifier le profit.

 
mladen:
Vous ne vérifiez pas l'heure de l'ordre. Vous devez également vérifier l'heure de clôture de l'ordre, et l'ordre dont l'heure de clôture est la plus élevée est celui dont vous voulez vérifier le profit.

Le fait est que j'utilise un code très similaire pour le système martingale qui fonctionne parfaitement :

//|---------martingale

int martingalefactor()

{

int histotal=OrdersHistoryTotal() ;

si (histotal>0)

{

for(int cnt=histotal-1;cnt>=0;cnt--)

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)

{

si(OrderProfit()<0)

{

lotfactor=lotsfactor*multiplicateur ;

return(lotfactor) ;

}

sinon

{

lotfactor=facteur de lot initial ;

if(lotfactor<=0)

{

lotfactor=1 ;

}

return(lotfactor) ;

}

}

}

}

}

return(lotfactor) ;

}

Puisque cela fonctionne pour la martingale, cela ne devrait-il pas fonctionner aussi maintenant ?

 
BlackCoq:
Le fait est que j'utilise un code très similaire pour le système martingale qui fonctionne parfaitement : Puisque cela fonctionne pour la martingale, cela ne devrait-il pas fonctionner aussi maintenant ?

Essayez d'utiliser quelque chose comme ceci :

double GetLastPL()

{

double TempLastOrderProfit = 0;

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();

TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission();

}

}

return(TempLastOrderProfit);

}

Il vous renverra le montant exact du profit (ou de la perte) du dernier ordre.

 
mladen:
Essayez d'utiliser une fonction comme celle-ci : elle vous renverra le montant exact du bénéfice (ou de la perte) du dernier ordre.

Merci pour votre aide, Mladen. J'ai un peu modifié le code jusqu'à ce qu'il compile sans erreur, mais l'EA s'arrête toujours et s'inverse après une perte. Voici le code exact que j'utilise maintenant :

{

double TempLastOrderProfit = 0 ;

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() ;

}

}

if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0)

{

if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true))

{

subCloseOrder() ;

si(subTotalTrade()>0) subCloseOrder() ;

si(subTotalTrade()>0) subCloseOrder() ;

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !") ;

}

}

}

double GetLastPL() Me donne l'erreur suivante : '(' - définition de fonction inattendue.

Raison: