Demandez ! - page 64

 
ryanklefas:
Je pense que la fonction normalizeDouble vous conviendrait également. J'ai également vu du code qui utilise les fonctions MathFloor et MathCeiling pour accomplir la même chose.

Donc, ce que vous dites, c'est que le calcul devrait fonctionner de la manière dont je l'ai codé dans la section "Variable Begin" comme indiqué ci-dessous :

double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 3) ;

Alors peut-être que mon problème est ailleurs, car lorsque je définis ce qui suit :

extern bool LotSizeManager = True ;

l'EA n'exécute aucune transaction. Lorsque je le règle sur false, il exécute des transactions. Je suppose qu'il n'exécute aucune transaction lorsque cette valeur est True car il y a un problème de calcul.

 
waaustin:
double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 3) ;

double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1) ; // 0 : fulllots, 1 : minilots, 2 : microlots, 3 : jamais utilisé

 
Michel:
double LotSize = NormalizeDouble(Lot_Size_Ratio*((AccountBalance()/1000)), 1) ; // 0 : fulllots, 1 : minilots, 2 : microlots, 3 : jamais utilisé

Vous dites donc que cela dépend de la précision que je souhaite pour la taille de lot. Ainsi, si je veux une précision de l'ordre du microlot, comme 0,75 lot, j'utiliserai une valeur de 2.

 
waaustin:
Vous dites donc que cela dépend de la précision que je souhaite pour la taille de lot. Donc si je veux une précision de microlot, comme 0,75 Lots, alors j'utiliserais une valeur de 2.

Oui, vous avez compris !

Mais assurez-vous que les microlots (2 décimales) sont acceptables pour votre courtier et le type de compte que vous avez.

Je ne sais pas très bien comment IBFX fonctionne avec les mini-comptes, c'est-à-dire si les microlots sur les mini-comptes sont aussi appelés minilots et n'ont qu'une seule décimale. Peut-être que quelqu'un qui utilise IBFX peut répondre ici ?

Quoi qu'il en soit, le mieux est de demander à votre courtier.

 
Michel:
Oui, vous avez compris !

Mais assurez-vous que les microlots (2 décimales) sont acceptables pour votre courtier et le type de compte que vous avez.

Je ne sais pas très bien comment IBFX fonctionne avec les mini-comptes, c'est-à-dire si les microlots sur les mini-comptes sont aussi appelés minilots et n'ont qu'une seule décimale. Peut-être que quelqu'un qui utilise IBFX peut répondre ici ?

Néanmoins, le mieux est de demander à votre courtier.

Merci beaucoup. Le code LotSizing semble fonctionner correctement. Cependant, il semble que j'ai un autre bug dans le code quelque part et je n'arrive pas à le comprendre.

J'ai chargé l'EA sur plus d'une paire, mais il ne place des transactions que sur une seule paire. Le code LotSizing fonctionne bien. Mais, il ne place pas d'autres transactions sur d'autres paires de devises. Cependant, lorsque je définis la valeur suivante :

extern bool LotSizeManager = False ;

l'EA place des transactions pour chaque paire de devises à laquelle l'EA est attaché.

 
waaustin:
Merci beaucoup. Le code LotSizing semble fonctionner correctement. Cependant, il semble que j'ai un autre bug dans le code quelque part et je n'arrive pas à le trouver.

J'ai chargé l'EA sur plus d'une paire, mais il ne place des transactions que sur une seule paire. Le code LotSizing fonctionne bien. Mais, il ne place plus de transactions sur aucune autre paire de devises. Cependant, lorsque je définis la valeur suivante :

extern bool LotSizeManager = False ;

L'EA effectue des transactions pour chaque paire de devises à laquelle l'EA est attaché.

Pas d'inquiétude. J'ai trouvé d'où vient le problème ! Merci pour votre aide.

 

Problème : A l'heure définie par l'utilisateur, l'EA tente de placer un ordre en attente mais le prix actuel est trop proche pour que le courtier accepte l'ordre.

Question : Comment puis-je coder une boucle qui vérifierait l'iOpen de la barre 1 minute chaque minute jusqu'à ce que l'ordre soit accepté ? Je ne suis pas sûr de savoir comment incorporer la vérification chaque minute jusqu'à ce que l'ordre puisse être entré. Il semble que le code actuel oublie ce qu'il recherche après quelques minutes, car une fois que le prix est hors de portée de l'entrée, rien ne se passe.

Je pense qu'une partie du problème se présente comme suit :

double Open_Price_Every_Minute ;

Open_Price_Every_Minute = iOpen(NULL,PERIOD_M1,0) ;

Open_Price_Every_Minute = NormalizeDouble(Open_Price_Every_Minute, Digits) ;

if (Allow_LimitOrder_for_Entry_A==false)

{

OrderSend(Symbol(), OP_BUYSTOP, Lots, LA, Slippage, LASL, LATP, "", Magic, 0, FireBrick);

OrderSend(Symbol(), OP_SELLSTOP, Lots, SA, Slippage, SASL, SATP, "", Magic, 0, FireBrick);

}

Comme toujours, merci pour votre aide et votre temps.

James

 
proverbs:
Il semble que le code actuel oublie ce qu'il recherche après quelques minutes, car une fois que le prix est hors de la voie d'entrée, rien ne se passe.

Je ne pense pas que vous voudrez avoir une boucle fonctionnant indéfiniment dans un EA. Je ne l'ai jamais essayé, mais je ne pense pas que ce soit une bonne chose. Si vous voulez que l'EA se "souvienne" de ce qu'il a fait, stockez les données dont vous avez besoin de vous souvenir comme variables statiques (variables déclarées en dehors de la fonction principale) ou comme variables globales MT4.

 
ryanklefas:
Je ne pense pas que vous voudrez avoir une boucle fonctionnant indéfiniment dans un EA. Je ne l'ai jamais essayé auparavant, mais je ne pense pas que ce soit une bonne chose. Si vous voulez que l'EA se "souvienne" de ce qu'il a fait, stockez toutes les données dont vous avez besoin de vous souvenir en tant que variables statiques (variables déclarées en dehors de la fonction principale) ou en tant que variables globales MT4.

Hey !

Mettre le traitement des données dans la boucle est un bon moyen, lisez ceci :

https://www.mql5.com/en/articles/1462

Vous devez juste le faire de la bonne manière.

 

Kalenzo,

Merci pour cet article. On dirait que je suis sur le point d'apprendre plus que ce que j'ai demandé.

Raison: