Advertisement
Maurizio-Ciullo

Indicatore Funzione QTA Money Management

Jul 24th, 2023
772
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // --------------------------------------------------- INIZIO ORIGINALE QTA INDICATORE FUNZIONE MONEY MANAGEMENT EASY LANGUAGE --------------------------------------------------- //
  2.  
  3.  
  4.  
  5. {***************************************
  6. * Funzione: CalcPosSize
  7. *
  8. * Questa funzione calcola la dimensione della posizione da utilizzare per gli ordini di trading.
  9. * Il calcolo e' basato sul metodo di money management specificato dall'input MM_Method:
  10. *
  11. * 0 - Fixed Contracts: Usa un numero fisso di contratti specificato dall'input FixedContracts.
  12. * 1 - Fixed Fractional Method: Usa una frazione del profitto netto per determinare la dimensione della posizione.
  13. *     La frazione e' specificata dall'input RiskFraction e lo stop loss dall'input sl.
  14. * 2 - PercentFVolatility: Usa una percentuale della volatilita' del mercato (calcolata come l'Average True Range) per determinare la dimensione della posizione.
  15. *     Il rischio monetario specificato dall'input Monetary_Risk viene diviso per l'ATR moltiplicato per il valore del punto grande.
  16. *
  17. * Gli input Min_Contract e Max_Contract vengono utilizzati per limitare la dimensione della posizione calcolata nel caso PercentVolatility.
  18. *
  19. * L'input Period_ATR e' il periodo utilizzato per calcolare l'ATR nel caso PercentVolatility.
  20. *
  21. * Per utilizzare questa funzione, chiamala all'interno della tua strategia, passando i parametri appropriati. Ad esempio:
  22. *
  23. * vars: myPosSize(0);
  24. * myPosSize = CalcPosSize(MM_Method, FixedContracts, RiskFraction, Period_ATR, Min_Contract, Max_Contract, Monetary_Risk);
  25. *
  26. * Puoi quindi utilizzare la variabile myPosSize per i tuoi ordini. Ad esempio:
  27. *
  28. * buy myPosSize contracts next bar at market;
  29. ****************************************}
  30.  
  31. // Se si crea uno script funzione su easylanguage allora usare (numericSimple)
  32.  
  33. {inputs: MM_Method(numericSimple),
  34.         FixedContracts(numericSimple),
  35.         RiskFraction(numericSimple),
  36.         Period_ATR(numericSimple),
  37.         Min_Contract(numericSimple),
  38.         Max_Contract(numericSimple),
  39.         Monetary_Risk(numericSimple);}
  40.        
  41. // Se si crea uno signal su easylanguage allora usare (numero input)        
  42.        
  43. inputs: MM_Method(1),
  44.         FixedContracts(1),
  45.         RiskFraction(25),
  46.         Period_ATR(14),
  47.         Min_Contract(1),
  48.         Max_Contract(100),
  49.         Monetary_Risk(200);
  50.        
  51. vars: posSize(0), ATRValue(0);
  52.  
  53. if MM_Method = 0 then begin // Fixed Contracts
  54.     posSize = FixedContracts;
  55. end
  56. else if MM_Method = 1 then begin // Fixed Fractional Method
  57.     posSize = ((RiskFraction/100) * NetProfit) / Monetary_Risk;
  58.     if posSize < 1 then posSize = 1;
  59. end
  60. else if MM_Method = 2 then begin // Percent Volatility
  61.     ATRValue = AvgTrueRange(Period_ATR);
  62.    
  63.     if (ATRValue * bigpointvalue) > 0 then
  64.         posSize = Monetary_Risk / (ATRValue * BigPointValue);
  65.    
  66. end;
  67.  
  68. posSize = Round(posSize, 0);
  69.  
  70. if posSize > Max_Contract then
  71.    posSize = Max_Contract
  72. else if posSize < Min_Contract then
  73.    posSize = Min_Contract;
  74.  
  75. // CalcolaPositionSize = posSize; // !!! ATTENZIONE DECOMMENTARE SE SI CREAI UNO SCRIPT EASYLANGUAGE DI TIPO FUNZIONE !!! .
  76.  
  77.  
  78. // --------------------------------------------------- FINE ORIGINALE QTA INDICATORE FUNZIONE MONEY MANAGEMENT EASY LANGUAGE --------------------------------------------------- //
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85. // --------------------------------------------------- INIZIO MODIFICATO PER VARIE PROVE --------------------------------------------------- //
  86.  
  87. {***************************************
  88. * Funzione: CalcPosSize
  89. *
  90. * Questa funzione calcola la dimensione della posizione da utilizzare per gli ordini di trading.
  91. * Il calcolo e' basato sul metodo di money management specificato dall'input MM_Method:
  92. *
  93. * 0 - Fixed Contracts: Usa un numero fisso di contratti specificato dall'input FixedContracts.
  94. * 1 - Fixed Fractional Method: Usa una frazione del profitto netto per determinare la dimensione della posizione.
  95. *     La frazione e' specificata dall'input RiskFraction e lo stop loss dall'input sl.
  96. * 2 - PercentFVolatility: Usa una percentuale della volatilita' del mercato (calcolata come l'Average True Range) per determinare la dimensione della posizione.
  97. *     Il rischio monetario specificato dall'input Monetary_Risk viene diviso per l'ATR moltiplicato per il valore del punto grande.
  98. *
  99. * Gli input Min_Contract e Max_Contract vengono utilizzati per limitare la dimensione della posizione calcolata nel caso PercentVolatility.
  100. *
  101. * L'input Period_ATR e' il periodo utilizzato per calcolare l'ATR nel caso PercentVolatility.
  102. *
  103. * Per utilizzare questa funzione, chiamala all'interno della tua strategia, passando i parametri appropriati. Ad esempio:
  104. *
  105. * vars: myPosSize(0);
  106. * myPosSize = CalcPosSize(MM_Method, FixedContracts, RiskFraction, Period_ATR, Min_Contract, Max_Contract, Monetary_Risk);
  107. *
  108. * Puoi quindi utilizzare la variabile myPosSize per i tuoi ordini. Ad esempio:
  109. *
  110. * buy myPosSize contracts next bar at market;
  111. ****************************************}
  112.  
  113.        
  114. {inputs: MM_Method(1),
  115.         FixedContracts(1),
  116.         RiskFraction(25),
  117.         Period_ATR(14),
  118.         Min_Contract(1),
  119.         Max_Contract(100),
  120.         Monetary_Risk(200),
  121.         Initial_Capital(100000);    
  122.  
  123.  
  124.        
  125. vars: posSize(0), ATRValue(0), CalcolaPositionSize(0);
  126.  
  127. if MM_Method = 0 then begin // Fixed Contracts
  128.     posSize = FixedContracts;
  129. end
  130. else if MM_Method = 1 then begin // Fixed Fractional Method
  131.     posSize = ((RiskFraction/100) * (Initial_Capital + NetProfit)) / Close;// / Monetary_Risk;  // Se lo voglio includere Monetary_Risk lo includo altrimewnti niente
  132.     if posSize < 1 then posSize = 1;
  133. end
  134. else if MM_Method = 2 then begin // Percent Volatility
  135.     ATRValue = AvgTrueRange(Period_ATR);
  136.    
  137.     if (ATRValue * bigpointvalue) > 0 then
  138.         posSize = Monetary_Risk / (ATRValue * BigPointValue);
  139.      
  140. end;
  141.  
  142. posSize = Round(posSize, 0);
  143.  
  144. if posSize > Max_Contract then
  145.    posSize = Max_Contract
  146. else if posSize < Min_Contract then
  147.    posSize = Min_Contract;
  148.  
  149. CalcolaPositionSize = posSize;
  150.  
  151. print(posSize);
  152.  
  153.  
  154. // Entry / Exit condition Long
  155. if (close > open and close[1] > open[1]) then
  156.  
  157. begin;
  158.       Buy("Entry_long") posSize contracts next bar at market;
  159. end;
  160.  
  161. if (close < open and close[1] < open[1]) then
  162. begin;
  163.       Sell("Exit_long") from entry("Entry_long") next bar at market;
  164. end;}
  165.  
  166. // --------------------------------------------------- FINE MODIFICATO PER VARIE PROVE --------------------------------------------------- //
  167.  
  168.  
  169.  
  170.  
  171. // --------------------------------------------------- INIZIO ORIGINALE QTA INDICATORE FUNZIONE MONEY MANAGEMENT PINESCRIPT --------------------------------------------------- //
  172.  
  173.  
  174. {MM_Method = input(0, "MM_Method")
  175. FixedContracts = input(1, "FixedContracts")
  176. RiskFraction = input(1, "RiskFraction")
  177. Period_ATR = input(14, "Period_ATR")
  178. Min_Contract = input(1, "Min_Contract")
  179. Max_Contract = input(100, "Max_Contract")
  180. Monetary_Risk = input(1, "Monetary_Risk")
  181.  
  182. posSize = 0.0
  183. ATRValue = ta.atr(Period_ATR)
  184.  
  185. if (MM_Method == 0)
  186.     posSize := FixedContracts
  187. else if (MM_Method == 1)
  188.     posSize := ((RiskFraction / 100) * na) / Monetary_Risk
  189. else if (MM_Method == 2)
  190.     if (ATRValue * close) > 0
  191.         posSize := Monetary_Risk / (ATRValue * close)
  192.    
  193. posSize := math.round(posSize)
  194.  
  195. if posSize > Max_Contract
  196.     posSize := Max_Contract
  197. else if posSize < Min_Contract
  198.     posSize := Min_Contract}
  199.  
  200.  
  201. // --------------------------------------------------- FINE ORIGINALE QTA INDICATORE FUNZIONE MONEY MANAGEMENT PINESCRIPT --------------------------------------------------- //
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement