Problèmes de fermeture, aidez-nous - page 3

 

Bonjour à tous
Avec l'aide de tous, le symptôme a changé.
L'instruction ....if(OrderSelect(index, SELECT_BY_TICKET) a été changée en..SELECT_BY_POS. Le code est loin d'être correct. Le programme vend et ferme immédiatement après un pip. Le résultat montre qu'il n'y a pas de SL ou TP. Donc pour un contrôle de bon sens, j'ai inséré dans OrderSend le SL et le TP (500) par pièce. Aucun changement. Toutes les exécutions sont à 1 ou 2 pips près. Cela devient intéressant. Je ne sais pas encore pourquoi ! Plus de mille exécutions se produisent sur une barre de 4 heures.
Je vais faire des recherches, mais toute aide sera la bienvenue.

 

Bonjour Ais
Je viens de poster pour constater que tu as posté avant moi. Qu'est-ce que tu as en cours ?

 

Bonjour à nouveau
J'essaie de remanier légèrement le programme pour une meilleure compréhension de la logique
Je voudrais que le programme vous plaise
.

 
Ais wrote >>

Bonjour à nouveau
J'essaie de remodeler légèrement le programme pour une meilleure compréhension de la logique
J'aimerais que le programme puisse vous satisfaire

Bonjour Ais
Vous êtes très gentil. Je vous remercie. Votre temps est précieux. Je suis sûr que le restyle vous plaira.
J'ai débloqué une partie du problème, depuis mon dernier message. Le programme se ferme, mais pas comme je le souhaite.
La clé du problème de fermeture est le fait que je n'ai pas réussi à initialiser correctement l'ATR.
Je vais vous montrer l'avant et l'après de la fermeture de la position de vente.

Alors....if (OrderClosePrice() >= OrderOpenPrice() + (ATR*2)
Maintenant.....if (OrderClosePrice() >= OrderOpenPrice() + (40*Point)...Ceci va fermer la position de vente.

Ce n'est pas ainsi que je voulais que le programme fonctionne. Mais à des fins de test, j'ai inséré le nouveau code.
Cela permet de prouver que le problème se situe au niveau de l'ATR. Il se peut que je n'aie pas initialisé correctement l'ATR.
Pour effectuer un test supplémentaire, j'ai essayé d'insérer l'iATR au lieu d'essayer de construire une nouvelle variable appelée ATR.
Je vous montre comment j'ai essayé de le coder.

if (OrderClosePrice() >= OrderOpenPrice() + ((iATR(NULL,0,20,1)*2)*Point)

Cela n'a pas fonctionné non plus.
Merci encore.
Je suis impatient d'avoir de vos nouvelles.
 

Bonjour Ais
Merci pour cette suggestion. L'idée d'utiliser 365 (annuel) par rapport à my_method, est bien prise. Les tests avec une période de temps plus courte
ne devraient être que pratiques.
J'ai encore beaucoup à apprendre. J'ai enfin compris comment insérer l'ATR, mais je n'arrive pas à le multiplier. Voici un exemple :

Pour l'instant, voici ce que j'ai : ......if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1)))) // =Hard Stop
Cela fonctionne mais ce n'est pas ce que je veux
Je travaille vers ...................if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1) )*2 ),
Cela ne fonctionne pas. J'espère que cela vous démontre, à vous et aux autres, ce que j'ai en tête. L'iATR est multiplié par 2.
Des suggestions pour cela ? ?? Une fois que ce problème sera résolu, je pourrais également diviser par deux l'ATR pour les positions d'entrée.

J'ai essayé une autre méthode, mais elle n'a pas fonctionné... if(OrderClose - OrderOpenPrice - (iATR(NULL,0,20,1)*2)) <= 0)

Merci encore pour votre temps. Je suis sûr qu'il y a beaucoup de gens qui frappent à votre porte pour obtenir de la sagesse.
Au revoir
 

Bonjour Huckleberry,
Je suis parti pour ne faire que la fonction d'ouverture.
Et en ce moment j'essaie de comprendre la logique de la fixation des profits.
Les stops et les prises sont absents de votre OrderSend(), c'est OK, mais la commande de fermeture ne fonctionne qu'en cas de perte.
Et j'aimerais connaître votre avis sur la compréhensibilité du nouveau style de programme, https://www.mql5.com/en/forum/124521/page2.
Au revoir pour le moment,
:)

 

Bonjour Ais
Merci pour votre réponse.
Laissez-moi vous expliquer la raison pour laquelle il n'y a pas de StopLoss ou de TakeProfit.
En n'insérant pas le SL et le TP dans l'OrderSend, le SL se trouve à un endroit différent, sous l'expression....

if (OrderClose >= OrderOpenPrice() + (iATR(NULL,0,20,1))))

Bien que cela fonctionne, ce n'est pas exactement le bon SL. L'exemple est listé dans mon dernier post....

if (OrderClose >= OrderOpenPrice + (iATR(NULL,0,20,1))*2)

Le décalage de l'... iATR, dans l'expression ci-dessus, peut changer d'une barre à l'autre. En utilisant l'OrderSend avec SL et TP, je ne peux pas profiter de ce changement.

Chaque fonction fonctionne pour l'instant, mais je dois apprendre à modifier les fonctions.
Merci pour votre observation et votre question.
Cheers

 

C'est OK de travailler sans SL et TP.
Mais nous avons toujours besoin d'une condition pour fermer l'ordre en cas de profit.
S'il vous plaît, jetez un coup d'œil à la nouvelle fonction "iSignalClose",
https://www.mql5.com/en/forum/124521/page2.
Maintenant, c'est, bien sûr, une condition de SL virtuel.
Mais nous avons toujours besoin d'une condition de TP virtuel.
En attendant votre réponse.
:)

 

J'ai inséré pour le TP virtuel la condition similaire à celle de SL, mais en utilisant un autre facteur.
A l'avenir, il sera facile et pratique d'optimiser ces paramètres.

Pour optimiser, déclarez les paramètres souhaités comme "externes".
Exemple :


////////////////////////////////////////////////////////////////////<         3>
// < 1.1. Data : Input >                                          //<          >
//                                                                //<          >
// < 1.1. Input             7 =       4 i       3 d       - s   > //<          >
// <      1. Strategy       4 =       2 i       2 d       - s  /> //<          >
// <      2. Trading        3 =       2 i       1 d       - s  /> //<          >
// </1.1. Input             7 =       4 i       3 d       - s   > //<          >
//                                                                //<          >
// <      1. Strategy 4 >=========================================//<          >
                    int       iBasePeriod       = 20            ; //<          >
                    int       iBaseBar          = 1             ; //<          >
extern              double    dFactorTP         = 2.0           ; //<          >
extern              double    dFactorSL         = 2.0           ; //<          >
// </     1. Strategy 4 >=========================================//<          >
//                                                                //<          >
// <      2. Trading 3 >==========================================//<          >
                    int       iSlippage         = 1             ; //<          >
                    int       iMagic            = 0             ; //<          >
                    double    dLots             = 0.1           ; //<          >
// </     2. Trading 3 >==========================================//<          >
//                                                                //<          >
//                                                                //<          >
//                                                                //<          >
// </1.1. Data : Input >                                          //<          >
     

Après l'optimisation, remplacez les valeurs originales des paramètres par les valeurs optimisées et supprimez les déclarations "externes".

Exemple d'optimisation pour "A System : Championship 2008 Final Edit" également connu sous le nom de "ACB6", https://www.mql5.com/en/forum/112633/page7#276861 :
Dossiers :
1e.txt  46 kb
1r.txt  49 kb