Problème de commandes multiples - page 3

 
luisneves:


Salut Kronin,

Oui, j'ai beaucoup à apprendre.....Comprenez maintenant que lorsqu'il y a un besoin d'accéder à une valeur depuis l'extérieur d'une fonction qui doit être à Global.

Ce n'est pas vrai et c'est souvent une mauvaise idée.

Une partie de la raison de faire une partie de votre code dans une fonction est de pouvoir réutiliser ce code. Si la fonction est codée en dur pour travailler avec des variables globales spécifiques, elle peut devenir moins flexible. Vous devriez envisager de passer des variables à la fonction définie par l'utilisateur... n'utilisez pas toujours des variables déclarées globalement. Par exemple.. :

//+--------------------------------------------------------------------------------+
//| ToStr function - calls DoubleToString (double, Digits) and returns the string  |
//+--------------------------------------------------------------------------------+
string ToStr(double ValueToString)
   {
   return (DoubleToStr(ValueToString, Digits));
   }

//+--------------------------------------------------------------------------------+

... ceci n'utilise pas une variable globale déclarée, mais la variable qui lui est passée lors de son appel... ...

Print("Bid price is: ", ToStr(Bid) );
 
luisneves:


Salut Kronin,

Oui, j'ai beaucoup à apprendre....Maintenant comprenez que lorsqu'il y a un besoin d'accéder à une valeur depuis l'extérieur d'une fonction qui doit être à Global.

Les valeurs qui sont à l'extérieur sont multipliées par 10 parce que l'EA doit aussi fonctionner sur des courtiers à 5 chiffres. J'utilise ce bloc de code pour obtenir cela automatiquement, mais je reçois un conseil de WHRoeder qui n'est pas compatible avec les métaux.

L'écart de la paire pourrait être variable. C'est pourquoi j'utilise un code pour sortir du niveau d'arrêt.

En ce qui concerne ce problème "Mais j'ai ajusté vos paramètres d'entrée pour que tous les ordres ne s'ouvrent pas à peu près en même temps. Vous devez peut-être vérifier les paramètres par défaut."

Pour autant que je puisse voir (désolé si ce n'est pas le cas...), OpenDistance maintenir comme 2 pips et ReturnDistance est maintenant avec 2 aussi. Ce que je vois en ce moment, c'est que l'ordre s'ouvre mais pas avec une différence de 2 pips. Cela fonctionne avec un testeur sur la plateforme d'un courtier ECN (IC Markets). Cela peut-il avoir une importance ?

En fait, les ordres ne s'ouvrent pas en même temps, mais il semble que la distance d'ouverture et la distance de retour ne sont pas prises en compte pour obtenir la bonne distance pour ouvrir les ordres.

Vous avez dans le code que ;

J'ai inclus la ligne en gras pour appeler la fonction OpenOppositeOrder et ici je ne suis pas sûr que ce soit correct. De l'autre côté, je ne vois pas où est la comparaison du tick actuel avec le dernier tick qui s'est produit 2 pips avant (OpenDistance).

Désolé si je commence à vous ennuyer avec mes problèmes.

Meilleures salutations

Luis



Bonjour Kronin,

J'ai juste pris plus d'attention pourquoi avoir demandé quel est le spread et juste chercher le testeur que quelque chose ne va pas. Ici l'écart est de 50 (5 chiffres) donc 5 en fait. Hummm... Je vais redémarrer la plateforme et confirmer.

Luis

 
RaptorUK:

Ce n'est pas vrai et c'est aussi souvent une mauvaise idée.

Une partie de la raison de transformer une partie de votre code en une fonction est de pouvoir réutiliser ce code. Si la fonction est codée en dur pour fonctionner avec des variables globales spécifiques, elle peut devenir moins flexible. Vous devriez envisager de passer des variables à la fonction définie par l'utilisateur . . . n'utilisez pas toujours les variables déclarées globalement. Par exemple :

... ceci n'utilise pas une variable globale déclarée, mais la variable qui lui est passée lors de son appel... ...


Salut RaptorUK.

Merci de votre intervention pour me maintenir dans la bonne direction...

A propos, avez-vous entendu quelque chose comme ce que j'ai mentionné concernant le problème avec le Tester, c'est-à-dire qu'en ce moment le spread est de 50 alors que vendredi il ne l'était pas ?

Meilleures salutations

Luis

 
luisneves:


Salut RaptorUK.

Merci de votre intervention pour me maintenir dans la bonne direction...

Meilleures salutations

Luis

Oui, l'idée de la fonction n'était pas vraiment de les déclarer tous comme void..... J'ai juste supprimé la déclaration dans votre void MM() pour LotSize pour laisser l'EA trader à nouveau... - Je pensais que nous en reparlerions plus tard... :-)

Concernant le point "ne pas ouvrir sur un niveau de 2 pips".
Par exemple, je n'ai pas de données tick pour tester, et le spread est supérieur à 2 pips (je pourrais l'ajuster, mais à quoi cela servirait-il, si je n'ai pas de données tick ?) Tout cela fait qu'il est difficile de tester quelque chose avec des arrêts fermés fiables.


16:21:09 _help_53198_markettorderdecnqv80 entrées : EquityPercent=1 ; FixedLotSize=0.01 ; Multiplier=2 ; LotDigits=2 ; StopLoss=50 ; TakeProfit=20 ; TrailingStop=2 ; MinimumProfit=3 ; Slippage=3 ; OpenDistance=2 ; ReturnDist=1 ; MinStop=1 ; MagicNumber=8012013 ; MaxOrders=7 ;
EURUSD,M1 : ouvert #1 acheter 0.01 EURUSD à 1.43310 ok
EURUSD,M1 : ordre d'achat initial placé # 1
EURUSD,M1 : modify #1 buy 0.01 EURUSD at 1.43310 sl : 1.42810 tp : 1.43510 ok
EURUSD,M1 : ouvrir #2 vendre 0.01 EURUSD à 1.43257 ok
EURUSD,M1 : Ordre de vente opposé placé # 2
EURUSD,M1 : modifier #2 vendre 0.01 EURUSD à 1.43257 sl : 1.43757 tp : 1.43057 ok
EURUSD,M1 : ouvrir #3 acheter 0.01 EURUSD à 1.43283 ok
EURUSD,M1 : Ordre d'achat opposé placé # 3
EURUSD,M1 : modifier #3 achat 0.01 EURUSD à 1.43283 sl : 1.42783 tp : 1.43483 ok
EURUSD,M1 : ouvrir #4 vendre 0.01 EURUSD à 1.43230 ok
EURUSD,M1 : Ordre de vente opposé placé # 4
EURUSD,M1 : modify #4 sell 0.01 EURUSD at 1.43230 sl : 1.43730 tp : 1.43030 ok
EURUSD,M1 : ouvrir #5 acheter 0.01 EURUSD à 1.43280 ok
EURUSD,M1 : Ordre d'achat opposé placé # 5
EURUSD,M1 : modifier #5 achat 0.01 EURUSD à 1.43280 sl : 1.42780 tp : 1.43480 ok
EURUSD,M1 : ouvrir #6 vendre 0.01 EURUSD à 1.43200 ok
EURUSD,M1 : Ordre de vente opposé placé # 6
EURUSD,M1 : modifier #6 vendre 0.01 EURUSD à 1.43200 sl : 1.43700 tp : 1.43000 ok
EURUSD,M1 : ouvrir #7 acheter 0.01 EURUSD à 1.43250 ok
EURUSD,M1 : Ordre d'achat opposé placé # 7
EURUSD,M1 : modify #7 buy 0.01 EURUSD at 1.43250 sl : 1.42750 tp : 1.43450 ok
EURUSD,M1 : modifier #7 achat 0.01 EURUSD à 1.43250 sl : 1.43267 tp : 1.43450 ok
EURUSD,M1 : modifier #7 achat 0.01 EURUSD à 1.43250 sl : 1.43283 tp : 1.43450 ok
EURUSD,M1 : modifier #3 achat 0.01 EURUSD à 1.43283 sl : 1.43300 tp : 1.43483 ok
EURUSD,M1 : modifier #5 achat 0.01 EURUSD à 1.43280 sl : 1.43300 tp : 1.43480 ok
EURUSD,M1 : modifier #7 achat 0.01 EURUSD à 1.43250 sl : 1.43300 tp : 1.43450 ok
Testeur : stop loss #3 à 1.43300 (1.43300 / 1.43340)
Testeur : stop loss #5 à 1.43300 (1.43300 / 1.43340)
Testeur : stop loss #7 à 1.43300 (1.43300 / 1.43340)
EURUSD,M1 : LastClosedTicket=7
EURUSD,M1 : L'ordre avec ticketnr : 7 a atteint le SL ! Fermez tous les ordres ouverts
EURUSD,M1 : close #6 vendre 0.01 EURUSD à 1.43200 sl : 1.43700 tp : 1.43000 au prix de 1.43340
EURUSD,M1 : close #4 vendre 0.01 EURUSD à 1.43230 sl : 1.43730 tp : 1.43030 au prix de 1.43340
EURUSD,M1 : close #2 vendre 0.01 EURUSD à 1.43257 sl : 1.43757 tp : 1.43057 au prix de 1.43340
EURUSD,M1 : clôture #1 achat 0.01 EURUSD à 1.43310 sl : 1.42810 tp : 1.43510 au prix de 1.43300

De mon point de vue, cela fait ce que vous voulez. Je n'ai jamais changé votre calcul pour OpenOpposite ou ouvrir l'ordre initial.

 
kronin:

Oui, l'idée de la fonction n'était pas vraiment de les déclarer tous comme void..... J'ai juste supprimé la déclaration dans votre void MM() pour LotSize afin de permettre à l'EA de trader à nouveau... - Je pensais que nous en reparlerions plus tard... :-)

Concernant le point "ne pas ouvrir sur un niveau de 2 pips".
Par exemple, je n'ai pas de données tick pour tester, et le spread est supérieur à 2 pips (je pourrais l'ajuster, mais à quoi cela servirait-il, si je n'ai pas de données tick ?) Tout cela fait qu'il est difficile de tester quelque chose avec des arrêts fermés fiables.


16:21:09 _help_53198_markettorderdecnqv80 entrées : EquityPercent=1 ; FixedLotSize=0.01 ; Multiplier=2 ; LotDigits=2 ; StopLoss=50 ; TakeProfit=20 ; TrailingStop=2 ; MinimumProfit=3 ; Slippage=3 ; OpenDistance=2 ; ReturnDist=1 ; MinStop=1 ; MagicNumber=8012013 ; MaxOrders=7 ;
EURUSD,M1 : ouvert #1 acheter 0.01 EURUSD à 1.43310 ok
EURUSD,M1 : ordre d'achat initial placé # 1
EURUSD,M1 : modify #1 buy 0.01 EURUSD at 1.43310 sl : 1.42810 tp : 1.43510 ok
EURUSD,M1 : ouvrir #2 vendre 0.01 EURUSD à 1.43257 ok
EURUSD,M1 : Ordre de vente opposé placé # 2
EURUSD,M1 : modifier #2 vendre 0.01 EURUSD à 1.43257 sl : 1.43757 tp : 1.43057 ok
EURUSD,M1 : ouvrir #3 acheter 0.01 EURUSD à 1.43283 ok
EURUSD,M1 : Ordre d'achat opposé placé # 3
EURUSD,M1 : modifier #3 achat 0.01 EURUSD à 1.43283 sl : 1.42783 tp : 1.43483 ok
EURUSD,M1 : ouvrir #4 vendre 0.01 EURUSD à 1.43230 ok
EURUSD,M1 : Ordre de vente opposé placé # 4
EURUSD,M1 : modify #4 sell 0.01 EURUSD at 1.43230 sl : 1.43730 tp : 1.43030 ok
EURUSD,M1 : ouvrir #5 acheter 0.01 EURUSD à 1.43280 ok
EURUSD,M1 : Ordre d'achat opposé placé # 5
EURUSD,M1 : modifier #5 achat 0.01 EURUSD à 1.43280 sl : 1.42780 tp : 1.43480 ok
EURUSD,M1 : ouvrir #6 vendre 0.01 EURUSD à 1.43200 ok
EURUSD,M1 : Ordre de vente opposé placé # 6
EURUSD,M1 : modifier #6 vendre 0.01 EURUSD à 1.43200 sl : 1.43700 tp : 1.43000 ok
EURUSD,M1 : ouvrir #7 acheter 0.01 EURUSD à 1.43250 ok
EURUSD,M1 : Ordre d'achat opposé placé # 7
EURUSD,M1 : modify #7 buy 0.01 EURUSD at 1.43250 sl : 1.42750 tp : 1.43450 ok
EURUSD,M1 : modifier #7 achat 0.01 EURUSD à 1.43250 sl : 1.43267 tp : 1.43450 ok
EURUSD,M1 : modifier #7 achat 0.01 EURUSD à 1.43250 sl : 1.43283 tp : 1.43450 ok
EURUSD,M1 : modifier #3 achat 0.01 EURUSD à 1.43283 sl : 1.43300 tp : 1.43483 ok
EURUSD,M1 : modifier #5 achat 0.01 EURUSD à 1.43280 sl : 1.43300 tp : 1.43480 ok
EURUSD,M1 : modifier #7 achat 0.01 EURUSD à 1.43250 sl : 1.43300 tp : 1.43450 ok
Testeur : stop loss #3 à 1.43300 (1.43300 / 1.43340)
Testeur : stop loss #5 à 1.43300 (1.43300 / 1.43340)
Testeur : stop loss #7 à 1.43300 (1.43300 / 1.43340)
EURUSD,M1 : LastClosedTicket=7
EURUSD,M1 : L'ordre avec ticketnr : 7 a atteint le SL ! Fermez tous les ordres ouverts
EURUSD,M1 : close #6 vendre 0.01 EURUSD à 1.43200 sl : 1.43700 tp : 1.43000 au prix de 1.43340
EURUSD,M1 : close #4 vendre 0.01 EURUSD à 1.43230 sl : 1.43730 tp : 1.43030 au prix de 1.43340
EURUSD,M1 : close #2 vendre 0.01 EURUSD à 1.43257 sl : 1.43757 tp : 1.43057 au prix de 1.43340
EURUSD,M1 : clôture #1 achat 0.01 EURUSD à 1.43310 sl : 1.42810 tp : 1.43510 au prix de 1.43300

