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

 

Salut Phillip, Shawn est de retour. J'ai apporté les modifications mineures dont nous avons discuté la dernière fois (je n'ai cependant pas encore mis en œuvre votre dernière version) et les problèmes de taille de lot des paires JPY se posent toujours. J'ai laissé mon EA fonctionner la nuit dernière et il a généré 3 trades (le solde de mon compte était de 2550 $ US, le risque est de 1%, donc environ 25 $ de risque par trade) :


(1) Vendre NZDJPY, 0.89 lots

(2) Vente AUDJPY, 0.23 lots

(3) Vente CADJPY, 0.94 lots


La taille de lot pour la transaction AUDJPY semble correcte, mais pas pour les deux autres. J'avais quelques déclarations d'impression intégrées autour des appels à votre matériel. Tout d'abord, voici le code de mon EA pour cette partie :


if(Bid > SellPrice && SellPrice != 0.00)
         {       
          CurrentOrderType=OP_SELL;
          CurrentStopLossPrice= FinalSellStopPrice;
          CurrentEquityAtRisk=(MaxPercentEquityAtRisk/100.0)*AccountBalance();
          CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);
          Print("SELL - ", Symbol(), "AccountBalance = ", DoubleToStr(AccountBalance(),2), " Max EquityAtRisk = $",DoubleToStr(CurrentEquityAtRisk,2)," and Max Lotsize = ",DoubleToStr(CurrentLotSize,4));
          CurrentLotSize=NormalizeLotSize(CurrentLotSize);
          Print("SELL - ", Symbol(), "Normalized LotSize is now = ", DoubleToStr(CurrentLotSize,4));
          if(CurrentLotSize<MarketInfo(Symbol(),MODE_MINLOT)) CurrentLotSize=MarketInfo(Symbol(),MODE_MINLOT);
          if(CurrentLotSize>MarketInfo(Symbol(),MODE_MAXLOT)) CurrentLotSize=MarketInfo(Symbol(),MODE_MAXLOT);
          CurrentEquityAtRisk=EquityAtRisk(CurrentLotSize,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);
          Print("SELL - ", Symbol(), "Current EquityAtRisk = $",DoubleToStr(CurrentEquityAtRisk,2)," and Current Lotsize = ",DoubleToStr(CurrentLotSize,4));
          Print("SELL - ", Symbol(), " MarketInfo(MODE_STOPLEVEL) = ",DoubleToStr(MarketInfo(Symbol(),MODE_STOPLEVEL),5));
          
          //Check free margin
          if (AccountFreeMargin() < (1000 * CurrentLotSize)) 
          {
             Print("We have no money. Free Margin = ", AccountFreeMargin());
             return(0);
          }
         
          Ticket=OrderSendReliable2Step(Symbol(),OP_SELLSTOP,CurrentLotSize,FinalSellPrice,Slippage,CurrentStopLossPrice,FinalSellProfTarg,Symbol()+DoubleToStr(MagicNumber,0),MagicNumber,0,Red);
          if(Ticket<=0) Print("Error = ",GetLastError());
          else 
          { 


Et voici la sortie des instructions Print extraites du journal, pour chacune des 3 transactions ci-dessus :


05:16:10 DelphiEA NZDJPY,H1 : SELL - NZDJPYAccountBalance = 2550.90 Max EquityAtRisk = $25.51 et Max Lotsize = 0.8988
05:16:10 DelphiEA NZDJPY,H1 : SELL - NZDJPYNormalized LotSize est maintenant = 0.8900
05:16:10 DelphiEA NZDJPY,H1 : SELL - NZDJPYCurrent EquityAtRisk = $25.26 et Current Lotsize = 0.8900
05:16:10 DelphiEA NZDJPY,H1 : SELL - NZDJPY MarketInfo(MODE_STOPLEVEL) = 70.00000


05:16:56 DelphiEA AUDJPY,H1 : SELL - AUDJPYSolde du compte = 2550.90 Max EquityAtRisk = $25.51 et Max Lotsize = 0.2376
05:16:56 DelphiEA AUDJPY,H1 : SELL - AUDJPYNormalized LotSize est maintenant = 0.2300
05:16:56 DelphiEA AUDJPY,H1 : SELL - AUDJPYCurrent EquityAtRisk = $24.69 et Current Lotsize = 0.2300
05:16:56 DelphiEA AUDJPY,H1 : SELL - AUDJPY MarketInfo(MODE_STOPLEVEL) = 50.00000


07:13:53 DelphiEA CADJPY,H1 : VENTE - CADJPYSolde de compte = 2550.90 Max EquityAtRisk = $25.51 et Max Lotsize = 0.9408
07:13:53 DelphiEA CADJPY,H1 : SELL - CADJPYNormalized LotSize est maintenant = 0.9400
07:13:53 DelphiEA CADJPY,H1 : SELL - CADJPYCurrent EquityAtRisk = $25.49 et Current Lotsize = 0.9400

07:13:53 DelphiEA CADJPY,H1 : SELL - CADJPY MarketInfo(MODE_STOPLEVEL) = 60.00000


J'espère que cela vous aidera !

Oh Phillip, une autre chose - Je pense que j'ai trouvé un petit bug dans OrderSendReliable2Step. Savez-vous à qui je dois le signaler ?


Merci !

Shawn

 
Ricotter:

Ce type le fait en utilisant l'historique des fichiers.

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

Puisque vous êtes nouveau ici, il est utile de mentionner que cette limitation n'existe pas dans MT5 Tester. POUR VOTRE INFORMATION.

 
gordon:

Puisque vous êtes nouveau ici, il est utile de mentionner que cette limitation n'existe pas dans MT5 Tester. POUR VOTRE INFORMATION.

Merci pour le conseil. Y a-t-il une raison pour laquelle je ne devrais PAS utiliser MT5 ?

 
Ricotter:

Merci pour le conseil. Y a-t-il une raison pour laquelle je ne devrais PAS utiliser MT5 ?

Si vous voulez trader en direct immédiatement, il vaut mieux vous en tenir à MT4, mais si vous prévoyez d'apprendre et de faire des démos pendant quelques mois avant de passer en direct, alors vous pouvez l'envisager. C'est une nouvelle plateforme avec de nombreuses améliorations par rapport à MT4, mais elle est aussi beaucoup plus compliquée et n'est toujours pas supportée par de nombreux courtiers. Voici quelques bonnes informations -> http://www.100forexbrokers.com/mt5-metatrader5. Vous pouvez également consulter le site MQL5.com.
 
shawnh:

Salut Phillip, Shawn est de retour. J'ai apporté les modifications mineures dont nous avons discuté la dernière fois (je n'ai toutefois pas encore mis en œuvre votre dernière version) et les problèmes liés aux tailles de lot des paires JPY se posent toujours.

Tout semble correct dans votre code, mais je ne sais toujours pas pourquoi cela vous arrive.

Je recommande de passer au code le plus récent. A ce stade, vous devez changer quelque chose puisque ce que vous avez maintenant ne fonctionne pas correctement.

Je ne sais pas à qui vous devez signaler les bogues concernant les problèmes de orderlib, désolé.
 
1005phillip:

Étape 1 : Placez toutes les pièces jointes de ce post dans votre chemin d'inclusion (...\experts\include\*.mqh)

É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.

Étape 3 : Pour calculer la taille du lot sur la base d'un montant budgétisé d'équité à risquer, ajoutez ce qui suit : 1.

En supposant que vous ayez défini MaxPercentEquityAtRisk quelque part dans votre EA pour qu'il s'agisse de l'équité maximale autorisée à mettre au risque d'une perte complète par transaction dans le cas où les stops sont atteints, cette partie du code déterminera d'abord la taille maximale du lot sur la base du prix d'ouverture et du prix du stoploss (pas de pips mais le prix réel du marché, la même chose que vous envoyez dans votre ordre au courtier), puis elle déterminera la taille maximale de la position que le courtier acceptera sans dépasser l'équité à risque budgétée.

Étape 4 : si vous souhaitez que les résultats des calculs soient imprimés dans votre journal ou ajoutés à la transaction en tant que commentaire d'ordre, vous pouvez également ajouter les éléments suivants

Étape 5 : Passez votre ordre (en utilisant la méthode ordersendreliable)

https://c.mql5.com/mql4/forum/2010/10/OrderReliable_2010.10.12.mqh


Bonjour 1005phillip,


Avez-vous une version des 2 mqh (analyze..., et tradepositionmanage...) qui n'a pas d'importation de ce qui suit ? C'est parce que les deux ont cette importation, et n'est donc pas autorisé par le compilateur.

//#include <stderror.mqh>
//#include <stdlib.mqh>


...afin que je ne puisse pas éditer les fichiers et les garder en lecture seule. Ou puis-je les éditer et supprimer ces importations ?

 
jcadong5:

...de sorte que je ne puisse pas modifier les fichiers et les garder en lecture seule. Ou puis-je les éditer et supprimer ces importations ?


Allez-y et éditez-les à votre guise. La duplicité n'empêche pas la compilation pour moi, le compilateur enregistre une note concernant la duplicité mais c'est tout ce qu'il fait.
 
Merci.
 
1005phillip:
Tout semble correct dans votre code, mais je ne sais toujours pas pourquoi cela vous arrive.

Je recommande de passer au code le plus récent. A ce stade, vous devez changer quelque chose puisque ce que vous avez maintenant ne fonctionne pas correctement.

Je ne sais pas à qui vous devez signaler les bogues concernant les problèmes de orderlib, désolé.


Bonjour Phillip, c'est encore Shawn. Après avoir installé votre dernière version il y a quelques semaines, je suis heureux de vous annoncer que tout semble bien se passer maintenant et que les tailles de lots calculées semblent parfaites. Je suppose que j'avais juste besoin de la dernière version !


Merci encore pour toute votre aide, vous êtes un homme bon !


Salutations

Shawn

 

Tout le plaisir est pour moi ! Et merci de me faire savoir que ça marche pour vous, j'apprécie le retour. Je ne suis pas sûr de ce qui a mal tourné avec le code précédent. Il se peut que ce soit un bug que j'ai involontairement corrigé entre deux révisions.

J'aurai probablement une version mise à jour d'ici une semaine ou deux qui aura des fonctions de repli pour l'utilisation de backtesting dans MT4 sur despaires de devises croisées. Actuellement, si vous essayez de backtester une paire croisée tout en utilisant mon code de taille de lot, votre backtest va échouer parce que le backtester ne peut pas accéder aux prix du marché pour les paires de base et de contrepartie requises. (ce n'est pas un problème dans les tests en direct ou à terme, c'est une limitation du backtester de MT4).

Je posterai le code quand j'aurai traversé ce pont, peut-être que vous ou d'autres personnes le trouveront utile.

Je vous souhaite un bon week-end,
- Phil

Raison: