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

 
C'est de l'or. Ça m'a fait gagner des heures de travail. T'es un homme !
 

Profitez-en... mais ne vous privez pas de la confiance que vous procure la construction de votre propre code et donc de savoir exactement comment il fonctionne. L'utilisation d'un code préexistant est un bon moyen d'améliorer vos connaissances dans le cadre d'un processus d'apprentissage par la force des bras. Je ne serais pas ici si je n'avais pas eu de code à utiliser comme exemple à mes débuts, mais assurez-vous de vous forcer à apprendre à pêcher. Il y a de la valeur à en tirer dans tout ce que vous faites.

 

@Phillip

Que pensez-vous de ceci ?

tradeVolume = AccountFreeMargin() * risk/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) ) ;

if(tradeVolume<MarketInfo(Symbol(),MODE_MINLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MINLOT) ;

if(tradeVolume>MarketInfo(Symbol(),MODE_MAXLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MAXLOT) ;

res=OrderSend(Symbol(),OP_BUY,tradeVolume,Ask,3,Ask - 0.2,Ask + 0.4,"",MAGICID,0,Red) ;

 
Ricotter:

tradeVolume = AccountFreeMargin() * risk/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) ) ;


Sans l'avoir testé personnellement pour confirmer le calcul, mais en supposant que le calcul est correct, cela semble correct à condition que vous l'appliquiez uniquement aux paires de devises pour lesquelles la devise de contrepartie est également la dénomination du compte.

Par exemple, si votre compte est basé sur le dollar américain, vous ne devez appliquer cette méthode de calcul du volume de transactions qu'aux paires de devises dont la devise de contrepartie est le dollar américain (EURUSD, GBPUSD, etc.).

Dans mes codes, ce type de paire de devises est désigné comme "Type 2".

Le calcul sera erroné si vous l'appliquez à un symbole qui a pour base la dénomination du compte (USDJPY lorsque le compte est basé sur l'USD par exemple). De même, il sera erroné s'il est appliqué à n'importe quel croisement.

Parcourez la fonction d'appel SymboType() dans le fichier include "Analyze Currency Symbol" qui était dans mon autre post, la section d'en-tête commentée explique en quelque sorte la base des différents types de symboles et pourquoi vous devez calculer l'équité à risque et la taille des volumes (lot) différemment selon le type de symbole.

Mais si votre plan est de négocier uniquement les paires de type EURUSD et GBPUSD, alors votre code semble bon !
 

Bonjour Phillip... vous vous souvenez peut-être que dans l'un de mes précédents messages, j'avais dit "Il semble que le code ait eu quelques problèmes avec les paires JPY. Est-ce que cela a été résolu ?". Eh bien, je pense que ce problème a pu réapparaître avec moi. J'ai ajouté votre routine correctement (je suis presque sûr) dans mon EA et j'ai défini mon MaxPercentEquityAtRisk= 1.0 (1 pour cent). Les fonds propres de mon compte de démonstration s'élèvent à environ 2 300 dollars, je suis donc prêt à risquer environ 23 dollars sur une transaction donnée. Mon EA utilise des stop loss et des objectifs de gain de taille égale, donc si je risque 23 $ sur une transaction, je vise un gain de 23 $. Quoi qu'il en soit, mon EA a généré deux transactions la nuit dernière :

(1) BUY EUR/JPY, 9.8 pips stoploss et 9.8 pips profit target. Votre routine a calculé une taille de lot de 0.80 lots (bien trop grande) et le trade a résulté en un profit de 10 pip de 96.91$.

(2) BUY NZDJPY, 16.3 pips stoploss et 16.3 pips de profit. Votre routine a calculé une taille de lot de 0,28 lot et la transaction s'est soldée par une perte de -56,56 $.


Il me semble que ces deux transactions auraient dû me donner environ 23 $ de gain ou 23 $ de perte, étant donné que je ne risque que 1 % de mon capital de 2 300 $, non ?


Merci !

Shawn

 

Ceci pourrait aider Phillp - voici le journal des instructions d'impression de votre code juste après qu'il ait calculé les tailles de lot pour les deux ordres que j'ai mentionnés ci-dessus :


05:14:56 EURJPY,H1 : BUY - EURJPY Max EquityAtRisk = $21.99 et Max Lotsize = 0.8085
05:14:56 EURJPY,H1 : BUY - EURJPY Current EquityAtRisk = $21.76 et Current Lotsize = 0.8
05:14:56 EURJPY,H1 : BUY - EURJPY MarketInfo(MODE_STOPLEVEL) = 30.00000
05:14:56 LibOrderReliable EURJPY,H1 : chargé avec succès
05:14:56 LibOrderReliable EURJPY,H1 : OrderSendReliable v3.1 :
05:14:56 LibOrderReliable EURJPY,H1 : OrderSendReliable v3.1 : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
05:14:56 LibOrderReliable EURJPY,H1 : OrderSendReliable v3.1 : Tentative d'achat STOP 0.80000000 lots @114.78700000 sl:114.68900000 tp:114.88500000



09:02:36 NZDJPY,H1 : BUY - NZDJPY Max EquityAtRisk = $23.29 et Max Lotsize = 0.2814
09:02:36 NZDJPY,H1 : BUY - NZDJPY Current EquityAtRisk = $23.18 et Current Lotsize = 0.28
09:02:36 NZDJPY,H1 : BUY - NZDJPY MarketInfo(MODE_STOPLEVEL) = 70.00000
09:02:36 LibOrderReliable NZDJPY,H1 : chargé correctement
09:02:36 LibOrderReliable NZDJPY,H1 : OrderSendReliable v3.1 :
09:02:36 LibOrderReliable NZDJPY,H1 : OrderSendReliable v3.1 : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
09:02:36 LibOrderReliable NZDJPY,H1 : OrderSendReliable v3.1 : Tentative de BUY STOP 0.28000000 lots @64.29700000 sl:64.13400000 tp:64.46000000
09:02:37 LibOrderReliable NZDJPY,H1 : open #155492665 buy stop 0.28 NZDJPY at 64.297 sl : 64.134 tp : 64.460 ok
09:02:37 LibOrderReliable NZDJPY,H1 : OrderSendReliable v3.1 : Ticket #155492665 : Ordre BUY STOP passé avec succès, les détails suivent.
09:02:37 LibOrderReliable NZDJPY,H1 : #155492665 2010.11.04 13:02 buy stop 0.28 NZDJPY 64.297 64.134 64.460 64.197 0.00 0.00 0.00 NZDJPY73650016 73650016
09:02:37 LibOrderReliable NZDJPY,H1 : OrderSendReliable v3.1 : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

09:02:37 LibOrderReliable NZDJPY,H1 : OrderSendReliable v3.1 :


... il semble qu'il calcule bien le chiffre de Max EquityAtRisk... mais ces tailles de lot entraînent des profits/pertes bien plus importants que mon risque souhaité de 1% des fonds propres.


Merci

Shawn

 

Quel est votre courtier ?

Sur FXDD, lorsque je saisis ces ordres stop, j'obtiens une taille de lot de 0,15 pour l'EURJPY (@25,66 EaR).

2010.11.04 16:05:39 Assisted_Order_Script_2010.11.01 EURJPY,Daily : open #95896902 buy stop 0.15 EURJPY at 114.827 sl : 114.689 tp : 114.885 ok<br / translate="no"> 2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily : tenté OP_BUYSTOP 0.15000000 lots @114.82700000 sl:114.68900000 tp:114.88500000
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily : EquityAtRisk actuel = 25,66 $, taille de lot actuelle = 0,15 et objectif de profit = 10,78 $ pour un ratio Profit/Perte de 0,4:1.
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily : Maximum autorisé d'EquityAtRisk = $25.84 et Taille de lot maximale calculée = 0.1511
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily inputs : Order_Type="BUY STOP" ; OpenBidPrice=114.787 ; StopLossBidPrice=114.689 ; TakeProfitBidPrice=114.885 ; MaxPercentEquityAtRisk=0.5 ; MinLotOverRide=false ;

Sur IBFX, j'obtiens une taille de lot de 0,16 avec un EaR de 26,77 $ (capitaux propres de départ plus importants sur le compte).

