Comment coder ? - page 283

 

Aide sur les attentes mathématiques, s'il vous plaît

Bonjour

Il semble que je me sois un peu trompé.

J'essaie d'utiliser une formule d'espérance dans mon EA. J'ai la formule 1-avgwin/avgloss*system accuracy+1 et cela fonctionne bien, mais je voudrais savoir comment calculer et afficher la différence entre l'ordre et le StopLoss, par ex.

OP_SELLSTOP 1.63406

StopLoss 1.63603

1.63406 - 1.63603 = -0.00197 Je pense que cela doit être un nombre positif.

Une espérance de 1.45

Donc pour calculer le TakeProfit -0.00197 * 1.45 = -0.00285

Placez le TP à OP_SELLSTOP 1.63406 - 1.63121

et vice versa pour la position longue

Tout cela fait partie de ce fil de discussion https://www.mql5.com/en/forum/178980 et si vous jetez un coup d'œil à la feuille Excel, vous verrez que j'y suis presque.

Toute aide serait la bienvenue.

Salutations Beno

 
Beno:
Bonjour

J'ai l'impression de m'être un peu trompé.

J'essaie d'utiliser une formule d'espérance dans mon EA. J'ai la formule 1-avgwin/avgloss*system accuracy+1 et cela fonctionne bien, mais je voudrais savoir comment calculer et afficher la différence entre l'ordre et le StopLoss, par ex.

OP_SELLSTOP 1.63406

StopLoss 1.63603

1.63406 - 1.63603 = -0.00197 Je pense que cela doit être un nombre positif.

Une espérance de 1.45

Donc pour calculer le TakeProfit -0.00197 * 1.45 = -0.00285

Placez le TP à OP_SELLSTOP 1.63406 - 1.63121

et vice versa pour la position longue

Tout cela fait partie de ce fil de discussion https://www.mql5.com/en/forum/178980 et si vous jetez un coup d'œil à la feuille Excel, vous verrez que j'y suis presque.

Toute aide serait la bienvenue.

Santé Beno

La méthode la plus simple est de ne pas penser à cela et d'utiliser :

double MathAbs(double valeur)

MathAbs - Documentation MQL4

Salutations

 

Bonjour CRN

Merci pour votre réponse, c'est ce que j'ai essayé.

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Je pense que c'est correct mais il n'y a que des impressions PipSL 15769.68328362

1 2011.01.04 00:00 vendre stop 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

2 2011.01.07 08:20 vendre 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

3 2011.01.07 08:20 modifier 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 clôture au stop 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

et je demande la différence réelle entre la vente et le SL

 

Quelqu'un peut m'aider.

Bonjour et joyeux Noël à tous.

Tout d'abord, je suis un nouveau venu sur ce forum. J'ai un problème avec l'EA et quelqu'un peut-il le résoudre pour moi ? Le problème est de savoir comment configurer cet EA pour le trading réel et l'EA est juste de couleur grise sur mon trade en direct.

Voici la pièce jointe :

spielershedge_library.mqh

spielershedge_pipstar.mq4

spielershedge_ea_v2.8.1.ex4

spielershedge_divergence_v5.1.ex4

-Bien qu'il s'agisse d'un ancien logiciel, je pense que nous pouvons partager et prendre quelque chose qui sera bénéfique pour nous tous.

-Je viens de trouver ceci dans Hedge trading spieler system derived from futures spread trading - Page 193 @ Forex Factory ( SpielersHedge PipStar.mq4 ) et le reste dans Hedge trading spieler system derived from futures spread trading - Page 87 @ Forex Factory.

-Désolé pour mon mauvais anglais.

P/S : Je suis très apprécié pour les leçons, les guides, les commentaires et les critiques de vous tous pour mon amélioration. Je crois que plus nous donnons notre connaissance, plus nous gagnons la connaissance.

 
Beno:
Bonjour CRN

Merci pour la réponse, c'est ce que j'ai essayé.

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Je pense que c'est juste, mais il ne fait qu'imprimer PipSL 15769.68328362

1 2011.01.04 00:00 vendre stop 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

2 2011.01.07 08:20 vendre 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

3 07.01.2011 08:20 modifier 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 fermer au stop 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

et je demande la différence réelle entre la vente et le SL.

Si vous avez besoin d'utiliser iClose(0,0,0)-OrderStopLoss().

mais sélectionnez d'abord le bon ordre par OrderSelect ;

Salutations

 

Filtre temporel avec CloseAll - Aide, s'il vous plaît

Bonjour

J'ai un filtre temporel qui fonctionne sur l'EA mais j'ai essayé d'y attacher un closeall pour que si le temps est égal au temps de fermeture, le closeall ouvre des positions.

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

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

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

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}
 

aidez-moi s'il vous plaît

extern int BuyStopTakeProfit=10;

extern int BuyStopSL=1000;

comment coder

si BuyStopTakeProfit Hit TakeProfit, Supprimer tous les ordres en attente

s'il vous plaît, quelqu'un peut m'aider

 

Aide !!!! SVP !!!! fonction iCustom

Aide,

J'ai tout essayé pour que mon C_EA_rev6.mq4 appelle le tampon quelconque de l'indicateur personnalisé VSATEXTSIGNALS.mq4. J'ai utilisé la fonction iCustom mais elle renvoie toujours 2147483647 qui est un code d'erreur. L'indicateur personnalisé place des signaux de texte sur le graphique en se basant sur des techniques d'analyse de propagation de volume. L'indicateur personnalisé fonctionne bien lorsque je l'attache à un graphique. J'ai passé d'innombrables heures sur ce problème et j'ai essayé toutes les combinaisons que je connais. Toute aide serait grandement appréciée. J'ai également une question : peut-on utiliser la fonction iCustom sur un indicateur personnalisé qui appelle un script ou un fichier .dll ?

Voir les pièces jointes pour le code de l'indicateur et de l'EA.

Merci,

cmfxtrader

Dossiers :
 
cmfxtrader:
Aide,

J'ai tout essayé pour que mon C_EA_rev6.mq4 appelle le tampon quelconque de l'indicateur personnalisé VSATEXTSIGNALS.mq4. J'ai utilisé la fonction iCustom mais elle renvoie toujours 2147483647, ce qui est un code d'erreur. L'indicateur personnalisé place des signaux de texte sur le graphique en se basant sur des techniques d'analyse de propagation de volume. L'indicateur personnalisé fonctionne bien lorsque je l'attache à un graphique. J'ai passé d'innombrables heures sur ce problème et j'ai essayé toutes les combinaisons que je connais. Toute aide serait grandement appréciée. J'ai également une question : peut-on utiliser la fonction iCustom sur un indicateur personnalisé qui appelle un script ou un fichier .dll ?

Voir les pièces jointes pour le code de l'indicateur et de l'EA.

Merci,

cmfxtrader

Hey,

Le problème est que pendant que vous essayez de lire le tampon de l'indicateur, il sort des messages texte, qui ne sont pas des tampons. C'est pourquoi vous obtenez la valeur 2147483647 qui est EMPTY_VALUE et non une erreur.

Quoi qu'il en soit, je suppose que vous souhaitez automatiser les signaux de cet indicateur. Il y a une solution simple pour cela. L'indicateur est déclaré avoir 7 buffers (#property indicator_buffers 7) mais il n'en utilise que 5. Les indicateurs peuvent utiliser un maximum de 8 buffers. Cela signifie que vous pouvez déclarer un autre tampon supplémentaire juste pour vos calculs et le remplir de messages d'identification. Vous trouverez les numéros des messages dans la fonction TextOutput. Il suffit d'ajouter des numéros à votre tampon en fonction du message affiché. Par exemple, si le texte est : "UPTHRUST / Weakness_" alors ajoutez 1 à votre tampon, si le message est PSEUDO UPTHRUST / Weakness_ alors ajoutez 4 et ainsi de suite. L'index du tampon sera le même que la valeur de la variable "i".

Pour votre deuxième question : vous pouvez toujours utiliser la fonction iCustom pour un indicateur (pas un script) et lire les valeurs si elles remplissent les tampons déclarés dans l'indicateur. Par exemple, si l'indicateur dessine des lignes, vous pouvez lire les valeurs des lignes, car pour dessiner quelque chose (sauf les étiquettes), l'indicateur doit remplir des tampons. Si l'indicateur doit créer des objets graphiques (comme celui que vous avez joint) alors vous devrez : a) lire les valeurs des objets graphiques, ou b) recoder l'indicateur (comme je l'ai suggéré ci-dessus). Cela n'a pas d'importance si l'indicateur utilise une DLL ou non - il a juste besoin de remplir le tampon correctement pour lire ses valeurs depuis la fonction iCustom.

 
Beno:
Bonne journée

J'ai un filtre de temps qui fonctionne sur l'EA mais j'ai essayé d'y attacher un closeall pour que si le temps est égal au temps de fermeture, alors le closeall ouvre des positions.

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

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

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

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}

Essayez de vérifier cette partie :

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0) ;

l'autre partie du code pourrait être plus simple, mais elle devrait fonctionner.

Cependant, si vous quittez le script avant de fermer toutes les parties, cela ne fonctionnera pas, et il semble que le script le fasse.

Regardez cette partie par exemple :

(fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday) return(0) ;

En anglais, cela signifie : si c'est vendredi, et que le filtre friday est activé, et que la marque de temps a été dépassée (par exemple, l'heure de fin est 18.00 et il est 18.01), alors return(0).

Cela devrait être : si c'est vendredi, et que le filtre du vendredi est ON, et que le TimeMark a été dépassé CLOSE ALL et (ex. l'heure de fin est 18.00 et c'est 18.01) alors return(0).