De mon point de vue, cela fait ce que vous voulez. Je n'ai jamais changé votre calcul pour OpenOpposite ou ouvrir l'ordre initial.


Salut Kronin,

Je suis en train de télécharger une autre plateforme d'un autre courtier et j'attendrai pour la tester à nouveau et vous faire part des résultats.

Merci encore

Luis

 

Bonjour Kronin,

Je viens de confirmer que dans Tester, le spread est passé à 5 pips (50). Donc aujourd'hui, dans Tester, votre code semble fonctionner parfaitement, maintenant je l'ai mis dans un compte de démonstration ECN et nous verrons.

Meilleures salutations

Luis

 

Salut Kronin,

Une question ;

Lorsque l'EA démarre, ne devrait-il pas attendre que le prix dévie de 2 pip avant d'ouvrir le premier ordre ?

Quand le deuxième ordre a la condition pour s'ouvrir, il s'ouvre au bon endroit.

Meilleures salutations

Luis

 
luisneves:

Salut Kronin,

Une question ;

Lorsque l'EA démarre, ne devrait-il pas attendre que le prix dévie de 2 pip avant d'ouvrir le premier ordre?

Quand le deuxième ordre a la condition pour s'ouvrir, il s'ouvre au bon endroit.

Meilleures salutations

Luis

Bonjour Luis

Eh bien, probablement que ça devrait selon la stratégie, mais bien sûr ça ne le fait pas selon le code...

if(OpenDistance*pt && BuyAllowed) //<-- this doesn't make any sense.

Le texte ci-dessus est lu comme if(2*0.0001 && true) . Toute expression numérique différente de 0 est interprétée comme vraie. Donc l'expression est toujours vraie si BuyAllowed est vrai.

Je suis désolé, je n'ai pas prêté attention à la première ouverture d'une série et comme ce n'est que 2 pips, je n'ai rien remarqué d'inhabituel.

Essayez ceci :

//global scope
double BuyTrigger,SellTrigger;

//init function
BuyTrigger=Ask+OpenDistance*pt;
SellTrigger=Bid-OpenDistance*pt;

//start function
  OTCurrentTick=OrdersTotal();                   //reinit OrderTotal   <<-- this is already there, place the 4 lines below after this line
  if(OTCurrentTick==0&&OTLastTick>0){
     BuyTrigger=Ask+OpenDistance*pt;
     SellTrigger=Bid-OpenDistance*pt;
  }

if(Ask>BuyTrigger && BuyAllowed)                // <-- use this instead of if(OpenDistance*pt && BuyAllowed)

if(Bid<SellTrigger && SellAllowed)
 

Bonjour Kronin,

Désolé de vous ennuyer avec mes limites dans la compréhension du code, néanmoins il n'est pas trop tard pour apprendre et j'essaie de faire de mon mieux pour entrer dans le code que vous avez si gentiment fourni.

En ce moment, je teste les meilleurs paramètres à utiliser et je vais introduire votre dernier code mis à jour.

Merci d'avance de continuer à me soutenir dans ces questions( aventures...je veux dire....)

Luis

 

Salut Kronin,

Votre modification fonctionne. Vous avez limité le nombre maximum d'ordres, mais est-il possible de les fermer tous à la place ?

J'ai essayé de le faire avec le code suivant, mais cela ne semble pas fonctionner.

if(LastClosedTicket>0|| OrdersTotal()>= MaxOrders)

Meilleures salutations

Luis

Raison: