Croix universelle MA EA - page 106

 
BlackCoq:
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 GetLastPL() Me donne l'erreur suivante : '(' - function definition unexpected.

BlackCoq

Vous devez effectuer toutes les comparaisons logiques à l'intérieur de la boucle car les fonctions comme OrderProfit() renvoient le profit de l'ordre actuellement sélectionné dans une liste d'ordres fermés. Si ce n'est pas dans la boucle principale (for(int i=OrdersHistoryTotal()-1;i>=0;i--)), alors seul le dernier ordre sélectionné sera testé et cela ne signifie pas que c'est le dernier ordre (metaquotes indique explicitement dans sa documentation que les ordres dans la liste des ordres fermés (ou encore ouverts) ne doivent pas être dans un ordre particulier - il est de la responsabilité des codeurs de vérifier l'ordre).

 
mladen:
BlackCoq Vous devez effectuer toutes les comparaisons logiques à l'intérieur de la boucle car les fonctions comme OrderProfit() renvoient le profit de l'ordre actuellement sélectionné dans une liste d'ordres fermés. Si ce n'est pas dans la boucle principale (for(int i=OrdersHistoryTotal()-1;i>=0;i--)), alors seul le dernier ordre sélectionné sera testé et cela ne signifie pas que c'est le dernier ordre (metaquotes indique explicitement dans sa documentation que les ordres dans la liste des ordres fermés (ou encore ouverts) ne doivent pas être dans un ordre particulier - il est de la responsabilité des codeurs de vérifier l'ordre).

Après de nombreuses heures passées à échouer dans cette tâche apparemment facile, j'ai décidé d'étudier beaucoup plus de programmation avant de continuer. Merci quand même pour votre aide !

Lorsque j'ai essayé cela, l'EA n'a pas ouvert de positions du tout :

{ 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(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]

And with this, it would "stop and reverse" even if last trade was a loss:

[PHP] { 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); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

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

Encore une fois, merci.

 
BlackCoq:
Après de nombreuses heures d'échec avec cette tâche apparemment facile, j'ai décidé d'étudier beaucoup plus de programmation avant de continuer. Merci quand même pour votre aide !

Lorsque j'ai essayé cela, l'EA n'a pas ouvert de positions du tout :

{ 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(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]

And with this, it would "stop and reverse" even if last trade was a loss:

[PHP] { 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); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }
Encore une fois, merci.

BlackCoq

Si vous utilisez la fonction que j'ai postée telle quelle, elle vous renverra le profit exact du dernier ordre fermé (il n'est pas nécessaire de modifier quoi que ce soit).

 
mladen:
BlackCoq Si vous utilisez la fonction que j'ai postée telle quelle, elle vous renverra le profit exact du dernier ordre clôturé (il n'est pas nécessaire de modifier quoi que ce soit).

Lorsque j'essaie de copier la fonction, j'obtiens de nombreuses erreurs, quelle que soit la façon dont j'essaie de la modifier.

Ce code :

{

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

{

if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>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 !") ;

}

}

}

}

J'obtiens les erreurs :

Compilation de 'universalMAcrossECNmartingaleSAR.mq4'...

'(' - définition de fonction inattendue (538, 20)

TempLastOrderProfit' - variable non définie (548, 15)

TempLastOrderProfit' - variable non définie (551, 15)

TempLastOrderProfit' - variable non définie (553, 52)

 
BlackCoq:
Lorsque j'essaie de copier la fonction, j'obtiens de nombreuses erreurs, quelle que soit la façon dont j'essaie de la modifier.

Ce code :

{ 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); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();

if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]

Gives me the errors:

[PHP]

Compiling 'universalMAcrossECNmartingaleSAR.mq4'... '(' - function definition unexpected (538, 20)'TempLastOrderProfit' - variable not defined (548, 15)'TempLastOrderProfit' - variable not defined (551, 15)'TempLastOrderProfit' - variable not defined (553, 52)

BlackCoq

Cette fonction doit être collée en dehors de toute autre fonction. Voici une ea très simple qui montre comment elle fonctionne et comment elle doit être utilisée

Dossiers :
 
mladen:
BlackCoq Cette fonction doit être collée en dehors de toute autre fonction. Voici une exemple très simple qui montre comment elle fonctionne et comment l'utiliser.

Je suis sûr que je rate quelque chose ici, mais même si j'essaie de copier la fonction en dehors de toute autre fonction dans l'EA, j'obtiens toujours les erreurs suivantes :

'(' - définition de fonction inattendue (après le double GetLastPL())

'TempLastOrderProfit' - variable non définie (554, 15)

TempLastOrderProfit' - variable non définie (557, 15)

 
BlackCoq:
Je suis sûr que je rate quelque chose ici, mais même si j'essaie de copier la fonction en dehors de toute autre fonction dans l'EA, j'obtiens toujours les erreurs suivantes :

'(' - définition de fonction inattendue (après double GetLastPL())

'TempLastOrderProfit' - variable non définie (554, 15)

'TempLastOrderProfit' - variable non définie (557, 15)

Désolé, mais sans votre code, je n'ai aucune idée de ce que vous faites.

Comme vous pouvez le voir sur ce test EA, il fonctionne sans aucun problème.

 
mladen:
Désolé, mais sans votre code, je n'ai aucune idée de ce que vous faites. Comme vous pouvez le voir sur cette EA de test, elle fonctionne sans aucun problème.

J'obtiens plusieurs erreurs lorsque j'essaie de compiler l'EA que vous avez joint également. Utilisons-nous des versions différentes de MT4 ?

Je joins l'EA auquel j'essaie d'ajouter la fonction avant "stop and reverse".

 
BlackCoq:
J'obtiens plusieurs erreurs lorsque j'essaie de compiler l'EA que vous avez joint. Utilisons-nous des versions différentes de MT4 ? Je joins l'EA auquel j'essaie d'ajouter la fonction avant "stop and reverse".

Si vous utilisez la build 509, remplacez "void start(void)" par "void start()" et vous n'aurez aucune erreur de compilation. Voir les exemples pour les deux builds 509 et 610 (la version du metaeditor pour le build 610 est 887).

J'ai également joint l'EA avec la fonction GetLastPL() déjà attachée. Tout ce que vous avez à faire est de faire un appel à GetLastPL() à un endroit du code où vous souhaitez qu'il vérifie si le profit du dernier ordre était positif ou négatif.

_________________________

PS : il compilera aussi bien dans la build 509 que dans la build 610. En 610, vous obtiendrez 3 avertissements mais ils ne sont pas pertinents pour le fonctionnement de l'EA.

 
mladen:
Si vous utilisez le build 509, remplacez "void start(void)" par "void start()" et vous n'aurez aucune erreur de compilation. Voir les exemples pour les deux builds build 509 et build 610 (la version de metaeditor pour la build 610 est 887)

Joindre également l'EA avec la fonction GetLastPL() déjà attachée à elle. Tout ce que vous avez à faire est de faire un appel à GetLastPL() à un endroit du code où vous souhaitez qu'il vérifie si le profit du dernier ordre était positif ou négatif.

_________________________

PS : il compile aussi bien dans la build 509 que dans la build 610. Dans la version 610, vous obtiendrez 3 avertissements, mais ils ne sont pas pertinents pour le fonctionnement d'EA.

Cela fonctionne parfaitement maintenant. Merci beaucoup pour votre aide et votre patience !

Raison: