fonction de calcul automatique de la taille des lots ? - page 3

 

Ah, je vois le problème... vous avez configuré le script pour placer un ordre "BUY" au lieu de changer la variable externe pour qu'elle soit BUY STOP... c'est pourquoi il a placé un ordre au marché.

D'après votre message :

2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1 entrées : Order_Type="BUY"; OpenBidPrice=115.827 ; StopLossBidPrice=115.689 ; TakeProfitBidPrice=115.885 ; MaxPercentEquityAtRisk=1 ; MinLotOverRide=false ;

Essayez BUY STOP.


J'obtiens 0,12 lots pour EURJPY sur un compte de démonstration approvisionné avec 2300 USD

2010.11.04 20:10:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 : open #155713274 buy stop 0.12 EURJPY at 115.840 sl : 115.689 tp : 115.885 ok
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1 : tentative OP_BUYSTOP 0.12000000 lots @115.84000000 sl:115.68900000 tp:115.88500000
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1 : EquityAtRisk actuel = 22,44 $ et Lotsize actuel = 0,12 et Profit cible = 6,69 $ pour un ratio Profit:Perte de 0,3:1
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1 : Max autorisé EquityAtRisk = 23,00 $ et Max calculé Lotsize = 0,123
2010.11.04 20:10:15 Entrées Assisted_Order_Script_2010.11.01 EURJPY,H1 : Order_Type="BUY STOP" ; OpenBidPrice=115.827 ; StopLossBidPrice=115.689 ; TakeProfitBidPrice=115.885 ; MaxPercentEquityAtRisk=1 ; MinLotOverRide=false ;
 

J'ai aussi fait l'exemple du NZDJPY buystop :

2010.11.04 20:14:16 Assisted_Order_Script_2010.11.01 NZDJPY,H1 : open #155714279 buy stop 0.10 NZDJPY at 64.319 sl : 64.134 tp : 64.460 ok<br / translate="no"> 2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1 : tenté OP_BUYSTOP 0.10000000 lots @64.31900000 sl:64.13400000 tp:64.46000000
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1 : EquityAtRisk actuel = 22,90 $ et Lotsize actuel = 0,1 et Profit cible = 17,45 $ pour un ratio Profit:Perte de 0,8:1
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1 : Max autorisé EquityAtRisk = 23,00 $ et Max calculé Lotsize = 0,1004
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1 entrées : Order_Type="BUY STOP" ; OpenBidPrice=64.297 ; StopLossBidPrice=64.134 ; TakeProfitBidPrice=64.46 ; MaxPercentEquityAtRisk=1 ; MinLotOverRide=false ;

La routine orderreliable a donc déplacé le prix d'entrée à 64,319 pour cette raison, mais j'obtiens toujours une taille de lot raisonnable de 0,10.

À ce stade, je vais devoir conclure qu'il y a un problème dans votre code dans la façon dont vous avez mis en œuvre les fichiers d'inclusion et / ou comment vous utilisez les sorties. Vous devrez télécharger le code pour que je puisse l'inspecter afin que je puisse aller plus loin.

 

Oui, c'est un compte de démonstration libellé en USD, avec un effet de levier de 1:100. OK, je viens de le lancer sur EURJPY en tant que BUY STOP, il semble que nous ayons obtenu de bons chiffres cette fois. Le journal de l'expert dit :


