Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 749

 
Vinin:

Cette formule est assez facile à adapter aux besoins. Vous devez juste prendre en compte le lot minimum.

Cela semble un peu différent

lot=Min_Lot+lotstep*MathRound((AccountBalance()-X)*0.001/lotstep);

Où X - Solde d'ouverture du lot minimal,

Mais nous devons encore vérifier le lot minimum.

Pourquoi avons-nous besoin de toutes ces complexités, de X qui doivent être calculés séparément ? De plus, nous aurons besoin de vérifications supplémentaires...

Ne serait-il pas plus simple de vérifier directement et honnêtement la validité et l'acceptabilité de toutes les valeurs de la formule, puis de la calculer honnêtement ?

À propos, MathRound() arrondit à l'entier le plus proche, c'est-à-dire qu'il peut facilement surestimer à tort, ce qui peut entraîner des conséquences supplémentaires.

 

Pauvre petit gars.

 
simpleton:
Pas toi.
 
Bonjour. J'essaie de calculer le StopLoss à partir du bas et du haut de la première barre, après avoir placé un ordre en attente, pour l'achat et la vente respectivement. Mais je n'ai obtenu aucun résultat, seulement 130 erreurs, c'est tout. Merci d'avance.
if(ticket>0)
           {
            SL = NormalizeDouble(Low[1] - StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...
//+-------------------------------------------------------------------------+
if(ticket>0)
           {
SL = NormalizeDouble(High[1] + StopLoss*Point, Digits);
            {
               if(OrderModify(ticket, OrderOpenPrice(), SL, 0, 0))
...                     																							
 
Tu normalises la mauvaise chose.
 
Petiyashaket:
Si vous pouvez l'expliquer en une ligne de code et avec des commentaires, comme dans mon code précédent, je vous en serai extrêmement reconnaissant.

"J'ai des doutes", et je ne peux m'empêcher de penser qu'il s'agit du mécanisme de mise en cache de l'environnement de marché.

Pour que le terminal n'ait pas à "courir vers le serveur" à chaque occasion, comme OrdersTotal(), OrderSymbol() etc., l'environnement du marché est copié dans un certain cache, qui semble être différent pour chaque script, mais le script ne traite que ce cache. Le cache n'est PAS automatiquement mis à jour pendant toute la durée d'exécution de la fonction principale du script, même après l'exécution réussie de fonctions telles que OrderSend() qui modifient l'environnement du marché sur le serveur. Par conséquent, l'ordre apparaissant dans le script "n'est pas visible", c'est-à-dire qu'il donne l'illusion de son absence. Il ne peut tout simplement pas être détecté dans la boucle for, c'est pourquoi OrderModify() n'est pas appelé. Il s'agit d'une hypothèse qui est née sur la base de vagues doutes et de sentiments incompréhensibles.

Le cache décrit peut être mis à jour de manière forcée en utilisant l'appel RefreshRates(), par exemple, immédiatement après l'appel de OrderSend(). Vérifiez si l'hypothèse est correcte.

Si, entre autres choses, RefreshRates() renvoie vrai, alors c'est une confirmation indirecte supplémentaire de l'hypothèse.

 
Petiyashaket:
Si vous me l'expliquez en une ligne de code et avec des commentaires, comme dans mon code précédent, je vous en serai extrêmement reconnaissant.
Si vous ne le comprenez pas, lisez-le ici. Et ici. Ensuite, faites en sorte que les variables ne perdent pas leur signification à chaque tic et organisez la boucle de manière appropriée.
 
simpleton:

"J'ai des doutes", et je ne peux m'empêcher de penser qu'il s'agit du mécanisme de mise en cache de l'environnement de marché.

Pour que le terminal n'ait pas à "courir vers le serveur" à chaque occasion, comme OrdersTotal(), OrderSymbol() etc., l'environnement du marché est copié dans un certain cache, qui semble être différent pour chaque script, mais le script ne traite que ce cache. Le cache n'est PAS automatiquement mis à jour pendant toute la durée d'exécution de la fonction principale du script, même après l'exécution réussie de fonctions telles que OrderSend() qui modifient l'environnement du marché sur le serveur. Par conséquent, l'ordre apparaissant dans le script "n'est pas visible", c'est-à-dire qu'il donne l'illusion de son absence. Il ne peut tout simplement pas être détecté dans la boucle for, c'est pourquoi OrderModify() n'est pas appelé. C'est l'hypothèse qui a été émise sur la base de vagues doutes et de sentiments peu convaincants.

Le cache décrit peut être mis à jour de manière forcée en utilisant l'appel RefreshRates(), par exemple, juste après l'appel OrderSend(). Vérifiez si l'hypothèse est correcte.

Si, entre autres choses, RefreshRates() renvoie vrai, cela constitue une confirmation indirecte supplémentaire de l'hypothèse.

Prends-tu des drogues ?
 
noob1:
Bonjour. Veuillez me conseiller, si je le sais, j'essaie de calculer un StopLoss à partir du bas et du haut de la première barre, après qu'un ordre en attente soit placé, pour l'achat et la vente respectivement. Mais je n'ai rien obtenu, seulement 130 erreurs et rien d'autre. Merci d'avance.

Vérifiez si OrderOpenPrice() est trop proche de SL, et si les stops sont "du bon côté du prix". Vous pouvez le lire ici:

Les prix StopLoss et TakeProfit ne peuvent pas être trop proches du marché. La distance minimale de stop en pips peut être obtenue en utilisant la fonction MarketInfo() avec le paramètre MODE_STOPLEVEL. L'erreur 130 (ERR_INVALID_STOPS) sera générée en cas d'arrêts erronés ou non normalisés.

Dans ce cas, c'est-à-dire pour un ordre en attente, le "marché" est son "prix ouvert en attente".

 
tara:
Tu normalises la mauvaise chose.
Dans la documentation :
Raison: