Calcul de position ... Encore ... ?

 

Bonjour à tous, 

Je suis tout nouveau ici :)

Je me suis remis au dév il y a peu (ça faisait environ 12 ans que j'avais pas fait une ligne) - afin d'établir un script de trading. Tout va bien jusqu'au moment ou j'essaie d'établir ma position, je finis par reprendre un bout de code d'ici : https://www.mql5.com/en/forum/388742

      // Calculate Max Lot Size based on Maximum Risk
      double dblLotsRisk( double dbStopLoss, double dbRiskRatio )
      {
         double
            dbLotsMinimum  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MIN       ),
            dbLotsMaximum  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MAX       ),
            dbLotsStep     = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_STEP      ),
            dbTickSize     = SymbolInfoDouble( _Symbol, SYMBOL_TRADE_TICK_SIZE  ),
            dbTickValue    = SymbolInfoDouble( _Symbol, SYMBOL_TRADE_TICK_VALUE ),
            dbValueAccount = fmin( fmin( 
                             AccountInfoDouble( ACCOUNT_EQUITY      )  , 
                             AccountInfoDouble( ACCOUNT_BALANCE     ) ),
                             AccountInfoDouble( ACCOUNT_MARGIN_FREE ) ),
            dbValueRisk    = dbValueAccount * dbRiskRatio,
            dbLossOrder    = dbStopLoss * dbTickValue / dbTickSize,
            dbCalcLot      = fmin(  dbLotsMaximum,                  // Prevent too greater volume
                             fmax(  dbLotsMinimum,                  // Prevent too smaller volume
                             round( dbValueRisk / dbLossOrder       // Calculate stop risk
                             / dbLotsStep ) * dbLotsStep ) );       // Align to step value
         
         
         Print("dbLotsMinimum :                 ", dbLotsMinimum);
         Print("dbLotsMaximum :                 ", dbLotsMaximum);
         Print("dbLotsStep :                    ", dbLotsStep);
         Print("dbTickSize :                    ", dbTickSize);
         Print("dbTickValue :                   ", dbTickValue);
         Print("dbValueAccount :                ", dbValueAccount);
         Print("dbValueRisk :                   ", dbValueRisk);
         Print("dbStopLoss :                    ", dbStopLoss);
         Print("dbRiskRatio :                   ", dbRiskRatio);
         Print("dbLossOrder :                   ", dbLossOrder);
         Print("dbLotsStep :                    ", dbLotsStep);
         Print("dbCalcLot :                     ", dbCalcLot);
         
         return ( dbCalcLot );
      };

Il semble bien connu ... 

Quand je l'exécute, j'obtiens toujours le lot minimal (dbLotsMinimum), quelque soit la taille de ma position - mon risque, etc ... 

2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbLotsMinimum :                 0.01
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbLotsMaximum :                 10000.0
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbLotsStep :                    0.01
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbTickSize :                    0.00001
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbTickValue :                   0.9081909743980966
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbValueAccount :                10000.0
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbValueRisk :                   300.0
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbStopLoss :                    0.655
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbRiskRatio :                   0.03
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbLossOrder :                   59486.50882307533
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbLotsStep :                    0.01
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbCalcLot :                     0.01


Je vous avoue que ça fait maintenant une semaine que je cherche, j'ai fini par partir dans tous les sens et écrire des codes qui n'ont rien à voir, et maintenant je suis un peu perdu, je ne trouve pas de solution. Un peu d'aide si possible ? 

Merci d'avance ;)

How to calculate proper lot size ?
How to calculate proper lot size ?
  • 2022.02.11
  • www.mql5.com
Hi, So i'm trying to build a scalping system that watch the market in 5 minutes timeframe and execute trades based on simple algorithm, until here...
 
2023.08.11 14:45:27.220 2023.08.07 00:00:00   dbStopLoss :                    0.655

La valeur de ce paramètre attendue est une distance, pas une valeur absolue. Par example si le prix d'entrée est 0.66, et votre stoploss 0.655, dbStopLoss serait 0.005

 
Merci beaucoup de ce retour, je vais tester ça très vite et vous tiens informé :)
 

Bonjour, 

Encore une fois merci de votre aide, le calcul de positions fonctionne. 

 
mcorgnet #:

Bonjour, 

Encore une fois merci de votre aide, le calcul de positions fonctionne. 

Bienvenu.