2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1 : supprimé
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1 : raison de désinitialisation 0
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1 : ouvert #155719095 buy stop 0.11 EURJPY à 115.843 sl : 115.689 tp : 115.885 ok
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 : tentative OP_BUYSTOP 0.11000000 lots @115.84300000 sl:115.68900000 tp:115.88500000
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 : EquityAtRisk actuel = 20,95 $ et Taille de lot actuelle = 0,11 et Objectif de profit = 5,71 $ pour un ratio Profit:Perte de 0,3:1
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 : Max autorisé EquityAtRisk = 22,73 $ et Max calculé Lotsize = 0,1193
2010.11.04 21:37:16 Entrées Assisted_Order_Script_2010.11.01 EURJPY,H1 : Order_Type="BUY STOP" ; OpenBidPrice=115.827 ; StopLossBidPrice=115.689 ; TakeProfitBidPrice=115.885 ; MaxPercentEquityAtRisk=1 ; MinLotOverRide=false ;
2010.11.04 21:36:23 Assisted_Order_Script_2010.11.01 EURJPY,H1 : chargé correctement
2010.11.04 21:34:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 : supprimé
2010.11.04 21:34:11 Assisted_Order_Script_2010.11.01 EURJPY,H1 : chargé avec succès



... et il a placé l'ordre d'arrêt d'achat en attente de 0.11 lots. parfait. Oui, je suppose que quelque chose est "borked up" dans mon code, comme vous dites ... lol. J'ai toujours été très prudent en mettant votre code... qu'est-ce que ça peut être ? OK, je vais faire un peu de débogage ici et je vous le ferai savoir. Désolé de vous importuner, Phillip !


Merci

Shawn

 

Dois-je recommencer avec la nouvelle version que tu viens de poster, Phillip ?


Shawn

 

Il est logique d'utiliser le plus récent, je le suis.

 

Bonjour Phillip, j'étais sur le point d'opérer à nouveau mon EA pour le mettre à jour vers la dernière version que vous avez postée il y a quelques jours, mais après avoir relu ce post... il m'a laissé avec un certain nombre de questions. J'ai pensé que je devais vous les poser avant de déchirer mon EA :


(1) Vous mentionnez qu'il y a 2 nouveaux fichiers inclus :


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Trade_Position_Management_2010.10.29.mqh (26.68 KB)


... et l'ancien StopLoss_Manager_2010.05.24.mqh ? Ce fichier n'est plus du tout nécessaire dans votre nouvelle version ?


(2) Où vous dites :


" Étape 2 : Ajoutez ce qui suit au sommet de votre EA afin qu'il ait accès aux fonctions d'appel contenues dans les fichiers joints

#include <OrderReliable_2010.10.12.mqh>.

#include <Trade_Position_Management_2010.10.29.mqh>"


... est-ce une nouvelle version de OrderReliable ? J'utilisais LibOrderReliable.mqh. Est-ce que quelque chose a changé avec cela ? De plus, ne devons-nous pas inclure le nouveau fichier Analyze_Currency_Symbol_2010.10.29.mqh également ?


(3) Dans cette ligne de code que vous dites d'ajouter lors de l'utilisation de votre nouvelle version :


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType) ;


... qu'est-ce que OpenPrice_ND et StopLossPrice_ND ? S'agit-il de variables que je dois déclarer, ou sont-elles intégrées quelque part dans vos fichiers include ? De plus, dans cette nouvelle version de votre fonction LotSize, le nombre de paramètres et l'ordre dans lequel ils sont utilisés ont beaucoup changé, n'est-ce pas ? L'appel à LotSize dans votre version précédente était :


CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross) ;


(4) J'ai remarqué que dans mon code utilisant votre version précédente, j'avais assigné CurrentOrderType=OP_BUY ; En réalité, j'effectue un ordre stop d' achat. Cela ferait-il une différence ?



Désolé de vous importuner, mais j'étais juste un peu déconcerté par ces choses.


Merci

Shawn

 

(1) You mention there's 2 new include files:


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Gestion des positions commerciales_2010.10.29.mqh (26.68 KB)


... et l'ancien StopLoss_Manager_2010.05.24.mqh ? Ce fichier n'est plus du tout nécessaire dans votre nouvelle version ?


Je ne sais vraiment pas pourquoi j'ai ajouté cette partie à mon message initial, si ce n'est pour m'assurer que l'utilisateur final dispose d'un ensemble complet de fichiers sur lesquels s'appuyer.

J'utilise personnellement une version mise à jour de ce gestionnaire de stoploss mais cela n'a aucun rapport avec ce fil de discussion, vous devez mettre en œuvre les procédures de stoploss que vous préférez utiliser. Le code que j'ai téléchargé dans ce fil de discussion ne dépend pas d'un fichier d'inclusion stoploss mais il dépend de vous pour configurer correctement votre code afin d'identifier le prix stoploss de façon à pouvoir l'envoyer à la fonction d' appel equityatrisk.

(2) Où vous dites :


"Etape 2 : Ajoutez ce qui suit en haut de votre EA afin qu'il ait accès aux fonctions d'appel contenues dans les fichiers attachés

#include <OrderReliable_2010.10.12.mqh>

#include <Trade_Position_Management_2010.10.29.mqh>"


... est-ce une nouvelle version ou OrderReliable ? J'utilisais LibOrderReliable.mqh. Est-ce que quelque chose a changé avec cela ? De plus, ne devons-nous pas inclure le nouveau fichier Analyze_Currency_Symbol_2010.10.29.mqh également ?

Il s'agit d'une nouvelle version, j'ai posté le lien vers celle-ci en bas de mon message au bas de la première page de ce fil de discussion (je l'aurais bien mis en lien mais la recherche est cassée, argh !).

J'ai modifié la nouvelle version pour qu'elle fonctionne de manière transparente avec les courtiers de type ecn. Envoyez vos ordres via ordersendreliable et peu importe si le courtier accepte ou non les SL & TP sur les ordres au marché, le script orderreliable s'en occupe pour vous.

(3) Dans cette ligne de code que vous dites d'ajouter lors de l'utilisation de votre nouvelle version :


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType) ;


... qu'est-ce que OpenPrice_ND et StopLossPrice_ND ? S'agit-il de variables que je dois déclarer, ou sont-elles intégrées quelque part dans vos fichiers include ? De plus, dans cette nouvelle version de votre fonction LotSize, le nombre de paramètres et l'ordre dans lequel ils sont utilisés ont beaucoup changé, n'est-ce pas ? L'appel à la fonction LotSize dans votre version précédente l'était :

Oui, ce sont des variables que vous devez déclarer à un moment donné dans votre code et leur attribuer les prix du marché pour lesquels vous souhaitez ouvrir la nouvelle position (OpenPrice_ND) et le prix du stoploss (StopLossPrice_ND).

Vous pouvez également renommer mes variables avec celles que vous utilisez déjà. Considérez ces variables comme des emplacements, substituez vos variables là où c'est approprié.

(4) J'ai remarqué que dans mon code utilisant votre version précédente, j'avais assigné CurrentOrderType=OP_BUY ; En réalité, j'effectue un ordre stop d'achat. Cela ferait-il une différence ?
Cela ne fait aucune différence. Tout ce qui importe, c'est que vous transmettiez correctement le type d'ordre aux fonctions d'appel respectives. Elles sont déjà codées pour faire la bonne chose en fonction du type d'ordre. Si vous n'envoyez pas le bon type d'ordre à la fonction d'appel, vous obtiendrez certainement des résultats invalides de la part des fonctions d'appel elles-mêmes.

Ce sont toutes de bonnes questions, si vous ne les posez pas, vous ne pouvez pas vous attendre à apprendre ;)
 
1005phillip:

Je ne sais vraiment pas pourquoi j'ai ajouté cette partie à mon message initial, si ce n'est pour m'assurer que l'utilisateur final dispose d'un ensemble complet de fichiers sur lesquels s'appuyer.

J'utilise personnellement une version mise à jour de ce gestionnaire de stoploss mais cela n'a aucune incidence sur ce fil de discussion, vous devez mettre en œuvre les procédures de stoploss que vous préférez utiliser. Le code que j'ai téléchargé dans ce fil de discussion ne dépend pas d'un fichier d'inclusion stoploss mais il dépend de vous pour configurer correctement votre code afin d'identifier le prix stoploss de façon à pouvoir l'envoyer à la fonction d'appel equityatrisk.



>>> OK ! J'ai mes propres stoploss donc je n'ai pas besoin de ça - je vais le supprimer !



Il s'agit d'une nouvelle version, j'ai posté le lien vers celle-ci en bas de mon message au bas de la première page de ce fil de discussion (je l'aurais bien linké mais la recherche est cassée, argh !).

J'ai modifié la nouvelle version de telle sorte qu'elle fonctionne de manière transparente avec les courtiers de type ecn. Envoyez vos ordres via ordersendreliable et peu importe si le courtier accepte ou non le SL & TP sur les ordres au marché, le script orderreliable s'en occupe pour vous.


>>> OK, j'utilise déjà le OrderSendReliable2Step, donc je vais juste laisser mon code tel quel, en utilisant mon LibOrderReliable.mqh existant. Cependant, ne devons-nous pas aussi inclure le nouveau fichier Analyze_Currency_Symbol_2010.10.29.mqh ?



Oui, ce sont des variables que vous devez déclarer à un moment donné dans votre code et leur attribuer les prix du marché pour lesquels vous souhaitez ouvrir la nouvelle position (OpenPrice_ND) et le prix du stoploss (StopLossPrice_ND).

Vous pouvez aussi renommer mes variables avec celles que vous utilisez déjà. Considérez ces variables comme des emplacements, substituez vos variables là où c'est approprié.


>>> J'ai compris, c'est ce que je pensais qu'elles étaient. Je pense que vous n'avez pas tenu compte du commentaire que j'ai fait : "De plus, dans cette nouvelle version de votre fonction LotSize, le nombre de paramètres et l'ordre dans lequel ils sont utilisés ont beaucoup changé, n'est-ce pas ?".




Cela ne fait aucune différence. Tout ce qui est important, c'est que vous transmettiez correctement le type d'ordre aux fonctions d'appel respectives. Elles sont déjà codées pour faire la bonne chose en fonction du type d'ordre. Si vous n'envoyez pas le bon type d'ordre à la fonction d'appel, vous obtiendrez certainement des résultats invalides de la part des fonctions d'appel elles-mêmes.


>>> OK !



Ce sont toutes de bonnes questions, si vous ne demandez pas, vous ne pouvez pas vous attendre à apprendre ;)


>>> J'essaie ! Merci Phillip.


Shawn


 

>>> ne devons-nous pas aussi inclure le nouveau fichier Analyze_Currency_Symbol_2010.10.29.mqh ?

Pas dans votre EA, mais vous avez besoin du fichier dans votre répertoire include car il est appelé à partir du fichier include de Trade Position Management.

En ayant #include <Trade_Position_Management_2010.10.29.mqh> dans votre EA vous avez déjà lié à la fois Trade_Position_Management_2010.10.29.mqh et Analyze_Currency_Symbol_2010.10.29.mqh.

>>>Dans cette nouvelle version de votre fonction LotSize, le nombre de paramètres et l'ordre dans lequel ils sont utilisés ont beaucoup changé, n'est-ce pas

. Vous n'avez plus besoin de baser le CurrentSymbolType ni le CurrentCounterPairForCross. C'est géré en interne maintenant.

Si vous regardez dans le fichier de la position commerciale, vous verrez la section equityatrisk et il y a des commentaires concernant l'utilisation de la fonction. Ils peuvent vous aider, mais je ne suis pas sûr qu'ils soient très explicites.

 

Est-ce un bug qui n'est arrivé qu'à moi ?
Je ne peux compiler aucun fichier avec MetaEditor mq4 si je mets une ligne avec # include.
Je n'ai pas non plus été capable de compiler des fichiers mq4 qui ont une ligne # include dans le code.
N'active que les lignes
# Include <stderror.mqh>
# Include <stdlib.mqh>
# Include <WinUser32.mqh>