2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4 : open #94468219 buy stop 0.16 EURJPY at 114.824 sl : 114.689 tp : 114.885 ok
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4 : tentative OP_BUYSTOP 0.16000000 lots @114.82400000 sl:114.68900000 tp:114.88500000
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4 : EquityAtRisk actuel = 26,77 $ et Taille de lot actuelle = 0,16 et Objectif de profit = 12,10 $ pour un ratio Profit/Perte de 0,5:1
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4 : Max autorisé EquityAtRisk = 27,19 $ et Max calculé Lotsize = 0.1625
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4 entrées : Order_Type="BUY STOP" ; OpenBidPrice=114.787 ; StopLossBidPrice=114.689 ; TakeProfitBidPrice=114.885 ; MaxPercentEquityAtRisk=0.5 ; MinLotOverRide=false ;

Avec le NZDJPY j'obtiens une taille de lot de 0.09 lots et un EaR de 24.53 sur IBFX :

2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4 : open #94468343 buy stop 0.09 NZDJPY at 64.354 sl : 64.134 tp : 64.460 ok
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4 : tentative OP_BUYSTOP 0.09000000 lots @64.35400000 sl:64.13400000 tp:64.46000000
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4 : EquityAtRisk actuel = 24,53 $ et Taille de lot actuelle = 0,09 et Objectif de profit = 11,82 $ pour un ratio Profit:Perte de 0,5:1
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4 : Max autorisé EquityAtRisk = 27,19 $ et Max calculé Lotsize = 0,0998
2010.11.04 16:11:59 Entrées Assisted_Order_Script_2010.11.01 NZDJPY,H4 : Order_Type="BUY STOP" ; OpenBidPrice=64.297 ; StopLossBidPrice=64.134 ; TakeProfitBidPrice=64.46 ; MaxPercentEquityAtRisk=0.5 ; MinLotOverRide=false ;

Il y a neuf courtiers avec lesquels je teste la compatibilité, ces codes sont connus pour fonctionner sur Alpari(US), CitiFXPro, CMS, Forex.com (Gain Capital), FXCM, FXDD, IBFX, MIG Bank, et ODL.

Ces courtiers sont suffisamment différents pour que je sois convaincu jusqu'à présent que les codes sont agnostiques par rapport aux courtiers, car ils gèrent habilement les différences entre les paramètres de marché de ces courtiers.

Mais nous supposons que votre implémentation du code n'est pas cassée, donc éliminons d'abord cela. Essayez le script ci-joint, glissez-déposez sur EURJPY et entrez les paramètres pour votre BUY STOP comme je l'ai fait ci-dessus et faites-moi part des résultats. (à utiliser uniquement sur un compte de démonstration évidemment)

 

Merci Phillip... J'utilise un compte de démonstration Alpari UK, avec un capital de 2272,85 $ US. OK, j'ai ajouté le script à un graphique horaire EURJPY (comme mon EA). Il n'a rien fait ou placé un ordre en attente, alors j'ai vérifié l'onglet "Experts" pour tout message d'erreur... voici ce qu'il dit :


2010.11.04 20:39:15 Assisted_Order_Script_2010.11.01 EURJPY,H1 : supprimé
2010.11.04 20:38:38 Assisted_Order_Script_2010.11.01 EURJPY,H1 : chargé avec succès
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1 : supprimé
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1 : désinit raison 0
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1 : division par zéro
2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1 : Max allowed EquityAtRisk = $22.73 et Max computed Lotsize = 0
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 ;


Merci !

Shawn

 

Note : J'ai réessayé le script à l'instant, Phillip, avec les mêmes chiffres mais en fixant MinLotOverride à true... il a lancé un ordre MARKET immédiat (même si mon prix d'achat était de 115.827 et que le marché était seulement à 114.945. Lotsize = 0.01 et pas d'ordre stoploss ou profit target - ils étaient tous deux à 0.0000.

Merci

Shawn

 

Juste pour confirmer, la dénomination de votre compte est USD, correct ?

Je suis en train de télécharger Alpari UK pour le vérifier.

L'ouverture de l'ordre en tant que marché au lieu de l'achat stop est entièrement contrôlée par la routine orderreliable... très étrange. Je vais devoir examiner cela aussi.

Une chose qui attire mon attention est cet avis :
"L'effet de levier sur un compte de démonstration est automatiquement réglé sur l'effet de levier maximum de 1:500."

Non pas que l'effet de levier doive affecter un calcul de taille de lot, il ne devrait affecter que les calculs de marge libre IIRC.

Edit : nevermind, I see the platform actually doesn't default to this, it's 1:100 max leverage.

Raison: