[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 779

 
ToLik_SRGV:

La fonction OrderSend a les mauvais prix d'ouverture/de fixation. Cette erreur rend impossible le placement correct des ordres, ce qui signifie que l'EA veut placer plus d'ordres pour une raison quelconque, et ne peut le faire à cause de cette erreur. Veuillez vérifier si les prix des ordres en attente sont normalisés et si tous les ordres sont en place.

Si cela ne vous dérange pas de le regarder avec votre œil de professionnel, il n'y a rien d'autre à voir.

Dossiers :
test_21_3.mq4  16 kb
 
FoxUA:

Si cela ne vous dérange pas de le regarder avec votre œil de professionnel, il n'y a rien d'autre.

Le déballage montre que l'erreur se produit dans le bloc des ordres en attente, vous essayez de les placer à un prix négatif.

 
ToLik_SRGV:

Le déballage a montré que l'erreur se produit dans le bloc de définition des ordres en attente, vous essayez de les placer à un prix négatif.


comment le réparer, à part se taper la tête contre le mur ;) où suis-je allé ?

 
ToLik_SRGV:

Pas selon l'idée. Voici un extrait d'un manuel scolaire :

P.S.
A propos de Petyka, cent ans, et toujours drôle :))))


"... ainsi que les prix d'arrêt déclarés des ordres de marché qui se trouvent dans la zone de gel...".

Il s'avère, cependant, que cela a un effet... et vous devez en tenir compte - j'ai juste besoin de supprimer le niveau de l'ordre stop annoncé sur une position ouverte... Et si vous êtes déjà entré dans la zone de gel, vous n'avez plus qu'à attendre la clôture... ou un pullback...

Merci, mon pote ! !!

ZS. Et à propos de Petya - ici la situation est la même... - Je dis que je mets 1.6 - ça marche, je mets 1.8 - ça ne marche pas... Et même la 1.9 n'aide pas ! !! Quel désordre ! !! C'est horrible. Ooh !
Quels sont les chiffres ? Des litres ou quelque chose comme ça.

 
FoxUA:

Hum, comment le réparer, à part se taper la tête contre le mur ;) où me suis-je perdu ?

Je reconnais les empreintes des fonctions de Kim... Allez sur son fil de discussion - il a un script après chaque fonction pour la vérifier. On ne peut pas être plus clair que ça...
 
artmedia70:
Je reconnais les empreintes des fonctions de Kim... Allez à son agence - il a un script après chaque fonction pour la vérifier. On ne peut pas être plus clair que ça...


oui c'est de sa bibliothèque qu'ils m'ont donné ici, donc ce sont les mêmes scripts que ceux qui sont dans la boîte aux lettres. et je l'ai ajouté pour qu'il n'y ait pas de réaction.

{SetOrder(sy, OP_BUYLIMIT, Lot*3, NormalizeDouble(PrAskLim, Digits), PrAskLim-StopLoss*po, PrAskLim+TakeProfit*po,mn);
    SetOrder(sy, OP_BUYSTOP,  Lot,   NormalizeDouble(PrAskSt, Digits),  PrAskSt-StopLoss*po,  PrAskSt+TakeProfit*po,mn);
    SetOrder(sy, OP_SELLLIMIT,Lot*3, NormalizeDouble(PrBidLim, Digits), PrBidLim+StopLoss*po, PrBidLim-TakeProfit*po,mn);
    SetOrder(sy, OP_SELLSTOP, Lot,   NormalizeDouble(PrBidSt, Digits),  PrBidSt+StopLoss*po,  PrBidSt-TakeProfit*po,mn);
     } 
 
FoxUA:

Hum, comment on soigne ça, à part se taper la tête contre le mur ;) où est-ce que je me suis perdu ?

Allons de l'avant.
Les nombres négatifs entrent dans les variables des fonctions StopLossLastPos() et TakeProfitLastPos() . Ils y apparaissent en raison de l'échec de leur travail, c'est-à-dire que -1 est un signe d'échec pour obtenir la dernière valeur de StopLoss et TakeProfit. Vous ne vérifiez pas le succès de l'obtention des dernières valeurs, donc -1 entre dans votre travail en tant que prix, puis à partir de celui-ci vous comptez les valeurs pour définir les ordres en attente... et ainsi de suite.

Le résultat est un effet boule de neige et une mer de bugs. Maintenant, dans le testeur, je vais voir comment cela fonctionne et je ferai un rapport...


 
ToLik_SRGV:

On avance.
Les nombres négatifs entrent dans les variables des fonctions StopLossLastPos() et TakeProfitLastPos() . Ils apparaissent là en raison d'un échec, c'est-à-dire que -1 est un signe d'échec pour obtenir la dernière valeur de StopLoss et TakeProfit. Vous ne vérifiez pas le succès de l'obtention des dernières valeurs, donc -1 entre dans votre travail en tant que prix, puis à partir de celui-ci vous comptez les valeurs pour définir les ordres en attente... et ainsi de suite.

Le résultat est un effet boule de neige et une mer d'erreurs. Je vais maintenant le regarder dans le testeur et faire un rapport...




Je me demande pourquoi c'est comme ça.

 
FoxUA:

Oui, je me demande pourquoi c'est comme ça.

Je vais signer.
L'erreur est dans la logique. Il s'articule autour de deux ordres de marché. Mais nous avons ici un point subtil : la fonction OrdersTotal() renvoie non pas le nombre total d'ordres ouverts sur le marché, mais tous ceux qui sont sur le marché, ainsi que les ordres en attente qui sont fixés.
Par conséquent, au cours d'une transaction, il arrive un moment où il n'y a pas d'ordres de marché, au moment où les ordres en attente continuent d'être suspendus, c'est-à-dire que OrdersTotal() renvoie plus de 0, en conséquence, votre bloc d'ouverture des ordres de marché if(total_order==0), ils ne peuvent pas s'ouvrir, Mais les nouveaux ordres en attente peuvent l'être (au moment où OrdersTotal() renvoie 2), mais comme il n'y a pas d'ordres au marché, les fonctions StopLossLastPos() et TakeProfitLastPos() renvoient -1, alors que la condition d'ouverture des ordres en attente est if(total_order==2), donc elles captent -1 et l'utilisent comme prix.

 
ToLik_SRGV:

Je vais signer.
Il y a une erreur dans la logique. Il s'articule autour de deux ordres de marché. Mais nous avons ici un point subtil : la fonction OrdersTotal() renvoie non pas le nombre total d'ordres ouverts sur le marché, mais tous ceux qui sont sur le marché, ainsi que les ordres en attente qui sont fixés.
Par conséquent, au cours d'une transaction, il arrive un moment où il n'y a pas d'ordres de marché, au moment où les ordres en attente continuent d'être suspendus, c'est-à-dire que OrdersTotal() renvoie plus de 0, en conséquence, votre bloc d'ouverture des ordres de marché if(total_order==0), ils ne peuvent pas s'ouvrir, Mais les nouveaux ordres en attente peuvent l'être (au moment où OrdersTotal() renvoie 2), mais comme il n'y a pas d'ordres au marché, les fonctions StopLossLastPos() et TakeProfitLastPos() renvoient -1, alors que la condition d'ouverture des ordres en attente est if(total_order==2), donc elles captent -1 et l'utilisent comme prix.


j'ai compris, je vais le changer maintenant. merci beaucoup.
Raison: