Advertisement
Maurizio-Ciullo

Indicatore Money Management

Nov 29th, 2023
1,028
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //@version=5
  2.  
  3. // Il trading system completo - Swing-Trend-Trailing ETH/USDT.P BYBIT 4H LONG E SHORT (Strategia Trend Following Con Swing Di Posizione)
  4. // (Sviluppo Dati Exchange = FTX)
  5. // (Exchange= BYBIT) (Sottostante ETH-USDT.P) (Timeframe= 4H) (Direzione= LONG E SHORT) (Swing Posizione= SI) (Esclusione Ore=NO) (Esclusione Giorni=NO') (Esclusione Mesi=NO)
  6. // (Take Profit Long/Short Market = Trailing) (Take Profit Limit Long/Short= NO)
  7. // (Stop Loss Limit Long/Short= -10%) (Stop Loss Market Long/Short= SI) (Stop Loss Market Long/Short= SI) (Trailing Stop=SI) (Stop Emergenza= NO)
  8. // (Rischio Operazione 2% Perdita Media) (Max Drawdown Permesso 10,21%)
  9. // (In Sample Dal=17/08/2017 Al 17/10/2020) (Out Of Sample Dal=18/10/2020 Al 15/03/2021)
  10. // (Progettatta Il=15/03/2021)
  11.  
  12.  
  13. strategy(title='Indicatore Money Management', overlay=true,
  14.          max_bars_back=5000, // Serve Per Caricare Più Storico Per Il Trailing Stop
  15.          pyramiding=0,
  16.          initial_capital=1000,
  17.          commission_type=strategy.commission.percent,
  18.          commission_value=0.1,
  19.          slippage=3,
  20.          default_qty_type=strategy.percent_of_equity,
  21.          precision=4,
  22.          default_qty_value=24)
  23.  
  24.  
  25. //////////////////////////////////////////////////////////////////////////// Start Money Management ////////////////////////////////////////////////////////////////////////////
  26. // Start Money Management //
  27. InitialCapital = input.float(defval = 1000, title="Initial Capital", group="Capital Management", step=0.1)
  28. FixedContracts = input.float(defval=1.0, minval=0.001, maxval=100000, step=0.001, title= "FixedContracts", group="Capital Management")
  29. EntryCapitalPercent = input.float(defval = 24, title="Entry Capital Percent", group="Capital Management", step=0.1)
  30.  
  31. MM_Method = input(0, "MM_Method", group="Money Management Method")
  32. Period_ATR = input(14, "Period ATR MM_Method", group="Atr/Adx MM_Method 5/12")
  33. Min_Contract = input.float(1, minval=0.001, step=0.001, title="Min_Contract", group="Money Management Method")
  34. Max_Contract = input.float(100, minval=0.001, step=0.001, title="Max_Contract", group="Money Management Method")
  35. MaxcontractBalancePerc = input.int(defval=10, minval=1, maxval=100000, step=1, title= "Max Contract Balance Perc", group="Money Management Method", tooltip="Max Balance Percent Size Allowed")
  36. OnOffContractBalancePerc = input.bool(defval=false, title= "On-Off Contract Balance Perc", group="Money Management Method")
  37. OnOffContractMaxMin = input.bool(defval=false, title= "On-Off ContractMaxMin", group="Money Management Method")
  38. Monetary_Risk = input.float(defval=74.07, minval=0.0001, maxval=100000, step=0.1, title="Monetary_Risk", group="Percent F", tooltip = "Put Your Monetary Stop Loss Or If No Data, The Average Monetary Stop Loss")
  39. RoundPositionSize = input.bool(defval=false, title= "Round Position Size", group="Money Management Method")
  40.  
  41. StopLossPercent = input.float(defval = 10, title="Stop Loss Percent MM_Method", group="Take Profit / Stop Loss EM-Risk/EM-RiskBalance%", step=0.1)
  42. TakeProfitPercent = input.float(defval = 10, title="Take Profit Percent MM_Method", group="Take Profit / Stop Loss EM-Risk/EM-RiskBalance%", step=0.1)
  43.  
  44. MaxDrawdownPercentCalculator = input.float(defval = 70, maxval= 100, title="Max Drawdown Percent Calculator", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= "Calculate Plot % Of Max Drawdown Strips. All Size Strips Must be the Same to Entry Capital Percent before the calculation !!!.")
  45. StartFirstStrip = input.float(defval = -6.58, title="Start First Strip", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= " % Of Max Drawdown Where Strip 1 Begins")
  46. EndFirstStrip = input.float(defval = -7.52, title="End First Strip", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= " % Of Max Drawdown Where 1 Strip Ends")
  47. StartSecondStrip = input.float(defval = -7.52, title="Start Second Strip", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= " % Of Max Drawdown Where Strip 2 Begins")
  48. EndSecondStrip = input.float(defval = -8.46, title="End Second Strip", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= " % Of Max Drawdown Where 2 Strip Ends")
  49. StartThirdStrip = input.float(defval = -8.46, title="Start Third Strip", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= " % Of Max Drawdown Where Strip 3 Begins")
  50. EndThirdStrip = input.float(defval = -100, title="End Third Strip", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= " % Of Max Drawdown Where 3 Strip Ends")
  51. SizePercentFirstStrip = input.float(defval = 21.6, title="Size Percent First Strip", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= " Size % 1 Strip")
  52. SizePercentSecondStrip = input.float(defval = 19.2, title="Size Percent Second Strip", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= " Size % 2 Strip")
  53. SizePercentThirdStrip = input.float(defval = 16.8, title="Size Percent Third Strip", step=0.1, group="Entry Capital/Balance Percent Relative DD Perc", tooltip= " Size % 3 Strip")
  54.  
  55. WorstLossRealized = input.float(defval = 230.14, minval = 0.1, maxval=100000, title="Worst Loss Realized", group="Percent F", step=0.1, tooltip= "Put Your Max Monetary Loss")
  56. MaxDDMonetaryLoss = input.float(defval = 1026.9578, minval = 0.1, maxval=100000, title="Max DD Monetary Loss", group="Percent F", step=0.1, tooltip= "Put Your Max DD Monetary Loss")
  57. Ratio = input.float(defval = 250, minval = 0.1, maxval=100000, title="Ratio", group="Fixed Ratio", step=0.1)
  58. FixedRationContractDecimals = input.string(defval = "1", title ="Fixed Ratio Contract Decimals", options = ["1", "0.1", "0.01", "0.001"], group="Fixed Ratio")
  59. inTruncate = input.int(defval=1, minval=1, maxval=100000, step=1, title= "Truncate", group="Fixed Ratio")
  60. FixedRatioContractsDebug = input.float(defval=1, minval=1, maxval=100000, step=1, title= "FixedRatioContractsDebug", group="Fixed Ratio")
  61.  
  62. StartAfterClosedTrades = input.int(defval=5, minval=1, maxval=100000, step=1, title= "Start After Closed Trades", group="Win/Loss Ratio", tooltip="Win/Loss Ratio MM_Method Will Start Woking After Input Closed Trades")
  63. WinLossPercentageSup = input.float(defval=35, minval=1, maxval=100, step=1, title= "Win Loss Percentage Sup", group="Win/Loss Ratio", tooltip="Set A Parameter Win Loss % Sup")
  64. WinLossPercentageInf = input.float(defval=25, minval=1, maxval=100, step=1, title= "Win Loss Percentage Inf", group="Win/Loss Ratio", tooltip="Set A Parameter Win Loss % Inf")
  65. SizeWinLossPercentageSup = input.float(defval=15, minval=1, maxval=100, step=1, title= "Size Win Loss Percentage =Sup", group="Win/Loss Ratio", tooltip="Change The Entry Size Win/Loss >= Input")
  66. SizeWinLossPercentageInf = input.float(defval=10, minval=1, maxval=100, step=1, title= "Size Win Loss Percentage =Inf", group="Win/Loss Ratio", tooltip="Change The Entry Size Win/Loss <= Input")
  67.  
  68. EntryCapitalPercentZScore = input.float(defval = 24, title="Entry Capital Percent Z Score", group="Z Score Trade Dependency", step=0.1)
  69. EntryCapitalPercentZScorePositiveStrips = input.float(defval = 10, title="Entry Capital Percent Z Score Positive Strips", group="Z Score Trade Dependency", step=0.1)
  70. EntryCapitalPercentZScoreNegativeStrips = input.float(defval = 5, title="Entry Capital Percent Z Score Negative Strips", group="Z Score Trade Dependency", step=0.1)
  71. MaxPositiveStrips = input.int(defval = 2, minval=0, title="Max Positive Strips", group="Z Score Trade Dependency", step=1, tooltip = "If Count Won Trades == Input, Position Size = Entry Capital Percent Z Score Positive Strips, [If 0 Entry Capita lPercent Z Score]")
  72. MaxNegativeStrips = input.int(defval = 2, minval=0, title="Max Negative Strips", group="Z Score Trade Dependency", step=1, tooltip = "If Count Lost Trades == Input, Position Size = Entry Capital Percent Z Score Negative Strips, [If 0 Entry Capital Percent Z Score]")
  73.  
  74.  
  75. // Truncate() truncates a given number to the specified number of decimals.
  76. Truncate(number, decimals) =>
  77.     factor = math.pow(10, decimals)
  78.     int(number * factor) / factor
  79.  
  80. // Start Indicatore Atr
  81. ATRValue = ta.atr(Period_ATR)
  82. plot(MM_Method == 5 or MM_Method == 6 or MM_Method == 7 or MM_Method == 8 ? ATRValue : na, title="ATR Value MM_Method", display = display.data_window)
  83.  
  84. // Start Indicatore Adx
  85. len = input.int(14, maxval=100, minval=1, title="DI Length MM_Method", group="Atr/Adx MM_Method 5/12")
  86. lensig = input.int(14, title="ADX Smoothing MM_Method", minval=1, maxval=50, group="Atr/Adx MM_Method 5/12")
  87. [_, _, adx] = ta.dmi(len, lensig)
  88. plot(MM_Method == 9 or MM_Method == 10 or MM_Method == 11 or MM_Method == 12 ? adx : na, color=color.red, title="ADX Value MM_Method", display = display.data_window)
  89. hline(25)
  90.  
  91. // Calcolo Win/Rate %
  92. win_rate = (strategy.wintrades / strategy.closedtrades) * 100
  93. plot(win_rate, title="% Win Rate", display = display.data_window)
  94.  
  95. // Get the biggest max Win/Loss Ration value from all of the closed trades.
  96. maxWinLossRatio() =>
  97.     var maxWinLossRatio = 0.0
  98.     skipFirstCalculation = false
  99.     skipFirstCalculation := strategy.closedtrades > StartAfterClosedTrades ? true : false
  100.     if skipFirstCalculation == true
  101.         for tradeNo = 0 to strategy.closedtrades - 1
  102.             maxWinLossRatio := math.max(maxWinLossRatio, win_rate[tradeNo])
  103.             result = maxWinLossRatio
  104. plot(maxWinLossRatio(), "% Max Win/Loss Ratio", display = display.data_window)
  105.  
  106.  // Get the lowest min Win/Loss Ration value from all of the closed trades.
  107. minWinLossRatio() =>
  108.     var minWinLossRatio = 100
  109.     skipFirstCalculation = false
  110.     skipFirstCalculation := strategy.closedtrades > StartAfterClosedTrades ? true : false
  111.     if skipFirstCalculation == true
  112.         for tradeNo = 0 to strategy.closedtrades - 1
  113.             minWinLossRatio := math.min(minWinLossRatio, win_rate[tradeNo])
  114.             result = minWinLossRatio
  115. plot(minWinLossRatio(), "% Min Win/Loss Ratio", display = display.data_window)
  116.  
  117. // // Start checking if last trade was lost
  118. // var lastTradeWasLoss = false
  119. // if (strategy.losstrades[0] > strategy.losstrades[1])
  120. //     // // last trade was a loss
  121. //     lastTradeWasLoss := true  
  122. // if (strategy.wintrades[0] > strategy.wintrades[1])
  123. //     // // successful trade, reset
  124. //     lastTradeWasLoss := false
  125. // plotshape(MM_Method == 24 or MM_Method == 25 ? lastTradeWasLoss : na, title="Last Trade Was Loss", color=color.red)                              
  126. // bgcolor((MM_Method == 24 or MM_Method == 25) and lastTradeWasLoss == 1 ? color.red : lastTradeWasLoss == 0 ? color.green : na, transp=90)        
  127.  
  128. // // Debug last Trade Was Loss "It Swithes from 0 to 1 everytime the entire strip changes from win to loss"
  129. // // if strategy.closedtrades != strategy.closedtrades[1]
  130. // //     log.info(str.tostring(lastTradeWasLoss), "lastTradeWasLoss")
  131. // // End checking if last trade was lost
  132.  
  133. // // Counter Win And Lost Trades
  134. var countLostTrades = 0
  135. var countWonTrades = 0
  136. if (strategy.losstrades[0] > strategy.losstrades[1])
  137.     countLostTrades := countLostTrades - 1
  138. else if (strategy.wintrades[0] > strategy.wintrades[1])
  139.     countLostTrades := 0
  140. if (strategy.wintrades[0] > strategy.wintrades[1])
  141.     countWonTrades := countWonTrades + 1
  142. else if (strategy.losstrades[0] > strategy.losstrades[1])
  143.     countWonTrades := 0
  144. plot(countLostTrades, title="Count Lost Trades", color=color.red, display = display.data_window)              
  145. plot(countWonTrades, title="Count Won Trades", color=color.green, display = display.data_window)    
  146. plotshape(MM_Method == 24 or MM_Method == 25 ? countLostTrades : na, title="Count Lost Trades Plotshape", color=color.red)              
  147. plotshape(MM_Method == 24 or MM_Method == 25 ? countWonTrades : na, title="Count Won Trades Plotashape", color=color.green)            
  148.  
  149. // // Debug count Lost Trades E count Won Trades One By One
  150. // if strategy.closedtrades != strategy.closedtrades[1] and countLostTrades != 0
  151. //     log.info(str.tostring(countLostTrades), "countLostTrades")
  152. // if strategy.closedtrades != strategy.closedtrades[1] and countWonTrades != 0
  153. //     log.info(str.tostring(countWonTrades), "countWonTrades")
  154.  
  155.  
  156. /////////////////////////////////////////////////////////////// Start Strips Win/Loss Max Trades Plotter. It returns the maximum of the strip. ///////////////////////////////////////////////////////////////
  157.  
  158. //////////////////////// Start Bar Index Returns the bar index at the beginning/end of the strip. Not Needed "keep commented". ////////////////////////
  159. // plot(bar_index, title="Bar Index")
  160.  
  161. // var startBarIndex = 0.0
  162. // if countLostTrades[0] < 0 and countLostTrades[1] == 0
  163. //     startBarIndex := bar_index
  164. // plot(startBarIndex, title="Start Bar Index")
  165. // plotshape(countLostTrades[0] < 0 and countLostTrades[1] == 0, title="Start Bar Index Plotshape", color=color.green, size=size.normal)
  166.  
  167. // var endBarIndex = 0.0
  168. // if countWonTrades[0] > 0 and countWonTrades[1] == 0
  169. //     endBarIndex := bar_index
  170. // plot(endBarIndex, title="End Bar Index")
  171. // plotshape(countWonTrades[0] > 0 and countWonTrades[1] == 0, title="End Bar Index Plotshape", color=color.red, size=size.normal)
  172. //////////////////////// End Bar Index Returns the bar index at the beginning/end of the strip. Not Needed "keep commented". ////////////////////////
  173.  
  174.  
  175. maxStripWonTrades = 0
  176. if countLostTrades[0] < 0 and countLostTrades[1] == 0
  177.     maxStripWonTrades := countWonTrades[1]
  178. plot(maxStripWonTrades, title="Max Strip Won Trades", display = display.data_window)
  179. plotshape((MM_Method == 24 or MM_Method == 25) and countLostTrades[0] < 0 and countLostTrades[1] == 0 ? countLostTrades[0] < 0 and countLostTrades[1] == 0 : na, title="Start Bar Index Plotshape", color=color.green, size=size.normal)
  180.  
  181. maxStripLostTrades = 0
  182. if countWonTrades[0] > 0 and countWonTrades[1] == 0
  183.     maxStripLostTrades := countLostTrades[1]
  184. plot(maxStripLostTrades, title="Max Strip Lost Trades", display = display.data_window)
  185. plotshape((MM_Method == 24 or MM_Method == 25) and countWonTrades[0] > 0 and countWonTrades[1] == 0 ? countWonTrades[0] > 0 and countWonTrades[1] == 0 : na, title="End Bar Index Plotshape", color=color.red, size=size.normal)
  186.  
  187.  
  188. // // // Debug Start Strips Win/Loss Max Trades Plotter.                          
  189. if (MM_Method == 24 and maxStripWonTrades != 0) or (MM_Method == 25 and maxStripWonTrades != 0)
  190.     log.info(str.tostring(maxStripWonTrades), "Max Strip Won Trades")
  191. //    log.info("\nMax Strip Won Trades : {0}" , str.tostring(maxStripWonTrades))      // More detailed logs !!!
  192. if (MM_Method == 24 and maxStripLostTrades != 0) or (MM_Method == 25 and maxStripLostTrades != 0)
  193.     log.info(str.tostring(maxStripLostTrades), "Max Strip Lost Trades")
  194. //    log.info("\nMax Strip Lost Trades : {0}" , str.tostring(maxStripLostTrades))    // More detailed logs !!!
  195.  
  196.  
  197. /////////////////////////////////////////////////////////////// End Strips Win/Loss Max Trades Plotter. It returns the maximum of the strip. ///////////////////////////////////////////////////////////////
  198.  
  199. Balance = (InitialCapital + strategy.netprofit)    
  200.  
  201. FixedEntryPercentSize = (((InitialCapital) * EntryCapitalPercent) / 100) / close
  202. EntryBalancePercent = (((InitialCapital + strategy.netprofit) * EntryCapitalPercent) / 100) / close
  203. EntryMonetaryRisk = ((InitialCapital * EntryCapitalPercent) / 100) / StopLossPercent  * 100  / close
  204. plot(MM_Method == 3 ? EntryMonetaryRisk : na, title="Entry Monetary Risk", display = display.data_window)
  205. EntryMonetaryRiskBalancePercent = ((Balance * EntryCapitalPercent) / 100) / StopLossPercent  * 100  / close
  206. EntryAtrCapitalRisk = (InitialCapital * EntryCapitalPercent / ATRValue) / close // E' un'alternativa all'originale: (InitialCapital * EntryCapitalPercent / 100)  / (ATRValue * close) perchè se il capitale è piccolo entra con poco.
  207. EntryAtrCapitalRiskBalancePercent = (Balance * EntryCapitalPercent / ATRValue) / close  // E' un'alternativa all'originale: (Balance * EntryCapitalPercent / 100)  / (ATRValue * close) perchè se il capitale è piccolo entra con poco.
  208. EntryAtrCapitalRiskOrig = (InitialCapital * EntryCapitalPercent / 100)  / (ATRValue * close)
  209. EntryAtrCapitalRiskBalancePercentOrig = (Balance * EntryCapitalPercent / 100)  / (ATRValue * close)
  210. EntryAdxCapitalRisk = (InitialCapital * EntryCapitalPercent / adx) / close // E' un'alternativa all'originale: (InitialCapital * EntryCapitalPercent / 100)  / (adx * close) perchè se il capitale è piccolo entra con poco.
  211. EntryAdxCapitalRiskBalancePercent = (Balance * EntryCapitalPercent / adx) / close // E' un'alternativa all'originale: (Balance * EntryCapitalPercent / 100)  / (adx * close) perchè se il capitale è piccolo entra con poco.
  212. EntryAdxCapitalRiskOrig = (InitialCapital * EntryCapitalPercent / 100)  / (adx * close)
  213. EntryAdxCapitalRiskBalancePercentOrig = (Balance * EntryCapitalPercent / 100)  / (adx * close)
  214. EntryCapitalPercentFMaxLoss = ((((InitialCapital) * EntryCapitalPercent) / 100) / WorstLossRealized)
  215. plot(MM_Method == 15 ? EntryCapitalPercentFMaxLoss : na, title="Entry Capital Percent F Max Loss", display = display.data_window)
  216. EntryBalancePercentFMaxLoss = ((((Balance) * EntryCapitalPercent) / 100) / WorstLossRealized)
  217. plot(MM_Method == 16 ? EntryBalancePercentFMaxLoss : na, title="Entry Balance Percent F Max Loss", display = display.data_window)
  218. EntryCapitalPercentFStopLoss = ((((InitialCapital) * EntryCapitalPercent) / 100) / Monetary_Risk)
  219. plot(MM_Method == 17 ? EntryCapitalPercentFStopLoss : na, title="Entry Capital Percent F Stop Loss", display = display.data_window)
  220. EntryBalancePercentFStopLoss = ((((Balance) * EntryCapitalPercent) / 100) / Monetary_Risk)
  221. plot(MM_Method == 18 ? EntryBalancePercentFStopLoss : na, title="Entry Balance Percent F Stop Loss", display = display.data_window)
  222. EntryCapitalPercentFMaxDDMonetaryLoss = ((((InitialCapital) * EntryCapitalPercent) / 100) / MaxDDMonetaryLoss) // Il Max Drawdown Absolute $ sarà la percentuale di rischio da noi scelta. I valori input MaxDDMonetaryLoss sono stati presi precedentemente con ingresso semplice ad 1 contratto.
  223. plot(MM_Method == 19 ? EntryCapitalPercentFMaxDDMonetaryLoss : na, title="Entry Capital Percent F Max DD Monetary Loss", display = display.data_window)
  224. EntryBalancelPercentFMaxDDMonetaryLoss = ((((Balance) * EntryCapitalPercent) / 100) / MaxDDMonetaryLoss) // Il Max Drawdown Absolute $ non sarà la percentuale di rischio da noi scelta perchè questa volta stiamo usando il Balance. I valori input MaxDDMonetaryLoss sono stati presi precedentemente con ingresso semplice ad 1 contratto.
  225. plot(MM_Method == 20 ? EntryBalancelPercentFMaxDDMonetaryLoss : na, title="Entry Balance Percent F Max DD Monetary Loss", display = display.data_window)
  226.  
  227.  
  228. // // Get the biggest max trade drawdown value from all of the closed trades.
  229. // maxTradeDrawDown() =>
  230. //     maxDrawdown = 0.0
  231. //     for tradeNo = 0 to strategy.closedtrades - 1
  232. //         maxDrawdown := math.max(maxDrawdown, strategy.closedtrades.max_drawdown(tradeNo))
  233. //     result = maxDrawdown
  234. // plot(maxTradeDrawDown(), "Biggest max drawdown")
  235.  
  236. // // Actual Equity (FUNZIONA)
  237. // InitialCapital = input.float(defval = 1000, title="Initial Capital", group="Capital Management", step=0.1)
  238. // Balance = (InitialCapital + strategy.netprofit)
  239. // plot(InitialCapital + strategy.netprofit, title="Actual Equity")
  240.  
  241. // // Highest Equity (FUNZIONA)
  242. // // GetEquityHigh() returns the highest equity that the strategy
  243. // // achieved during its backtest and subsequent real-time signals.
  244. // // Note: for accuracy call this function on every bar.
  245. GetEquityHigh() =>
  246.     var highestEquity = strategy.initial_capital
  247.     highestEquity := math.max(highestEquity, (InitialCapital + strategy.netprofit))
  248. plot(GetEquityHigh(), "Highest Equity", display = display.data_window)
  249.  
  250. // Max Drawdown Absolute $ (FUNZIONA)
  251. maxDrawdown = (strategy.max_drawdown/strategy.initial_capital * 1000)
  252. plot(maxDrawdown, title="Max Drawdown Absolute $", display = display.data_window)
  253.  
  254. // Massimo DD In %
  255. maxDrawdownPercent = ta.max(strategy.max_drawdown*100/(GetEquityHigh()))
  256. plot(maxDrawdownPercent, title="Max Drawdown Percent", display = display.data_window)
  257.  
  258. // Max Drawdown Percent Calculator
  259. maxDrawdownPercentPlotter = ((- maxDrawdownPercent) * MaxDrawdownPercentCalculator) / 100
  260. plot(maxDrawdownPercentPlotter, title="Max Drawdown Percent Calculator", display = display.data_window)
  261.  
  262. // Drawdown Relativo In $
  263. relativeDrawdownMonetary = Balance - GetEquityHigh()
  264. plot(relativeDrawdownMonetary, title="Relative Drawdown $", display = display.data_window)
  265.  
  266. // Drawdown Relativo In %
  267. relativeDrawdownPercent = (relativeDrawdownMonetary / GetEquityHigh()) * 100
  268. plot(relativeDrawdownPercent, title="Relative Drawdown Percent", display = display.data_window)
  269.  
  270.  
  271.                                                                        // New calculation Open Balance for swing position strips, it didn't work without open balance //                                                                    
  272.  
  273. openCommission = (strategy.opentrades.commission((strategy.opentrades - 1)))
  274. //plot(openCommission, title="Open Commission")
  275.  
  276. BalanceWithOpenProfit = Balance + strategy.openprofit
  277. //plot(BalanceWithOpenProfit, title="Balance With Open Profit")
  278.  
  279. OpenBalance = BalanceWithOpenProfit - openCommission
  280. plot(OpenBalance, title="Open Balance", display = display.data_window)
  281.  
  282. // // Drawdown Relativo In $
  283. relativeDrawdownMonetaryOB = OpenBalance - GetEquityHigh()
  284. plot(relativeDrawdownMonetaryOB, title="Open Relative Drawdown $", display = display.data_window)
  285.  
  286. // Drawdown Relativo In %
  287. relativeDrawdownPercentOB = (relativeDrawdownMonetaryOB / GetEquityHigh()) * 100
  288. plot(relativeDrawdownPercentOB, title="Open Relative Drawdown Percent", display = display.data_window)
  289.  
  290.  
  291. // //////////////// Start Plotshape Closed Balance
  292. // plotshape(relativeDrawdownPercent <= StartFirstStrip and relativeDrawdownPercent >= EndFirstStrip ? relativeDrawdownPercent : na, size=size.small, color=color.yellow)
  293. // plotshape(relativeDrawdownPercent <= (StartSecondStrip + 0.01) and relativeDrawdownPercent >= EndSecondStrip ? relativeDrawdownPercent : na, size=size.small, color=color.orange)
  294. // plotshape(relativeDrawdownPercent <= (StartThirdStrip + 0.01) and relativeDrawdownPercent >= EndThirdStrip ? relativeDrawdownPercent : na, size=size.small, color=color.red)
  295.  
  296. // //////////////// MM_Method == 14 ingresso con size minore all'aumentare del DD, qui il relative drawdown % è calcolato sull'closed balance. L'ingresso è in % al balance. "Non funziona sullo swing di posizione"
  297. // EntryBalancePercentRelativeDDPerc = 0.0
  298. // if relativeDrawdownPercent <= StartFirstStrip and relativeDrawdownPercent >= EndFirstStrip // Example: 70 % to 80% of Max DD "First Strip"
  299. //     EntryBalancePercentRelativeDDPerc := (((Balance) * SizePercentFirstStrip) / 100) / close // Example Entry: 90 % EntryCapitalPercent "First Strip"
  300. // else if relativeDrawdownPercent <= (StartSecondStrip + 0.01) and relativeDrawdownPercent >= EndSecondStrip // Example: 80 % to 90 % of Max DD "Second Strip"
  301. //     EntryBalancePercentRelativeDDPerc := (((Balance) * SizePercentSecondStrip) / 100) / close // Example Entry: 80 % EntryCapitalPercent "Second Strip"
  302. // else if relativeDrawdownPercent <= (StartThirdStrip + 0.01) and relativeDrawdownPercent >= EndThirdStrip // Example: 90 to 100 % of Max DD "Third Strip"
  303. //     EntryBalancePercentRelativeDDPerc := (((Balance) * SizePercentThirdStrip) / 100) / close // Example Entry: 70 % EntryCapitalPercent "Third Strip"
  304. // else
  305. //     EntryBalancePercentRelativeDDPerc := (((Balance) * EntryCapitalPercent) / 100) / close // Entry 100 % EntryCapitalPercent
  306. // //////////////// End Plotshape Closed Balance
  307.  
  308. // //////////////// Plotshape Open Balance  
  309. plotshape((MM_Method == 13 or MM_Method == 14) and relativeDrawdownPercentOB <= StartFirstStrip and relativeDrawdownPercentOB >= EndFirstStrip ? relativeDrawdownPercentOB : na, size=size.small, color=color.yellow, title="First Strip")
  310. plotshape((MM_Method == 13 or MM_Method == 14) and relativeDrawdownPercentOB <= (StartSecondStrip - 0.00001) and relativeDrawdownPercentOB >= EndSecondStrip ? relativeDrawdownPercentOB : na, size=size.small, color=color.orange, title="Second Strip")
  311. plotshape((MM_Method == 13 or MM_Method == 14) and relativeDrawdownPercentOB <= (StartThirdStrip - 0.00001) and relativeDrawdownPercentOB >= EndThirdStrip ? relativeDrawdownPercentOB : na, size=size.small, color=color.red, title="Third Strip")
  312.  
  313. // //////////////// MM_Method == 13 ingresso con size minore all'aumentare del DD, qui il relative drawdown % è calcolato sull'open balance. L'ingresso è in % al capitale iniziale. "Funziona anche con lo swing di posizione".
  314. EntryCapitalPercentRelativeDDPerc = 0.0
  315. if relativeDrawdownPercentOB <= StartFirstStrip and relativeDrawdownPercentOB >= EndFirstStrip // Example: 70 % to 80% of Max DD "First Strip"
  316.     EntryCapitalPercentRelativeDDPerc := (((InitialCapital) * SizePercentFirstStrip) / 100) / close // Example Entry: 90 % EntryCapitalPercent "First Strip"
  317. else if relativeDrawdownPercentOB <= (StartSecondStrip - 0.00001) and relativeDrawdownPercentOB >= EndSecondStrip // Example: 80 % to 90 % of Max DD "Second Strip"
  318.     EntryCapitalPercentRelativeDDPerc := (((InitialCapital) * SizePercentSecondStrip) / 100) / close // Example Entry: 80 % EntryCapitalPercent "Second Strip"
  319. else if relativeDrawdownPercentOB <= (StartThirdStrip - 0.00001) and relativeDrawdownPercentOB >= EndThirdStrip // Example: 90 to 100 % of Max DD "Third Strip"
  320.     EntryCapitalPercentRelativeDDPerc := (((InitialCapital) * SizePercentThirdStrip) / 100) / close // Example Entry: 70 % EntryCapitalPercent "Third Strip"
  321. else
  322.     EntryCapitalPercentRelativeDDPerc := (((InitialCapital) * EntryCapitalPercent) / 100) / close // Entry 100 % EntryCapitalPercent
  323.  
  324. // //////////////// MM_Method == 14 ingresso con size minore all'aumentare del DD, qui il relative drawdown % è calcolato sull'open balance. L'ingresso è in % al capitale del balance. "Funziona anche con lo swing di posizione".
  325. EntryBalancePercentRelativeDDPerc = 0.0
  326. if relativeDrawdownPercentOB <= StartFirstStrip and relativeDrawdownPercentOB >= EndFirstStrip // Example: 70 % to 80% of Max DD "First Strip"
  327.     EntryBalancePercentRelativeDDPerc := (((Balance) * SizePercentFirstStrip) / 100) / close // Example Entry: 90 % EntryCapitalPercent "First Strip"
  328. else if relativeDrawdownPercentOB <= (StartSecondStrip - 0.00001) and relativeDrawdownPercentOB >= EndSecondStrip // Example: 80 % to 90 % of Max DD "Second Strip"
  329.     EntryBalancePercentRelativeDDPerc := (((Balance) * SizePercentSecondStrip) / 100) / close // Example Entry: 80 % EntryCapitalPercent "Second Strip"
  330. else if relativeDrawdownPercentOB <= (StartThirdStrip - 0.00001) and relativeDrawdownPercentOB >= EndThirdStrip // Example: 90 to 100 % of Max DD "Third Strip"
  331.     EntryBalancePercentRelativeDDPerc := (((Balance) * SizePercentThirdStrip) / 100) / close // Example Entry: 70 % EntryCapitalPercent "Third Strip"
  332. else
  333.     EntryBalancePercentRelativeDDPerc := (((Balance) * EntryCapitalPercent) / 100) / close // Entry 100 % EntryCapitalPercent
  334.  
  335.  
  336. // Start Entry Fixed Ratio MM_Method == 21 //
  337. // (Imposta Input FixedContracts E Ratio E Fixed Ratio Contract Decimals E Truncate)
  338. EntryFixedRatio = 0.0
  339. RatioCalculation = 1 + 8 * strategy.netprofit / Ratio
  340. // Contratti Senza Decimali //                                                    
  341. if RatioCalculation > 0 and FixedRationContractDecimals == "1"
  342.     EntryFixedRatio := FixedContracts * int (0.5 * (1 + math.sqrt(RatioCalculation)) / FixedContracts)        
  343. //  EntryFixedRatio := FixedContracts *     (0.5 * (1 + math.sqrt(RatioCalculation)) / FixedContracts)
  344.  
  345.  
  346. // Diviso 10 Dall'originale per tradare size minori di un contratto, E con Truncate ESEGUE STEP DA 0.1 A 0.2 ETC... ATTENZIONE SOLO CON SIZE AD 1 DECIMALE: 0.1, 0.2 ETC ... IMPOSTA TRUNCATE A 1 E FixedRationContractDecimals A SECONDA DEI DECIMALI UTILIZZATI
  347. if RatioCalculation > 0 and FixedRationContractDecimals == "0.1"
  348.     EntryFixedRatio := FixedContracts *  (0.5 * (1 + math.sqrt(RatioCalculation)) / FixedContracts)  / 10 //
  349.     EntryFixedRatio := Truncate(EntryFixedRatio, inTruncate)
  350. // Diviso 100 e un'altro int aggiunto Dall'originale per tradare size minori di un contratto, ESEGUE STEP DA 0.01, 0.02, 0.03 ETC... ATTENZIONE SOLO CON SIZE AD 2 DECIMALI: 0.01, 0.02 ETC ... IMPOSTA TRUNCATE A 2 E FixedRationContractDecimals A SECONDA DEI DECIMALI UTILIZZATI
  351. if RatioCalculation > 0 and FixedRationContractDecimals == "0.01"
  352.     EntryFixedRatio := FixedContracts * int (0.5 * int (1 + math.sqrt(RatioCalculation)) / FixedContracts) / 100
  353.     EntryFixedRatio := Truncate(EntryFixedRatio, inTruncate)
  354. // Diviso 1000 e un'altro int aggiunto Dall'originale per tradare size minori di un contratto, ESEGUE STEP DA 0.001, 0.002, 0.003 ETC... ATTENZIONE SOLO CON SIZE AD 2 DECIMALI: 0.001, 0.002 ETC ... IMPOSTA TRUNCATE A 3 E FixedRationContractDecimals A SECONDA DEI DECIMALI UTILIZZATI
  355. if RatioCalculation > 0 and FixedRationContractDecimals == "0.001"
  356.     EntryFixedRatio := FixedContracts * int (0.5 * int (1 + math.sqrt(RatioCalculation)) / FixedContracts) / 1000
  357.     EntryFixedRatio := Truncate(EntryFixedRatio, inTruncate)
  358.  
  359.  
  360. if EntryFixedRatio < FixedContracts                                                                        
  361.     EntryFixedRatio := FixedContracts                                            
  362. plot(MM_Method == 21 ? EntryFixedRatio : na, title="Entry Fixed Ratio", display = display.data_window)
  363. // End Entry Fixed Ratio //
  364.  
  365.  
  366. // Start Entry Fixed Ratio Debug //
  367. // Per effettuare il Debug, inserire: EntryFixedRatioDubug in qty = EntryFixedRatioDubug della strategia e verificare le altre size se rispettano i decimali minori !!! .
  368. EntryFixedRatioDubug = 0.0
  369. RatioCalculationDubug = 1 + 8 * strategy.netprofit / Ratio
  370. // Contratti Senza Decimali //                                                    
  371. if RatioCalculationDubug > 0
  372.     EntryFixedRatioDubug := FixedRatioContractsDebug * int (0.5 * (1 + math.sqrt(RatioCalculationDubug)) / FixedRatioContractsDebug)        
  373. //  EntryFixedRatio := FixedContractsDebug *     (0.5 * (1 + math.sqrt(RatioCalculation)) / FixedContractsDebug)
  374.  
  375. if EntryFixedRatioDubug < FixedRatioContractsDebug                                                                        
  376.     EntryFixedRatioDubug := FixedRatioContractsDebug                                            
  377. plot(MM_Method == 21 ? EntryFixedRatioDubug : na, title="Entry Fixed Ratio Dubug", display = display.data_window)
  378. // End Entry Fixed Ratio Debug //
  379.  
  380.  
  381. // EntryCapitalPercentWinLossRatio Calculation MM_Method == 22
  382. EntryCapitalPercentWinLossRatio = 0.0
  383. if strategy.closedtrades <= StartAfterClosedTrades or strategy.closedtrades > StartAfterClosedTrades and (win_rate > WinLossPercentageInf and win_rate < WinLossPercentageSup)
  384.     EntryCapitalPercentWinLossRatio := FixedEntryPercentSize                                       // Debug 1 contratto
  385. if strategy.closedtrades > StartAfterClosedTrades and win_rate >= WinLossPercentageSup
  386.     EntryCapitalPercentWinLossRatio := ((InitialCapital * SizeWinLossPercentageSup) / 100) / close // Debug 2 contratti
  387. if strategy.closedtrades > StartAfterClosedTrades and win_rate <= WinLossPercentageInf
  388.     EntryCapitalPercentWinLossRatio := ((InitialCapital * SizeWinLossPercentageInf) / 100) / close // Debug 3 contratti
  389.  
  390. // EntryBalancePercentWinLossRatio Calculation MM_Method == 23
  391. EntryBalancePercentWinLossRatio = 0.0
  392. if strategy.closedtrades <= StartAfterClosedTrades or strategy.closedtrades > StartAfterClosedTrades and (win_rate > WinLossPercentageInf and win_rate < WinLossPercentageSup)
  393.     EntryBalancePercentWinLossRatio := EntryBalancePercent                                         // Debug 1 contratto
  394. if strategy.closedtrades > StartAfterClosedTrades and win_rate >= WinLossPercentageSup
  395.     EntryBalancePercentWinLossRatio := ((Balance * SizeWinLossPercentageSup) / 100) / close        // Debug 2 contratti
  396. if strategy.closedtrades > StartAfterClosedTrades and win_rate <= WinLossPercentageInf
  397.     EntryBalancePercentWinLossRatio := ((Balance * SizeWinLossPercentageInf) / 100) / close        // Debug 3 contratti
  398.  
  399. plotshape((MM_Method == 22 or MM_Method == 23) and strategy.closedtrades > StartAfterClosedTrades and win_rate >= WinLossPercentageSup ? true : na, size=size.small, color=color.green, title="Win Loss Percentage =Sup")
  400. plotshape((MM_Method == 22 or MM_Method == 23) and strategy.closedtrades > StartAfterClosedTrades and win_rate <= WinLossPercentageInf ? true : na, size=size.small, color=color.red, title="Win Loss Percentage =Inf")
  401.  
  402.  
  403. // Start Position Size Calculation
  404. openProfit = strategy.opentrades.profit(0)
  405. plot(openProfit, title = "Open Profit", display = display.data_window)
  406.  
  407. // Entry Capital Percent MM_Method 24
  408. EntryCapitalPercentZ_Score = countWonTrades == MaxPositiveStrips and MaxPositiveStrips != 0 and strategy.opentrades == 0 ? (((InitialCapital) * EntryCapitalPercentZScorePositiveStrips) / 100) / close : // Consecutive Win Trades // Debug 10 Contracts
  409.      countLostTrades == - MaxNegativeStrips and MaxNegativeStrips != 0 and strategy.opentrades == 0 ? (((InitialCapital) * EntryCapitalPercentZScoreNegativeStrips) / 100) / close : // Consecutive Lost Trades // Debug 5 Contracts
  410.          countWonTrades != MaxPositiveStrips and strategy.opentrades == 0 ? (((InitialCapital) * EntryCapitalPercentZScore) / 100) / close :            // Normal Capital % Entry // Debug 24 Contracts
  411.              countLostTrades != - MaxNegativeStrips and strategy.opentrades == 0 ? (((InitialCapital) * EntryCapitalPercentZScore) / 100) / close :     // Normal Capital % Entry // Debug 24 Contracts
  412.                  countLostTrades == (- MaxNegativeStrips + 1) and openProfit < 0 ? (((InitialCapital) * EntryCapitalPercentZScoreNegativeStrips) / 100) / close :       // Consecutive Lost Trades Per lo swing di posizione // Debug 5 Contracts
  413.                      countWonTrades == (MaxPositiveStrips - 1) and openProfit > 0 ? (((InitialCapital) * EntryCapitalPercentZScorePositiveStrips) / 100) / close :     // Consecutive Win Trades Per lo swing di posizione // Debug 10 Contracts
  414.                  (((InitialCapital) * EntryCapitalPercentZScore) / 100) / close
  415.  
  416. // Entry Balance Percent MM_Method 25
  417. EntryBalancePercentZ_Score = countWonTrades == MaxPositiveStrips and MaxPositiveStrips != 0 and strategy.opentrades == 0 ? (((Balance) * EntryCapitalPercentZScorePositiveStrips) / 100) / close : // Consecutive Win Trades // Debug 10 Contracts
  418.      countLostTrades == - MaxNegativeStrips and MaxNegativeStrips != 0 and strategy.opentrades == 0 ? (((Balance) * EntryCapitalPercentZScoreNegativeStrips) / 100) / close : // Consecutive Lost Trades // Debug 5 Contracts
  419.          countWonTrades != MaxPositiveStrips and strategy.opentrades == 0 ? (((Balance) * EntryCapitalPercentZScore) / 100) / close :            // Normal Capital % Entry // Debug 24 Contracts
  420.              countLostTrades != - MaxNegativeStrips and strategy.opentrades == 0 ? (((Balance) * EntryCapitalPercentZScore) / 100) / close :     // Normal Capital % Entry // Debug 24 Contracts
  421.                  countLostTrades == (- MaxNegativeStrips + 1) and openProfit < 0 ? (((Balance) * EntryCapitalPercentZScoreNegativeStrips) / 100) / close :       // Consecutive Lost Trades Per lo swing di posizione // Debug 5 Contracts
  422.                      countWonTrades == (MaxPositiveStrips - 1) and openProfit > 0 ? (((Balance) * EntryCapitalPercentZScorePositiveStrips) / 100) / close :     // Consecutive Win Trades Per lo swing di posizione // Debug 10 Contracts
  423.                  (((Balance) * EntryCapitalPercentZScore) / 100) / close
  424. // End Position Size Calculation
  425.  
  426.  
  427.  
  428. posSize = 0.0
  429.  
  430. if (MM_Method == 0)                                           // Contratti Fissi (Imposta Input FixedContracts) //
  431.     posSize := FixedContracts
  432. else if (MM_Method == 1)                                      // Monetario Fisso In Percentuale Al Capitale Iniziale (Imposta Input EntryCapitalPercent) //
  433.     posSize := FixedEntryPercentSize
  434. else if (MM_Method == 2)                                      // Monetario In Percentuale Al Balance (Imposta Input EntryCapitalPercent) //
  435.     posSize := EntryBalancePercent
  436. else if (MM_Method == 3)                                      // Rischio Monetario Fisso In Percentuale Al Capitale Iniziale (Imposta Imput EntryCapitalPercent E Stop Loss Percent MM_Method)
  437.     posSize := EntryMonetaryRisk
  438. else if (MM_Method == 4)                                      // Rischio Monetario Fisso In Percentuale Al Balance (Imposta Input EntryCapitalPercent E Stop Loss Percent MM_Method)                
  439.     posSize := EntryMonetaryRiskBalancePercent  
  440. else if (MM_Method == 5)                                      // Atr In % Al Rischio Del Capitale Iniziale (Imposta Input EntryCapitalPercent E Period_ATR E OnOffContractBalancePerc E MaxcontractBalancePerc)
  441.     if ATRValue > 0
  442.         posSize := EntryAtrCapitalRisk                                                            
  443. else if (MM_Method == 6)                                      // Atr In % Al Rischio Del Balance (Imposta Input EntryCapitalPercent E Period_ATR E OnOffContractBalancePerc E MaxcontractBalancePerc)
  444.     if ATRValue > 0    
  445.         posSize := EntryAtrCapitalRiskBalancePercent    
  446. else if (MM_Method == 7)                                      // Atr In % Al Rischio Del Capitale Iniziale Orig (Imposta Input EntryCapitalPercent E Period_ATR E OnOffContractBalancePerc E MaxcontractBalancePerc)
  447.     if (ATRValue * close) > 0                                  
  448.         posSize := EntryAtrCapitalRiskOrig
  449. else if (MM_Method == 8)                                      // Atr In % Al Rischio Del Balance Orig (Imposta Input EntryCapitalPercent E Period_ATR E OnOffContractBalancePerc E MaxcontractBalancePerc)
  450.     if (ATRValue * close) > 0
  451.         posSize := EntryAtrCapitalRiskBalancePercentOrig
  452. else if (MM_Method == 9)                                      // Adx In % Al Rischio Del Capitale Iniziale (Imposta Input EntryCapitalPercent E DI Length E ADX Smoothing E OnOffContractBalancePerc E MaxcontractBalancePerc)                      
  453.     if adx > 0
  454.         posSize := EntryAdxCapitalRisk
  455. else if (MM_Method == 10)                                     // Adx In % Al Rischio Del Balance (Imposta Input EntryCapitalPercent E DI Length E ADX Smoothing E OnOffContractBalancePerc E MaxcontractBalancePerc)
  456.     if adx > 0    
  457.         posSize := EntryAdxCapitalRiskBalancePercent
  458. else if (MM_Method == 11)                                    // Adx In % Al Rischio Del Capitale Iniziale Orig (Imposta Input EntryCapitalPercent E DI Length E ADX Smoothing E OnOffContractBalancePerc E MaxcontractBalancePerc)
  459.     if (adx * close) > 0
  460.         posSize := EntryAdxCapitalRiskOrig
  461. else if (MM_Method == 12)                                    // Adx In % Al Rischio Del Balance Orig (Imposta Input EntryCapitalPercent E DI Length E ADX Smoothing E OnOffContractBalancePerc E MaxcontractBalancePerc)
  462.     if (adx * close) > 0
  463.         posSize := EntryAdxCapitalRiskBalancePercentOrig
  464. else if (MM_Method == 13)                                    // Monetario In Percentuale Al Capitale Iniziale Diviso In Fasce Su EntryCapitalPercent In Base Alle Fasce Max DD % (Imposta EntryCapitalPercent E Start End Strip E Size Strip)
  465.     posSize := EntryCapitalPercentRelativeDDPerc
  466. else if (MM_Method == 14)                                    // Monetario In Percentuale Al Balance Diviso In Fasce Su EntryCapitalPercent In Base Alle Fasce Max DD % (Imposta EntryCapitalPercent E Start End Strip E Size Strip)
  467.     posSize := EntryBalancePercentRelativeDDPerc
  468. else if (MM_Method == 15)                                    // Monetario Fisso In Percentuale Al Capitale Iniziale Proporzionato Alla Massima Perdita Monetaria " Percent F Capitale Iniziale Max Loss " (Imposta Imput EntryCapitalPercent E Worst Loss Realized)    
  469.     posSize := EntryCapitalPercentFMaxLoss
  470. else if (MM_Method == 16)                                    // Monetario Fisso In Percentuale Al Balance Proporzionato Alla Massima Perdita Monetaria " Percent F Balance Max Loss " (Imposta Imput EntryCapitalPercent E Worst Loss Realized)    
  471.     posSize := EntryBalancePercentFMaxLoss
  472. else if (MM_Method == 17)                                    // Monetario Fisso In Percentuale Al Capitale Iniziale Proporzionato Allo Stop Loss Monetario " Percent F Capitale Iniziale Stop Loss Monetario " (Imposta Imput EntryCapitalPercent E Monetary_Risk E OnOffContractBalancePerc E MaxcontractBalancePerc)
  473.     posSize := EntryCapitalPercentFStopLoss
  474. else if (MM_Method == 18)                                    // Monetario Fisso In Percentuale Al Balance Proporzionato Allo Stop Loss Monetario " Percent F Balance Stop Loss Monetario " (Imposta Imput EntryCapitalPercent E Monetary_Risk E OnOffContractBalancePerc E MaxcontractBalancePerc)
  475.     posSize := EntryBalancePercentFStopLoss
  476. else if (MM_Method == 19)                                    // Monetario Fisso In Percentuale Al Capitale Iniziale Proporzionato Al Massimo DD Monetario " Percent F Capitale Iniziale Max DD Monetario " (Imposta Imput EntryCapitalPercent E Max DD Monetary Loss E OnOffContractBalancePerc E MaxcontractBalancePerc)
  477.     posSize := EntryCapitalPercentFMaxDDMonetaryLoss
  478. else if (MM_Method == 20)                                    // Monetario Fisso In Percentuale Al Balance Proporzionato Al Massimo DD Monetario " Percent F Balance Max DD Monetario " (Imposta Imput EntryCapitalPercent E Max DD Monetary Loss E OnOffContractBalancePerc E MaxcontractBalancePerc)    
  479.     posSize := EntryBalancelPercentFMaxDDMonetaryLoss
  480. else if (MM_Method == 21)                                    // Monetario Fisso A Step Decisi Dal Delta Sul Sul Balance Raggiunto "Entry Fixed Ratio" (Imposta Input FixedContracts E Ratio E Fixed Ratio Contract Decimals E Truncate)
  481.     posSize := EntryFixedRatio
  482. else if (MM_Method == 22)                                    // Monetario In Percentuale Al Capitale Iniziale Win/Loss Ratio (Imposta Input EntryCapitalPercent E Start After Closed Trades E Win Loss Percentage Sup/Inf E Size Win Loss Percentage =Sup/=Inf)
  483.     posSize := EntryCapitalPercentWinLossRatio
  484. else if (MM_Method == 23)                                    // Monetario In Percentuale Al Balance Win/Loss Ratio (Imposta Input EntryCapitalPercent E Start After Closed Trades E Win Loss Percentage Sup/Inf E Size Win Loss Percentage =Sup/=Inf)
  485.     posSize := EntryBalancePercentWinLossRatio
  486. if (MM_Method == 24)                                         // Monetario In Percentuale Al Capitale Iniziale Win/Loss Z-Score (Imposta Input Entry Capital Percent Z Score E Entry Capital Percent Z Score Positive/Negative Strips E Max Positive/Negative Strips)
  487.     posSize := EntryCapitalPercentZ_Score
  488. if (MM_Method == 25)                                         // Monetario In Percentuale Al Balance Win/Loss Z-Score (Imposta Input Entry Capital Percent Z Score E Entry Capital Percent Z Score Positive/Negative Strips E Max Positive/Negative Strips)
  489.     posSize := EntryBalancePercentZ_Score
  490.  
  491. // Round Position Size
  492. if RoundPositionSize == true
  493.     posSize := math.round(posSize)
  494.  
  495. // Do not execeed over the max size
  496. MaxSizeBalcePerc = ((Balance * MaxcontractBalancePerc) / 100) / close
  497. plot(MaxSizeBalcePerc, title="Max Size Balance Perc", display = display.data_window)
  498.  
  499. if posSize > Max_Contract and OnOffContractMaxMin == true and not OnOffContractBalancePerc
  500.     posSize := Max_Contract
  501. else if posSize > MaxSizeBalcePerc and OnOffContractBalancePerc == true and not OnOffContractMaxMin  // MaxSizeBalcePerc usato solo per Metodi che usano Atr e Adx siccome con la formula originale basata sul rischio capitale entrava con troppa poca size avendo capitali troppo bassi
  502.     posSize := MaxSizeBalcePerc                                                                      // ho modificato la formula ma non faccio mai eccedere la size di ingresso con il mio massimo capitale del balance perchè tradingview non se ne rende conto e mi fa entrate anche con size oltre il capitale disponibile.
  503. else if posSize < Min_Contract and OnOffContractMaxMin == true and not OnOffContractBalancePerc
  504.     posSize := Min_Contract
  505. else if OnOffContractMaxMin == true and OnOffContractBalancePerc == true
  506.     posSize := 0.0
  507.  
  508. plot(posSize, title="Position Size MM_Method", display = display.data_window)
  509. plot(InitialCapital + strategy.netprofit, title="Closed Balance", display = display.data_window)
  510. plot(OnOffContractMaxMin == true and not OnOffContractBalancePerc ? Max_Contract: na, title="Max Contract", display = display.data_window)
  511. plot(OnOffContractMaxMin == true and not OnOffContractBalancePerc ? Min_Contract: na, title="Min Contract", display = display.data_window)
  512.  
  513.  
  514.  
  515.  
  516. // Monitoraggio posizione
  517. bought = strategy.position_size[0]> strategy.position_size[1]
  518. Close_TP = false    
  519. Close_TP := strategy.position_size[1] - strategy.position_size[0] and strategy.position_size[1] != 0 and strategy.position_size[0] != 0
  520.  
  521. plotshape(Close_TP,title="Close_TP", style=shape.xcross, color=color.blue, size =size.small, editable = true)
  522. plot(strategy.position_size[1],"Position Old", display = display.data_window)
  523. plot(strategy.position_size,"Position", display = display.data_window)
  524.  
  525.  
  526. /////////////////////////////////////////////////////////////// Start Array's Table And Won/Loss Strips Counter ///////////////////////////////////
  527. // Table Inputs
  528. fattoreArrotondamento = input.int(1, "Fattore di arrotondamento",options = [1,10,100,1000,10000,100000, 1000000, 10000000], group="Array Table")
  529. posizione = input.string("bottom_right", "posizione tabella", ["bottom_left", "bottom_center", "bottom_right", "middle_left", "middle_center", "middle_right", "top_left", "top_center" ,"top_right"], group="Array Table")
  530. coloreBarreBullish = input.color(color.rgb(47, 159, 68), "Colore celle bullish", group="Array Table")
  531. coloreBarreBearish = input.color(color.rgb(227, 65, 65), "Colore celle bearish", group="Array Table")
  532. coloreSfondoTabella = input.color(color.rgb(53, 61, 68), "Colore sfondo tabella", group="Array Table")
  533. coloreEtichetteSfondo = input.color(color.rgb(19, 50, 70), "Colore sfondo etichetta", group="Array Table")
  534. coloreEtichetteTesto = input.color(color.rgb(255, 255, 255), "Colore testo etichetta", group="Array Table")
  535. dimensioneTesto = input.string("small", "Dimensione Carattere", options=["tiny", "small", "normal", "large", "huge"], group="Array Table")
  536.  
  537. // Creating a table and cells
  538. var tabellaInfo = table.new(position = posizione, columns = 100, rows = 100, bgcolor = coloreSfondoTabella)
  539. table.cell(tabellaInfo, 0, 0, "MaxStripWonTrades", text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign= text.align_center)
  540. table.cell(tabellaInfo, 0, 1, "MaxStripLostTrades", text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign= text.align_center)
  541. table.cell(tabellaInfo, 0, 2, "MaxStripWonLostTrades", text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign= text.align_center)
  542.  
  543.  
  544. // Count Total Won/Lost Strips                                
  545. var contTotalStrips = 0
  546. if maxStripWonTrades > 0
  547.     contTotalStrips := contTotalStrips +1
  548. if maxStripLostTrades < 0
  549.     contTotalStrips := contTotalStrips +1
  550. plot(contTotalStrips, title="Cont Total Strips", display = display.data_window)
  551.  
  552. // Count Total Won Strips
  553. var contWonStrips = 0
  554. if maxStripWonTrades > 0
  555.     contWonStrips := contWonStrips +1
  556. plot(contWonStrips, title="Cont Won Strips", display = display.data_window)
  557.  
  558. // Count Total Lost Strips
  559. var contLostStrips = 0
  560. if maxStripLostTrades < 0
  561.     contLostStrips := contLostStrips +1
  562. plot(contLostStrips, title="Cont Lost Strips", display = display.data_window)
  563.  
  564.  
  565. // Creating three arrays to detect their size
  566. var arrayTotalStrips = array.new_float(contTotalStrips, 0)
  567. var arrayMaxStripWonTrades = array.new_float(contWonStrips, 0)
  568. var arrayMaxStripLostTrades = array.new_float(contLostStrips, 0)
  569.  
  570. // Put a variable results into an array
  571. if maxStripWonTrades != 0
  572.     array.push(arrayMaxStripWonTrades, maxStripWonTrades)
  573.  
  574. if maxStripLostTrades != 0
  575.     array.push(arrayMaxStripLostTrades, maxStripLostTrades)
  576.  
  577. if maxStripLostTrades != 0
  578.     array.push(arrayTotalStrips, maxStripWonTrades)
  579.     array.push(arrayTotalStrips, maxStripLostTrades)
  580.  
  581. // // Loop all the array size and display all the lenght on the screen with table.cell "arrayMaxStripWonTrades"
  582. // for i=0 to array.size(arrayMaxStripWonTrades)-1
  583. //     table.cell(tabellaInfo, i+1, 0, str.tostring(i), text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign=text.align_center)
  584. table.cell(tabellaInfo, 2, 0, str.tostring(array.size(arrayMaxStripWonTrades)), text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign=text.align_center)
  585. for i=0 to 0
  586.     table.cell(tabellaInfo, i+1, 0, str.tostring(arrayMaxStripWonTrades), text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign=text.align_center)
  587.  
  588. // // Loop all the array size and display all the lenght on the screen with table.cell "arrayMaxStripLostTrades"
  589. // for i=0 to array.size(arrayMaxStripLostTrades)-1
  590. //    table.cell(tabellaInfo, i+1, 1, str.tostring(i), text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign=text.align_center)
  591. table.cell(tabellaInfo, 2, 1, str.tostring(array.size(arrayMaxStripLostTrades)), text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign=text.align_center)
  592. for i=0 to 0
  593.     table.cell(tabellaInfo, i+1, 1, str.tostring(arrayMaxStripLostTrades), text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign=text.align_center)
  594.  
  595. // // Loop all the array size and display all the lenght on the screen with table.cell "arrayTotalStrips"
  596. // for i=0 to array.size(arrayTotalStrips)-1
  597.     // table.cell(tabellaInfo, i+1, 2, str.tostring(i), text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign=text.align_center
  598. for i=0 to 0
  599.     table.cell(tabellaInfo, i+1, 2, str.tostring("") + str.tostring(contTotalStrips) , text_color = coloreEtichetteTesto, text_size = dimensioneTesto, text_halign=text.align_center)
  600.  
  601. /////////////////////////////////////////////////////////////// End Array's Table And Won/Loss Strips Counter ///////////////////////////////////
  602.  
  603.  
  604. /////////////////////////////////////////////////////////////// Start Change Size Z-Score Labels MM_Method 24/25 ///////////////////////////////////
  605. // Create a label when size changes
  606. ChangePositionSize_Z_Score =  countWonTrades == MaxPositiveStrips and MaxPositiveStrips != 0 and strategy.opentrades[1] == 0 and strategy.opentrades == 1 ? true :                                                               // No Swing Position
  607.      countLostTrades == - MaxNegativeStrips and MaxNegativeStrips != 0 and strategy.opentrades[1] == 0 and strategy.opentrades == 1 ? true :                                                                     // No Swing Position
  608.          countWonTrades == MaxPositiveStrips and MaxPositiveStrips != 0 and strategy.opentrades[1] == 1 and strategy.opentrades == 1 and strategy.position_size[1] != strategy.position_size ? true :            // Swing Position
  609.              countLostTrades == - MaxNegativeStrips and MaxNegativeStrips != 0 and strategy.opentrades[1] == 1 and strategy.opentrades == 1 and strategy.position_size[1] != strategy.position_size ? true : na  // Swing Position
  610.  
  611. plotshape(MM_Method == 24 or MM_Method == 25 ? ChangePositionSize_Z_Score : na, title= "Change Position Size Z-Score", color=color.fuchsia, size = size.large)
  612.  
  613. labelChange = ""
  614. if (MM_Method == 24 or MM_Method == 25) and ChangePositionSize_Z_Score == true
  615.     labelChange := countWonTrades == MaxPositiveStrips ? "Change_Size: " + str.tostring(EntryCapitalPercentZScorePositiveStrips) + " %" :    
  616.          countLostTrades == - MaxNegativeStrips ? "Change_Size: " + str.tostring(EntryCapitalPercentZScoreNegativeStrips) + " %" : na        
  617.      
  618.     label.new(bar_index, na, text=labelChange, yloc=yloc.abovebar, color=color.red)
  619. /////////////////////////////////////////////////////////////// End Change Size Z-Score Labels MM_Method 24/25 ///////////////////////////////////
  620.  
  621.  
  622.  
  623. //////////////////////////////////////////////////////////////////////////// Start Table ////////////////////////////////////////////////////////////////////////////
  624. average_loss = - (strategy.grossloss / strategy.losstrades)
  625. plot(average_loss, title="Average Loss", display=display.data_window)
  626.  
  627. in_portfolio_risk_percentage = input.float(defval= 2, minval=0, maxval=100, title="Portfolio Risk Percentage", group="Table Inputs", tooltip = "Show The Risk Fraction In The Table")
  628. average_risk_allowed = (strategy.initial_capital * in_portfolio_risk_percentage) / 100
  629.  
  630. // Max Trade Loss In $
  631. worstMonetaryLoss = 0.0
  632. for i = 0 to strategy.losstrades// number of total trades
  633.     worstMonetaryLoss:= ta.lowest(strategy.closedtrades.profit(i), 1)
  634. plot(worstMonetaryLoss, title="Worst Loss $ Realized", display = display.data_window)
  635.  
  636.  
  637. tab1 = table.new(position.top_right, 8, 8, color.white, chart.bg_color, 6, chart.bg_color, 2)
  638. string MMType = MM_Method == 0 ? "FixedContracts"
  639.      : MM_Method == 1 ? "FixedEntryPercentSize"
  640.      : MM_Method == 2 ? "EntryBalancePercent"
  641.      : MM_Method == 3 ? "EntryMonetaryRisk"
  642.      : MM_Method == 4 ? "EntryMonetaryRiskBalancePercent"
  643.      : MM_Method == 5 ? "EntryAtrCapitalRisk"
  644.      : MM_Method == 6 ? "EntryAtrCapitalRiskBalancePercent"
  645.      : MM_Method == 7 ? "EntryAtrCapitalRiskOrig"
  646.      : MM_Method == 8 ? "EntryAtrCapitalRiskBalancePercentOrig"
  647.      : MM_Method == 9 ? "EntryAdxCapitalRisk"
  648.      : MM_Method == 10 ? "EntryAdxCapitalRiskBalancePercent"
  649.      : MM_Method == 11 ? "EntryAdxCapitalRiskOrig"
  650.      : MM_Method == 12 ? "EntryAdxCapitalRiskBalancePercentOrig"
  651.      : MM_Method == 13 ? "EntryCapitalPercentRelativeDDPerc"
  652.      : MM_Method == 14 ? "EntryBalancePercentRelativeDDPerc"
  653.      : MM_Method == 15 ? "EntryCapitalPercentFMaxLoss"
  654.      : MM_Method == 16 ? "EntryBalancePercentFMaxLoss"  
  655.      : MM_Method == 17 ? "EntryCapitalPercentFStopLoss"  
  656.      : MM_Method == 18 ? "EntryBalancePercentFStopLoss"  
  657.      : MM_Method == 19 ? "EntryCapitalPercentFMaxDDMonetaryLoss"
  658.      : MM_Method == 20 ? "EntryBalancelPercentFMaxDDMonetaryLoss"
  659.      : MM_Method == 21 ? "EntryFixedRatio"
  660.      : MM_Method == 22 ? "EntryCapitalPercentWinLossRatio"
  661.      : MM_Method == 23 ? "EntryBalancePercentWinLossRatio"  
  662.      : MM_Method == 24 ? "EntryCapitalPercentZ_Score"
  663.      : MM_Method == 25 ? "EntryBalancePercentZ_Score"  : na  
  664.  
  665. table.cell(tab1, 0, 0, 'Money Management Type: ', text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  666. table.cell(tab1, 1, 0, MMType , text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  667. table.cell(tab1, 0, 1, 'Initial Capital: ', text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  668. table.cell(tab1, 1, 1, str.tostring(strategy.initial_capital ), text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  669. table.cell(tab1, 0, 2, 'Portfolio Risk Percentage: ', text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  670. table.cell(tab1, 1, 2, str.tostring(in_portfolio_risk_percentage), text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  671. table.cell(tab1, 0, 3, 'Average Loss Allowed: ', text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  672. table.cell(tab1, 1, 3, str.tostring(- average_risk_allowed), text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  673. table.cell(tab1, 0, 4, 'Average Loss Realized: ', text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  674. table.cell(tab1, 1, 4, str.tostring(average_loss), text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  675. table.cell(tab1, 0, 5, 'Worst Loss Realized: ', text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  676. table.cell(tab1, 1, 5, str.tostring(worstMonetaryLoss), text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  677.  
  678.  
  679. tab2 = table.new(position.top_center, 8, 8, color.white, chart.bg_color, 6, chart.bg_color, 2)
  680. string MMType2 = MM_Method == 0 ? "FixedContracts"
  681.      : MM_Method == 1 ? "EntryCapitalPercent"
  682.      : MM_Method == 2 ? "EntryBalancePercent"
  683.      : MM_Method == 3 ? "EntryCapitalPercent/Stop Loss Percent MM_Method"
  684.      : MM_Method == 4 ? "EntryCapitalPercent/Stop Loss Percent MM_Method"
  685.      : MM_Method == 5 ? "EntryCapitalPercent/Period_ATR/OnOffContractBalancePerc/MaxcontractBalancePerc"
  686.      : MM_Method == 6 ? "EntryCapitalPercent/Period_ATR/OnOffContractBalancePerc/MaxcontractBalancePerc"
  687.      : MM_Method == 7 ? "EntryCapitalPercent/Period_ATR/OnOffContractBalancePerc/MaxcontractBalancePerc"
  688.      : MM_Method == 8 ? "EntryCapitalPercent/Period_ATR/OnOffContractBalancePerc/MaxcontractBalancePerc"
  689.      : MM_Method == 9 ? "EntryCapitalPercent/DI Length/ADX Smoothing/OnOffContractBalancePerc/MaxcontractBalancePerc"
  690.      : MM_Method == 10 ? "EntryCapitalPercent/DI Length/ADX Smoothing/OnOffContractBalancePerc/MaxcontractBalancePerc"
  691.      : MM_Method == 11 ? "EntryCapitalPercent/DI Length/ADX Smoothing/OnOffContractBalancePerc/MaxcontractBalancePerc"
  692.      : MM_Method == 12 ? "EntryCapitalPercent/DI Length/ADX Smoothing/OnOffContractBalancePerc/MaxcontractBalancePerc"
  693.      : MM_Method == 13 ? "EntryCapitalPercent/Start End Strip/Size Strip"
  694.      : MM_Method == 14 ? "EntryCapitalPercent/Start End Strip/Size Strip"
  695.      : MM_Method == 15 ? "EntryCapitalPercent/Worst Loss Realized"
  696.      : MM_Method == 16 ? "EntryCapitalPercent/Worst Loss Realized"  
  697.      : MM_Method == 17 ? "EntryCapitalPercent/Monetary_Risk/OnOffContractBalancePerc/MaxcontractBalancePerc"  
  698.      : MM_Method == 18 ? "EntryCapitalPercent/Monetary_Risk/OnOffContractBalancePerc/MaxcontractBalancePerc"  
  699.      : MM_Method == 19 ? "EntryCapitalPercent/Max DD Monetary Loss/OnOffContractBalancePerc/MaxcontractBalancePerc"
  700.      : MM_Method == 20 ? "EntryCapitalPercent/Max DD Monetary Loss/OnOffContractBalancePerc/MaxcontractBalancePerc"
  701.      : MM_Method == 21 ? "FixedContracts/Ratio/Fixed Ratio Contract Decimals/Truncate"
  702.      : MM_Method == 22 ? "EntryCapitalPercent/Start After Closed Trades/Win Loss Percentage Sup_Inf/Size Win Loss Percentage =Sup_=Inf"
  703.      : MM_Method == 23 ? "EntryCapitalPercent/Start After Closed Trades/Win Loss Percentage Sup_Inf/Size Win Loss Percentage =Sup_=Inf"  
  704.      : MM_Method == 24 ? "Entry Capital Percent Z Score/Entry Capital Percent Z Score Positive_Negative Strips/Max Positive_Negative Strips"
  705.      : MM_Method == 25 ? "Entry Capital Percent Z Score/Entry Capital Percent Z Score Positive_Negative Strips/Max Positive_Negative Strips"  : na
  706.  
  707. table.cell(tab2, 0, 0, 'Inputs: ', text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  708. table.cell(tab2, 1, 0, MMType2 , text_halign=text.align_left, text_size=size.normal, text_color=#424242, bgcolor=color.new(#84e59e, 20))
  709. //////////////////////////////////////////////////////////////////////////// End Table ////////////////////////////////////////////////////////////////////////////
  710.  
  711.  
  712. //////////////////////////////////////////////////////////////////////////// End Money Management ////////////////////////////////////////////////////////////////////////////
  713.  
  714. // {
  715.  
  716.                                                                     // Spiegazione Money Management //
  717.  
  718. ////////////////////////////////////////////////// 1) MM_Method == 0 / Contratti Fissi (Puro) ///////////////////////////////////////////////////////////
  719.  
  720. // Compro sempre lo stesso numero di pezzi senza fare caso del valore del sottosatante che cambia nel tempo.
  721. // ES: entrata 1 pezzo uguale al sottostante: 457,23 / pezzi = (1) / stop 20% = 91,446 $
  722. // ES: entrata 1 pezzo uguale al sottostante: 2000 / pezzi = (1) / stop 20% = 400 $
  723. // lo stop monetario è maggiore perchè il sottostante quota di più e pagandolo di più entro con più size perdendo di più, vale anche la prova contraria quando vale meno.
  724.  
  725. // Possiamo dire che entrando sempre con la stessa size e avendo uno stop in % sempre uguale, lo stop in $ cambia ed il tk in $ cambia a seconda di quanto è quotato il sottostante.
  726. // Se io nella 1ma operazione prendo uno stop di 91,446 $ e nella 2nda operazione potrei prendere uno stop di 400 $ anche se lo stop in % è uguale
  727. // Anche se ho uno stop dinamico tipo media il discorso è sempre uguale, cambia solo che la % di stop che cambia avendo una media o indicatore quindi condizioni di uscite dettate dalla strategia.
  728. // Entrambi i modi potrebbero influire tanto sull'equity portandomi a DD molto veloci anche in poche operazione non avendo sotto controllo la perdita in $.
  729. // Questo metodo lo vedo meglio sul buy and hold e non sul trading.
  730.  
  731. ////////////////////////////////////////////////// 2) MM_Method == 1 / Monetario Fisso (Ingresso In % Del Capitale Iniziale) ///////////////////////////////////////////////////////////
  732.  
  733. // Entro sempre con un controvalore monetario definito ES: Il 10% Del Capitale Iniziale acquistando il numero di pezzi variabili che cambiano nel tempo a  seconda della quotazione del sottostante.
  734. // ES: Prendo una frazione del capitale Iniziale con il quale voglio entrare in posizione e userò sempre quella.
  735. // Questo tipo di entrata è più bianciata in quanto se ho uno stop fisso in % perderò sempre la stessa somma di denaro perchè la size di ingresso è sempre uguale adeguandosi alla quotazione del sottosatante.
  736. // Diverso è se non ho uno stop fisso in % perchè la strategia semplicemente esce in stop a seconda delle condizioni di uscita che potrebbero avere uno stop più largo o più stretto delle operazioni precedenti.
  737. // Da notare che la perdita monetaria sarà la percentuale dello stop calcolata sulla size di ingresso quindi se entro con il 2% di 1000$ non perderò 20$ ma perderò la % di stop dei 20$ "sempre se ho uno stop loss fisso" altrimenti lo stop sarà variabile se l'uscita non ha uno stop loss fisso.
  738.  
  739. ////////////////////////////////////////////////// 3) MM_Method == 2 / Ingresso In % Del Balance ///////////////////////////////////////////////////////////
  740.  
  741. // L'EntryBalancePercent permette di entrare con una % del capitale prestabilita che ovviamente cambierà al cambiare della mia equity.
  742. // Questo tipo di ingresso risulta bilanciato accellerando a rialzo il volume di ingresso quando le cose vanno bene ed al contrario riducendo il volume di ingresso quando le cose vanno male.
  743. // Come pro abbiamo la situazione descritta sopra ma come contro abbiamo che la perdite ricevute dopo un grande periodo run up saranno più consistenti.
  744. // Lo stop monetario cambia sia che usiamo uno stop fisso in % sia che abbiamo altri tipi di stop dettati dalla strategia.
  745.  
  746. ////////////////////////////////////////////////// 4) MM_Method == 3 / Rischio Monetario Fisso (In % Del Capitale Iniziale) ///////////////////////////////////////////////////////////
  747.  
  748. // Questo metodo permette di entrare con una size impostata sulla perdita stabilita dalla nostra strategia perdendo sempre lo stesso importo monetario per strategie che hanno uno stop prestabilito.
  749. // Per ragioni di comodità il rapporto della perdita è stato impostato in % al capitale iniziale
  750. // ES: voglio perdere il 2% del capitale iniziale : 1000 * 2 /100 = 20$ entrerò in posizione con una size dove andrò a perdere 20$.
  751. // ES: voglio perdere il 4% del capitale iniziale : 1000 * 4 /200 = 40$ entrerò in posizione con una size dove andrò a perdere 40$.
  752. // Per strategie dove lo stop è variabile dettato dalle regole di uscita tipo medie o altro la perdita ricevuta non sarà sempre uguale ma cambierà di trade in trade a seconda delle regole di uscita della strategia.
  753.  
  754. // ESEMPIO CONCRETO: PERDITA CALCOLATA 20$..... STOP LOSS 14,20% .... (20$ / 14,20%) * 100 = SIZE INGRESSO 140,84$ /  CLOSE(2.175,59) = SIZE IN PEZZI ()
  755. // PEZZI(0,064)
  756.  
  757. // perdita calcolata = initial capitale * risk percent / 100 = stop loss monetario
  758. // stop loss monetario / stop loss percentuale * 100 = SIZE INGRESSO
  759. // SIZE INGRESSO / close = pezzi da acquistare
  760.  
  761. ////////////////////////////////////////////////// 5) MM_Method == 4 Rischio Monetario Fisso (In % Del Balance) ///////////////////////////////////////////////////////////
  762.  
  763. // Questo metodo permette di entrare con una size impostata sulla perdita in % al balance stabilita dalla nostra strategia perdendo sempre la stessa % anche se lo stop loss % cambia, l'importo monetario di stop cambia nel tempo al cambiare della nostra equity per strategie che hanno uno stop prestabilito ma rispecchierà sempre la perdita % della nostra equity.
  764. // Questo tipo di approccio favorisce l'ingresso con size maggiori quando le cose vanno bene e al contrario riduce la size quando le cose vanno male.
  765. // Il contro di questo approccio è che dopo un perido di grandi profitti le prime perdite vicine subite dopo il grande guadagno saranno più consistenti.
  766. // Per ragioni di comodità il rapporto della perdita è stato impostato in % al capitale dell'equity che cambia
  767. // ES: voglio perdere il 2% dell'equity : 1000 * 2 /100 = 20$ entrerò in posizione con una size dove andrò a perdere 20$ anche se lo stop loss in % della strategia può essere impostato più o meno ampio.
  768. // ES: voglio perdere il 2% dell'equity : 1050 * 2 /200 = 21$ entrerò in posizione con una size dove andrò a perdere 21$ anche se lo stop loss in % della strategia può essere impostato più o meno ampio.
  769. // Per strategie dove lo stop è variabile dettato dalle regole di uscita tipo medie o altro la perdita ricevuta non potrà rispettare il criterio della perdita in % sull'equity perchè lo stp loss non è fisso ma varia a seconda delle regole di uscita della strategia.
  770.  
  771. // perdita calcolata = equity * risk percent / 100 = stop loss monetario
  772. // stop loss monetario / stop loss percentuale * 100 = SIZE INGRESSO
  773. // SIZE INGRESSO / close = pezzi da acquistare
  774.  
  775. ////////////////////////////////////////////////// 6) MM_Method == 5 Atr In % Al Rischio Del Capitale Iniziale ///////////////////////////////////////////////////////////
  776.  
  777. // La formula originale è questa: (InitialCapital * EntryCapitalPercent / 100)  / (ATRValue * close)
  778. // Solo che con la formula originale abbiamo un problema: Quando il capitale è troppo piccolo la size di ingresso è praticamente minima allora ho risolto nel modo che segue controllando che la size non eccede il mio balance usando: OnOffContractBalancePerc E MaxcontractBalancePerc
  779.  
  780. // ABBIAMO USATO IL METODO 2 IN BASSO: // 2 (RiskFraction % * Capitale) / atr = pezzi     (2 * 1000) / 24 = 83,33 $
  781. // ABBIAMO UN CAPITALE INIZIALE FISSO E IN BASE AL NOSTRO RISCHIO ES IL 2% DEL CAPITALE E ANCHE IN BASE ALL'ATR SI ENTRA IN POSIZIONE.
  782. // QUESTO TIPO DI ENTRATA PERMETTERA' UNA SIZE MAGGIORE QUANDO L'ATR E MINORE E VICE VERSA.
  783. // DOVREBBE SMUSSARE L'EQUITY DATO CHE QUANDO IL RISCHIO SI ALZA ENTRIAMO CON MENO CAPITALE
  784. // RIGUARDA SOLO L'ENTRATA E NON LA DIMENSIONE DELLA PERDITA O STOP LOSS, LA PERDITA CHE CAMBIARA' IN BASE ALLA DIMENSIONE DEL NOSTRO STOP O USCITA STRATEGIA MEDIE ETC... ED AL TIPO DI SIZE CHE HA CALCOLATO
  785.  
  786.  
  787.  
  788. // 1 RiskFraction / atr = pezzi
  789. // 2 (RiskFraction % * Capitale / atr) / close = pezzi     (2 * 1000) / 24"ATR" = 83,33 $    DA DIVIDERE PER LA CLOSE !!!
  790. // 3 (RiskFraction $ * Capitale / atr) / close = pezzi     (20 * 1000) / 24"ATR" = 833,33 $  DA DIVIDERE PER LA CLOSE !!!
  791. // a = 100 / (ATRValue * close)
  792. // plot(a, title="a")
  793.  
  794.  
  795. // 2 size = 2 * 1000 / ATRValue
  796. // plot(size, title="size")
  797.  
  798. ////////////////////////////////////////////////// 7) MM_Method == 6 Atr In % Al Rischio Del Balance ///////////////////////////////////////////////////////////
  799.  
  800. // La formula originale è questa: (Balance * EntryCapitalPercent / 100)  / (ATRValue * close)
  801. // Solo che con la formula originale abbiamo un problema: Quando il capitale è troppo piccolo la size di ingresso è praticamente minima allora ho risolto nel modo che segue controllando che la size non eccede il mio balance usando: OnOffContractBalancePerc E MaxcontractBalancePerc
  802.  
  803. // ABBIAMO USATO IL METODO 2 IN BASSO: // 2 (RiskFraction % * Capitale) / atr = pezzi     (2 * 1000) / 24 = 83,33 $
  804. // ABBIAMO UN CAPITALE CHE SI MUOVE "BALANCE" E IN BASE AL NOSTRO RISCHIO ES IL 2% DEL BALANCE E ANCHE IN BASE ALL'ATR SI ENTRA IN POSIZIONE.
  805. // QUESTO TIPO DI ENTRATA PERMETTERA' UNA SIZE MAGGIORE QUANDO L'ATR E MINORE E VICE VERSA ED E' DA PIU' O MENO PESO ALLA SIZE DI INGRESSO A SECONDA SE IL BALANCE SALE O SCENDE.
  806. // DOVREBBE SMUSSARE L'EQUITY DATO CHE QUANDO IL RISCHIO SI ALZA ENTRIAMO CON MENO CAPITALE E ANCHE AL FATTO CHE USIAMO IL BALANCE.
  807. // RIGUARDA SOLO L'ENTRATA E NON LA DIMENSIONE DELLA PERDITA O STOP LOSS, LA PERDITA CHE CAMBIARA' IN BASE ALLA DIMENSIONE DEL NOSTRO STOP O USCITA STRATEGIA MEDIE ETC... ED AL TIPO DI SIZE CHE HA CALCOLATO
  808.  
  809.  
  810.  
  811. // 1 RiskFraction / atr = pezzi
  812. // 2 (RiskFraction % * Capitale / atr) / close = pezzi     (2 * 1000) / 24"ATR" = 83,33 $    DA DIVIDERE PER LA CLOSE !!!
  813. // 3 (RiskFraction $ * Capitale / atr) / close = pezzi     (20 * 1000) / 24"ATR" = 833,33 $  DA DIVIDERE PER LA CLOSE !!!
  814. // a = 100 / (ATRValue * close)
  815. // plot(a, title="a")
  816.  
  817.  
  818. // 2 size = 2 * 1000 / ATRValue
  819. // plot(size, title="size")
  820.  
  821. ////////////////////////////////////////////////// 8) MM_Method == 7 Atr In % Al Rischio Del Capitale Iniziale Orig ///////////////////////////////////////////////////////////
  822.  
  823. // Questo metodo è simile al: MM_Method == 5 Atr In % Al Rischio Del Capitale Iniziale ma usa la formula originale dove la percentuale di capitale che vogliamo rischiare in ingresso in posizione è divisa per l'atr e
  824. // poi ovviamente ancora divisa per la close per ottenere il numero di pezzi da acquistare.
  825.  
  826. ////////////////////////////////////////////////// 9) MM_Method == 8 Atr In % Al Rischio Del Balance Orig ///////////////////////////////////////////////////////////
  827.  
  828. // Questo metodo è simile al: MM_Method == 6 Atr In % Al Rischio Del Balance ma usa la formula originale dove la percentuale di capitale che vogliamo rischiare in ingresso in posizione è divisa per l'atr e
  829. // poi ovviamente ancora divisa per la close per ottenere il numero di pezzi da acquistare.
  830.  
  831. ////////////////////////////////////////////////// 10) MM_Method == 9 Adx In % Al Rischio Del Capitale Iniziale //////////////////////////////////////////////////
  832.  
  833. // La formula originale è questa: (InitialCapital * EntryCapitalPercent / 100)  / (adx * close)
  834. // Solo che con la formula originale abbiamo un problema: Quando il capitale è troppo piccolo la size di ingresso è praticamente minima allora ho risolto nel modo che segue controllando che la size non eccede il mio balance usando: OnOffContractBalancePerc E MaxcontractBalancePerc
  835.  
  836. // E' come l'atr solo che usa adx, questo è impostato sul capitale iniziale.
  837.  
  838. ////////////////////////////////////////////////// 11) MM_Method == 10 Adx In % Al Rischio Del Balance //////////////////////////////////////////////////
  839.  
  840. // La formula originale è questa: (Balance * EntryCapitalPercent / 100)  / (adx * close)
  841. // Solo che con la formula originale abbiamo un problema: Quando il capitale è troppo piccolo la size di ingresso è praticamente minima allora ho risolto nel modo che segue controllando che la size non eccede il mio balance usando: OnOffContractBalancePerc E MaxcontractBalancePerc
  842.  
  843. // E' come l'atr solo che usa adx, questo è impostato sul balance.
  844.  
  845. ////////////////////////////////////////////////// 12) MM_Method == 11 Adx In % Al Rischio Del Capitale Iniziale Orig //////////////////////////////////////////////////
  846.  
  847. // Questo metodo è simile al: MM_Method == 9 Adx In % Al Rischio Del Capitale Iniziale ma usa la formula originale dove la percentuale di capitale che vogliamo rischiare in ingresso in posizione è divisa per l'adx e
  848. // poi ovviamente ancora divisa per la close per ottenere il numero di pezzi da acquistare.
  849.  
  850. ////////////////////////////////////////////////// 13) MM_Method == 12 Adx In % Al Rischio Del Balance Orig //////////////////////////////////////////////////
  851.  
  852. // Questo metodo è simile al: MM_Method == 10 Adx In % Al Rischio Del Balance ma usa la formula originale dove la percentuale di capitale che vogliamo rischiare in ingresso in posizione è divisa per l'adx e
  853. // poi ovviamente ancora divisa per la close per ottenere il numero di pezzi da acquistare.
  854.  
  855. ////////////////////////////////////////////////// 14) MM_Method == 13 Monetario In Percentuale Al Capitale Iniziale Diviso In Fasce Su EntryCapitalPercent In Base Alle Fasce Max DD % //////////////////////////////////////////////////
  856.  
  857. // Queste tecnica usa la % del capitale iniziale, entra a fasce sempre minori di size se il relative drawdown % aumenta, le fasce sono state fatte sul EntryCapitalPercent
  858. // si ritorna pian piano alla size originale se il relativo drawdown % diminuisce o si azzera.
  859.                                                             // Modo di utilizzo //
  860. // Con l'input Max MaxDrawdownPercentCalculator andiamo a calcolare la percentuale di Drawdown che desideriamo e sul plot otteniamo i valori che andremo ad inserire nella costruzione delle fasce.
  861. // Attenzione prima di usare il MaxDrawdownPercentCalculator tutte le size "sia Entry Capital Percent che tutte le size quelle delle fasce" devono essere uguali prima del calcolo, altrimenti cambierà il Max Drawdown !!!
  862.  
  863. // Creazione delle fasce ES: del 90%, 80%, 70% sul massimo drawdown
  864. // Una volta create le fasce sul massimo drawdown la size di ingresso in posizione sarà sempre a fasce ES: del 90%, 80%, 70% ma dell'EntryCapitalPercent
  865. // ES: Capitale Iniziale = 1500, ingresso deciso con il 25% del Capitale Iniziale. 1500 * 25 / 100 = 250$ da convertire in pezzi ...
  866. // prendo i 250$ e creo delle fasce del 90%, 80%, 70% sui 250$
  867. // se il relative drawdown aumenta ed è nella 1ma fascia allora farò: 250$ * il 90% del 25% "che era la percententuale di size stabilita all'inizio" e mi ricava i pezzi...
  868. // continuo con questo metodo anche con le altre fasce.
  869.  
  870. ////////////////////////////////////////////////// 15) MM_Method == 14 Monetario In Percentuale Al Balance Diviso In Fasce Su EntryCapitalPercent In Base Alle Fasce Max DD % //////////////////////////////////////////////////
  871.  
  872. // Queste tecnica usa la % del balance, entra a fasce sempre minori di size se il relative drawdown % aumenta, le fasce sono state fatte sul EntryCapitalPercent
  873. // si ritorna pian piano alla size originale se il relativo drawdown % diminuisce o si azzera.
  874.                                                             // Modo di utilizzo //
  875. // Con l'input Max MaxDrawdownPercentCalculator andiamo a calcolare la percentuale di Drawdown che desideriamo e sul plot otteniamo i valori che andremo ad inserire nella costruzione delle fasce.
  876. // Attenzione prima di usare il MaxDrawdownPercentCalculator tutte le size "sia Entry Capital Percent che tutte le size quelle delle fasce" devono essere uguali prima del calcolo, altrimenti cambierà il Max Drawdown !!!
  877.  
  878. // Creazione delle fasce ES: del 90%, 80%, 70% sul massimo drawdown
  879. // Una volta create le fasce sul massimo drawdown la size di ingresso in posizione sarà sempre a fasce ES: del 90%, 80%, 70% ma dell'EntryCapitalPercent
  880. // ES: Balance = 1500, ingresso deciso con il 25% del balance. 1500 * 25 / 100 = 250$ da convertire in pezzi ...
  881. // prendo i 250$ e creo delle fasce del 90%, 80%, 70% sui 250$
  882. // se il relative drawdown aumenta ed è nella 1ma fascia allora farò: 250$ * il 90% del 25% "che era la percententuale di size stabilita all'inizio" e mi ricavo i pezzi...
  883. // continuo con questo metodo anche con le altre fasce.
  884.  
  885. ////////////////////////////////////////////////// 16) MM_Method == 15 Monetario Fisso In Percentuale Al Capitale Iniziale Proporzionato Alla Massima Perdita Monetaria " Percent F Capitale Iniziale Max Loss " //////////////////////////////////////////////////
  886.  
  887. // E' il Percent F Capitale Iniziale Max Loss.
  888.  
  889. // Prendo il capitale iniziale, ne traggo una pecentuale di rischio e la adatto alla massima perdita monetaria realizzata dell'intera strategia caricata precedentemente ad 1 contratto fisso.
  890. // In questo modo la massima pedita realizzata della strategia sarà sempre uguale alla mia percentuale di rischio scelta.
  891.  
  892.                                     // UTILIZZO PRATICO //
  893. // Impostare MM_Method Ingresso Contratti Fissi con 1 contratto e vedere la massima perdita dell'intera strategia in termini monetari.
  894. // Impostare MM_Method EntryCapitalPercentFMaxLoss, Entry Capital Percent e Worst Loss Realized con la perdita massima monetaria derivata da 1 contratto fisso.
  895. // Il worst case scenario, può essere utilizzato su vari parametri: Peggior Perdita Storica, Stop Loss Della Strategia, Media Degli Ultimi "n" Peggior Trade, Worst Time Performance "Weelly, Daily, etc..", Max Drawdown Storico % o Monatario
  896.  
  897. // Pro: E' molto utile per uniformare solamente strategie di natura simile avendo un rischio della massima perdita controllata.
  898. // Contro: Solitamente entra con troppo poco capitale.
  899. // Contro: Se ho delle perdite molto grandi ma rarissime, rischio di entrare sempre nella strategia con una size troppio piccola.
  900. // Contro: Non posso uniformare tutte le strategie, specialmente se alcune strategie rimangono in trade molto tempo e altre pochissimo tempo.
  901. // Contro: Non posso uniformare tutte le strategie, strategie con stop grandi saranno sottodimensionate, vale l'opposto con stop troppo piccoli.
  902.  
  903. ////////////////////////////////////////////////// 17) MM_Method == 16 Monetario Fisso In Percentuale Al Balance Proporzionato Alla Massima Perdita Monetaria " Percent F Balance Max Loss " //////////////////////////////////////////////////
  904.  
  905. // E' simile al " Percent F Initial Capital Max Loss " solo che fa riferimento al Balance e non al Capitale Iniziale.
  906. // Da notare che il report finale cambia: Profitto, Max loss In $, Max Drawdown etc... Cambiano anche se imposto la frazione del capitale rischiata al 2% come per il capitale iniziale.
  907. // Da notare che anche se aggiusto la frazione del capitale rischiata all'equivalente della massima perdita come per il capitale iniziale le metriche rimangono comunque diverse.
  908.  
  909. ////////////////////////////////////////////////// 18) MM_Method == 17 Monetario Fisso In Percentuale Al Capitale Iniziale Proporzionato Allo Stop Loss Monetario " Percent F Capitale Iniziale Stop Loss Monetario " //////////////////////////////////////////////////
  910.  
  911. // E' simile al Percent F Capitale Iniziale Max Loss solo che invece delle Massima Pedita si basa sullo Stop Loss Monetario.
  912. // A differenza del Percent F Capitale Iniziale Max Loss è più aggressivo.
  913. // Impostare la size minima e massima in percentuale al capitale per non eccedere con la size oltre al capitale a disposizione: OnOffContractBalancePerc E MaxcontractBalancePerc.
  914. // Se non abbiamo strategie con una perdita monetaria, potremmo usare la perdita media monetaria della strategia come valore di Imput di Monetary_Risk
  915.  
  916. ////////////////////////////////////////////////// 19) MM_Method == 18 Monetario Fisso In Percentuale Al Balance Proporzionato Allo Stop Loss Monetario " Percent F Balance Stop Loss Monetario " //////////////////////////////////////////////////
  917.  
  918. // E' uguale al Percent F Capitale Iniziale Stop Loss Monetario solo che usa il Balance invece del capitale iniziale.
  919.  
  920. ////////////////////////////////////////////////// 20) MM_Method == 19 Monetario Fisso In Percentuale Al Capitale Iniziale Proporzionato Al Massimo DD Monetario " Percent F Capitale Iniziale Max DD Monetario " //////////////////////////////////////////////////
  921.  
  922. // E' simile al Percent F Capitale Iniziale Stop Loss Monetario " solo che fa riferimento al Al Massimo DD Monetario ".
  923. // E' una money management molto cauto forse anche troppo. Il massimo drawdown monetario di tutta la strategia sarà uguale alla percentuale di rischio "in termini monetari" del capitale che abbiamo scelto noi.
  924. // L'input: Max DD Monetary Loss viene preso dai valori con un money management semplice con ingresso a 1 contratto e poi gli stessi valori inseriti nell'input di questo money management.
  925.  
  926. ////////////////////////////////////////////////// 21) MM_Method == 20 Monetario Fisso In Percentuale Al Balance Proporzionato Al Massimo DD Monetario " Percent F Balance Max DD Monetario " //////////////////////////////////////////////////    
  927.  
  928. // E' uguale al Percent F Capitale Iniziale Proporzionato Al Massimo DD Monetario solo che usa il Balance invece del capitale iniziale.
  929. // Il massimo drawdown monetario di tutta la strategia questa volta usando il Balance non sarà uguale alla percentuale di rischio "in termini monetari" del capitale che abbiamo scelto noi.
  930. // L'input: Max DD Monetary Loss viene preso dai valori con un money management semplice con ingresso a 1 contratto e poi gli stessi valori inseriti nell'input di questo money management.
  931.  
  932. ////////////////////////////////////////////////// 22) MM_Method == 21 Monetario Fisso A Step Decisi Dal Delta Sul Sul Balance Raggiunto "Entry Fixed Ratio" //////////////////////////////////////////////////
  933.  
  934. // Il Fixed Ratio prevede di partire con una size fissa che viene decisa a priori e solo quando viene raggiunto una somma monetaria "delta, o ratio" decisa sempre a priori
  935. // si aumenta o diminuisce la size solo quando ogni contratto in uso ha portato un certo di livello di profitto ossia il "Delta".
  936. // La size che aumenta o diminuisce è stata decisa dal delta per ogni singola size, ovvero per ogni size decisa inizialente ci sarà un delta che verrà aggiunto o diminuito.
  937.  
  938. // ES: Capitale = 1.000, Contratto Iniziale = 1, Delta = 250. Contratto di partenza = 1
  939. // 1mo Aumento di un'altro contratto solo quando il mio capitale sarà = 1.000 + (1 * 250 "250") Tot 1.250      (Contratti Tot 2)
  940. // 2ndo Aumento di un'altro contratto solo quando il mio capitale sarà = 1.250 + (2 * 250 "500") Tot 1.750     (Contratti Tot 3)
  941. // 3rzo Aumento di un'altro contratto solo quando il mio capitale sarà = 1.750 + (3 * 250 "750") Tot 2.500     (Contratti Tot 4)
  942. // 4rto Aumento di un'altro contratto solo quando il mio capitale sarà = 2.500 + (4 * 250 "1.000") Tot 3.500   (Contratti Tot 5)
  943. // 4nto Aumento di un'altro contratto solo quando il mio capitale sarà = 3.500 + (5 * 250 "1.250") Tot 4.750   (Contratti Tot 5)
  944.  
  945. // Questo si applica sia per incrementare sia per scalare di posizione.
  946. // Questo approccio mostra una partenza più o meno forte "a seconda della size di ingressio iniziale" ma che si attenua nel col corso della strategia dato dal delta.
  947. // Più il delta è basso, maggiore sarà la rischiosità della strategia.
  948.  
  949. ////////////////////////////////////////////////// 23) MM_Method == 22 Monetario In Percentuale Al Capitale Iniziale Win/Loss Ratio //////////////////////////////////////////////////
  950.  
  951. // Prima di iniziare, impostare tutte le size di ingresso di questo MM_Method con la stessa percentuale per studiare meglio la strategia senza modificare la size di ingresso e poi iniziare ad applicare
  952. // questa tecnica prima ad un'estremo: "Size Win Loss Percentage =Sup" e dopo aver riportato la size nuovamente a quella originale provare con l'altro estremo: "Size Win Loss Percentage =Inf" per poi infine provarli entrambi insieme.
  953.  
  954. // Questa tecnica prevede di aumentare o diminuire la size di ingresso quando la % di Win/Loss si trova agli estremi positivi o negativi oppure entrambi per sfruttare i momenti di forza/debolezza della strategia
  955. // in termini di vincite/perdite dei trades.
  956.  
  957. // Finchè non vengono superati i trades impostati da input: Start After Closed Trades, la strategia entra con un % del capitale iniziale impostata da Entry Capital Percent.
  958. // Quando l'input Win Loss Percentage Sup/Inf non viene raggiunto o superato, l'ingresso è in % del capitale iniziale impostata da Entry Capital Percent.
  959.  
  960. // Quando l'input Win Loss Percentage Sup/Inf vengono raggiunti o superati possiamo modificare la size di ingresso con l'inputs: Size Win Loss Percentage =Sup/=Inf.
  961. // Possiamo modificare la size sia quando entrambi gli estremi sono raggiunti o superati oppure usare un solo estremo Sup o Inf e impostare tutto il resto della size uguale a Entry Capital Percent
  962. // in modo da modificare la size di ingresso solo al verificarsi di una sola condizione anzichè di tutte e due le condizioni.
  963.  
  964. // La prima tecnica potrebbe essere quella di diminuire la size di ingresso quando il win loss ratio è basso e viceversa.
  965. // Un'altra tecnica interessante potrebbe essere quella di diminuire la size di ingresso anzichè aumentarla quando il win loss ratio è alto e viceversa.
  966.  
  967. // Questo metodo potrebbe avere più senso con strategie dove il win loss ratio ha un'ampio range e potrebbe avere meno senso dove il range è poco
  968. // ad esempio le strategie di forte tendenza potrebbero avere una rara ma grossa vincita e proprio in quel momento abbiamo modificato la size di ingresso.
  969.  
  970. // Altre simulazioni che si possono fare sono quelle di simulare uno stop della strategia entrando con un capitale redicolo come se la strategia non fosse entrata quando il win loss ratio è agli estremi.
  971.  
  972. ////////////////////////////////////////////////// 24) MM_Method == 23 Monetario In Percentuale Al Balance Win/Loss Ratio //////////////////////////////////////////////////
  973.  
  974. // E' simile al MM_Method == 22 Monetario In Percentuale Al Capitale Iniziale Win/Loss Ratio solo che usa il Balance e non il Capitale Iniziale.
  975.  
  976. ////////////////////////////////////////////////// 25) MM_Method == 24 Monetario In Percentuale Al Capitale Iniziale Win/Loss Z-Score //////////////////////////////////////////////////
  977.  
  978. // Questo metodo permette di ottenere le strisce di vincite o perdite consecutive sia in tabella sia sui log e ridurre/aumentare/stoppare la size dei trade in base alla ciclicità delle strisce.
  979.  
  980. // Verifica: Dopo aver caricato la strategia con un ingresso fisso del capitale iniziale, "per avere un riscontro sempre stabile dell'equity nel tempo", e lo z-score della strategia è +2 o -2 "ciclicità statistica".
  981.  
  982.                                                     // Metodo (Riduzione Size/Stop Trade) Strisce Vincenti
  983. // Possimo verificare se il massimo delle strisce di trade vinti si ripete più volte nella serie per decidere al prossimo trade di modificare la size riducendola o non effettuare l'ingresso.
  984.  
  985.                                                     // Metodo (Riduzione Size/Stop Trade) Strisce Perdenti
  986. // Per quanto riguarda il massimo delle strisce di trade persi dovremmo ridurre o saltare il trade un trade prima rispetto alle strisce dei trade vincenti dato che il prossimo trade sarà vincente.
  987.  
  988. // ES Strisce Vincenti: +1, +2, +3, +1, +3, +4, +3, +3, +5, +3     "Il +3 si ripete spesso"  "Dopo aver incassato la vincita, al 4rto riduco la size o salto il trade".
  989. // ES Strisce Perdenti: -1, -2, -3, -1, -3, -4, -3, -3, -5, -3     "Il -3 si ripete spesso"  "Prima di aver incassato la perdita, al 2condo riduco la size o salto il trade per non incassare la 3rza perdita".
  990.  
  991.                                                     // Metodo (Aumento Size) Strisce Vincenti
  992.  
  993. // Possimo verificare se il massimo delle strisce di trade vinti si ripete più volte nella serie per decidere al trade prima del massimo della striscia di modificare la size aumentandola.
  994.  
  995.                                                     // Metodo (Aumento Size) Strisce Perdenti
  996.  
  997. // Possimo verificare se il massimo delle strisce di trade persi si ripete più volte nella serie per decidere al trade successivo del massimo della striscia modificare la size aumentandola.
  998.  
  999. // ES Strisce Vincenti: +1, +2, +3, +1, +3, +4, +3, +3, +5, +3     "Il +3 si ripete spesso"  "Dopo aver incassato la vincita del 2ndo trade "trade prima del massimo della striscia", aumento la size per il 3rzo trade".
  1000. // ES Strisce Perdenti: -1, -2, -3, -1, -3, -4, -3, -3, -5, -3     "Il -3 si ripete spesso"  "Dopo aver incassato la perdita al 3rzo trade,  aumento la size per il 4rto trade".
  1001.  
  1002. ////////////////////////////////////////////////// 26) MM_Method == 25 Monetario In Percentuale Al Balance Win/Loss Z-Score //////////////////////////////////////////////////
  1003.  
  1004. // E' simile al MM_Method == 24 Monetario In Percentuale Al Capitale Iniziale Win/Loss Z-Score solo che usa il balance.
  1005.  
  1006. //}
  1007.  
  1008. MM_Strategy_Separator = input.string(defval = "",title= "//////////////// START STRATEGY ////////////////")
  1009.  
  1010. //////////////////////////////////////////////////////////////////////// INIZIO STRATEGIA ////////////////////////////////////////////////////////////////////////
  1011.  
  1012.  
  1013. // Input
  1014. input_ema = input.int(title='Media Ema', defval=90, minval=0, maxval=500)
  1015. input_apertura_minima = input.float(title='perc_apertura_minima', defval=2, group='Filtri Posizione')
  1016. input_apertura_massima = input.float(title='perc_apertura_massima', defval=4, group='Filtri Posizione ')
  1017. input_chiusura_minima = input.float(title='perc_chiusura_minima', defval=0, group='Filtri Posizione')
  1018. input_trailing_stop_trigger = input.float(title='input_trailing_stop_trigger', defval=12, group='trailing ')
  1019. input_trailing_stop_close = input.float(title='input_trailing_stop_close', defval=6, group='trailing ')
  1020. onlyLong = input.bool(title='Solo long', defval=false, inline='1', group='Direzione')
  1021. onlyShort = input.bool(title='Solo short', defval=false, inline='1', group='Direzione')
  1022. input_stop_loss_long = input.float(title='stop_loss_long', defval=10, minval=0, maxval=100, step=0.1, group='Stop Loss')
  1023. input_stop_loss_short= input.float(title='stop_loss_short', defval=10, minval=0, maxval=100, step=0.1, group='Stop Loss')
  1024. input_risk = input.float(title='Risk Per Trade %', defval=25.2, minval=0, maxval=100, step=0.01, group='Risk Per Trade %')
  1025.  
  1026.  
  1027. // Calcolo del range del backtest
  1028. startDate = input.int(title="Start Date",
  1029.      defval=17, minval=1, maxval=31, group="Periodo")
  1030. startMonth = input.int(title="Start Month",
  1031.      defval=08, minval=1, maxval=12, group="Periodo")
  1032. startYear = input.int(title="Start Year",
  1033.      defval=2000, minval=1800, maxval=2100, group="Periodo")
  1034.  
  1035. endDate = input.int(title="End Date",
  1036.      defval=01, minval=1, maxval=31, group="Periodo")
  1037. endMonth = input.int(title="End Month",
  1038.      defval=01, minval=1, maxval=12, group="Periodo")
  1039. endYear = input.int(title="End Year",
  1040.      defval=2121, minval=1800, maxval=2150, group="Periodo")
  1041.  
  1042.  
  1043. inDateRange = (time >= timestamp(syminfo.timezone, startYear,
  1044.          startMonth, startDate, 0, 0)) and
  1045.      (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
  1046.  
  1047.  
  1048. //Calcolo degli indicatori
  1049.  
  1050. // Variabili Medie Ema
  1051. ema = ta.ema(close, input_ema)
  1052. ema1 = ta.ema(close[1], input_ema)
  1053. plot(ema, color=color.new(color.green, 0), title='Media_Ema', linewidth=2)
  1054.  
  1055.  
  1056. //Calcolo filtri apertura minima
  1057. apertura_minima = ema / 100 * input_apertura_minima
  1058. apertura_minima1 = ema1 / 100 * input_apertura_minima
  1059. apertura_massima = ema / 100 * input_apertura_massima
  1060. chiusura_minima = ema / 100 * input_chiusura_minima
  1061.  
  1062.  
  1063. // Filtri Bande Long
  1064. filtro_long_basso = ema + apertura_minima
  1065. filtro_long_alto = ema + apertura_massima
  1066.  
  1067.  
  1068. plot_filtro_long_basso = plot(filtro_long_basso, color=color.new(color.blue, 0), title='filtro_long_basso')
  1069. plot_filtro_long_alto = plot(filtro_long_alto, color=color.new(color.blue, 0), title='filtro_long_alto')
  1070. fill(plot_filtro_long_basso, plot_filtro_long_alto, title='Spazio di apertura', color=color.new(color.blue, 90))
  1071.  
  1072.  
  1073. // Filtri Bande Short
  1074. filtro_short_basso = ema - apertura_minima
  1075. filtro_short_alto = ema - apertura_massima
  1076.  
  1077.  
  1078. plot_filtro_short_basso = plot(filtro_short_basso, color=color.new(color.red, 0), title='filtro_short_basso')
  1079. plot_filtro_short_alto = plot(filtro_short_alto, color=color.new(color.red, 0), title='filtro_short_alto')
  1080. fill(plot_filtro_short_basso, plot_filtro_short_alto, title='Spazio di apertura', color=color.new(color.red, 90))
  1081.  
  1082.  
  1083. // Stop Loss Long E Short
  1084. stop_loss_long_price = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_stop_loss_long) / 100
  1085. stop_loss_long = (strategy.opentrades.entry_price(0) - stop_loss_long_price) / syminfo.mintick
  1086.  
  1087.  
  1088. stop_loss_short_price = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_stop_loss_short) / 100
  1089. stop_loss_short = (stop_loss_short_price - strategy.opentrades.entry_price(0)) / syminfo.mintick
  1090.  
  1091.  
  1092. // Trailing Stop Long E Short
  1093. trailing_stop_trigger_long = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_trailing_stop_trigger)/100
  1094. trailing_stop_close_long = strategy.opentrades.entry_price(0) + (strategy.opentrades.entry_price(0) * input_trailing_stop_close)/100
  1095. trailing_stop_trigger_short = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_trailing_stop_trigger)/100
  1096. trailing_stop_close_short = strategy.opentrades.entry_price(0) - (strategy.opentrades.entry_price(0) * input_trailing_stop_close)/100
  1097.  
  1098.  
  1099. // Plot Ingresso In Posizione
  1100. plot(strategy.position_size != 0 ? strategy.opentrades.entry_price(0) : na , color=strategy.position_size > 0 ? color.blue : strategy.position_size < 0 ? color.red : na, style=plot.style_linebr, title="entry_price") // stampa l'entry price in rosso se short in blu se long
  1101. plot(strategy.position_size > 0 ?  trailing_stop_trigger_long : strategy.position_size < 0 ? trailing_stop_trigger_short: na, color=color.blue, style=plot.style_cross, linewidth=2, title="trail_trigger")
  1102. plot(strategy.position_size > 0 ?  trailing_stop_close_long : strategy.position_size < 0 ? trailing_stop_close_short: na, color=color.blue, style=plot.style_cross, linewidth=2, title="trail_close")
  1103. plot(strategy.position_size > 0 ?  stop_loss_long_price : strategy.position_size < 0 ? stop_loss_short_price: na, color=color.red, style=plot.style_cross, linewidth=2, title="sl_limit")
  1104.  
  1105. bgcolor(strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : na, transp=90) // sfondo verde quando siamo long, sfondo rosso quando siamo short, no sfondo quando non siamo in posizione
  1106.  
  1107.  
  1108. range_barre_trailing = bar_index - strategy.opentrades.entry_bar_index(0) +1
  1109. //plot(lunghezza_trailing, title = 'lunghezza')
  1110.  
  1111. highesthigh = strategy.opentrades ==1 ? ta.highest(high, range_barre_trailing): na
  1112. //plot(highesthigh)
  1113.  
  1114. lowestlow = strategy.opentrades ==1 ? ta.lowest(low, range_barre_trailing): na
  1115. //plot(lowestlow)
  1116.  
  1117.  
  1118.  
  1119. //Condizione Entrata Long: Chiusura candela sopra media lenta con differenziale medie e media veloce maggiore media ExitLong
  1120. condEntryLong = close > ema + apertura_minima and close < ema + apertura_massima and close > open  and not onlyShort and inDateRange and (close[1] < ema1 + apertura_minima or low[1] < ema1 + apertura_minima) // and adx_long > differenziale_adx_long// and dayofweek != 7 and month !=10
  1121.  
  1122. //Condizione Uscita Long: Crossunder di due medie
  1123. condExitLong = close < ema - chiusura_minima
  1124.  
  1125. // Condizione Uscita Trailing Stop Long
  1126. condExitLong2 =  (highesthigh >= trailing_stop_trigger_long and close <= trailing_stop_close_long)
  1127.  
  1128. //Condizione Entrata Short: Crossunder di due medie con il prezzo di chiusura che è comunque sotto una terza media con differenziale delle medie
  1129. condEntryShort = close < ema - apertura_minima and close > ema - apertura_massima and close < open  and not onlyLong and inDateRange and (close[1] > ema1 - apertura_minima or high[1] > ema1 - apertura_minima) // and adx_short > differenziale_adx_short // and dayofweek != 7 and month !=10
  1130.  
  1131. //Condizione Uscita Short: Crossover di medie con il prezzo di chiusura che è comunque sopra una terza media
  1132. condExitShort = close > ema + chiusura_minima
  1133.  
  1134. // Condizione Uscita Trailing Stop Short
  1135. condExitShort2 = (lowestlow <= trailing_stop_trigger_short and close >= trailing_stop_close_short)
  1136.  
  1137. barcolor(condEntryLong ? color.lime : condEntryShort ? color.purple : na)
  1138.  
  1139.  
  1140. // Alerts
  1141. buy_command = 'buy_command'
  1142. sell_command = 'sell_command'
  1143. close_command = 'close_command'
  1144.  
  1145.  
  1146. //entrata e uscita Long
  1147. if condEntryLong
  1148.     strategy.entry('long', strategy.long, alert_message = "Open Long Position", comment = buy_command, qty=posSize)
  1149.     strategy.exit('stop loss long', from_entry='long', loss=stop_loss_long, alert_message = "Your Long SL Has Been Triggered.", comment = close_command)
  1150.  
  1151. if condExitLong
  1152.     strategy.close(id='long', alert_message = "Close Long Position", comment = close_command)
  1153.  
  1154. if strategy.opentrades ==1 and condExitLong2
  1155.     strategy.close(id='long', alert_message = "Trailing long", comment = close_command)    
  1156.      
  1157. //entrata e uscita Short
  1158. if condEntryShort
  1159.     strategy.entry('short', strategy.short, alert_message = "Open Short Position", comment = sell_command, qty=posSize)
  1160.     strategy.exit('stop loss short', from_entry='short', loss=stop_loss_short, alert_message = "Your Short SL Has Been Triggered.", comment = close_command)
  1161.  
  1162. if condExitShort
  1163.     strategy.close(id='short', alert_message = "Close Short Position", comment = close_command)
  1164.    
  1165. if strategy.opentrades ==1 and condExitShort2
  1166.     strategy.close(id='short', alert_message = "Trailing Short", comment = close_command)
  1167.  
  1168.  
  1169. //////////////////////////////////////////////////////////////////////// FINE STRATEGIA ////////////////////////////////////////////////////////////////////////
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
Advertisement
Comments
  • tradingviewcodes
    205 days
    # text 0.12 KB | 0 0
    1. download all types of premium tradingview indicators codes available on telegram - https://t.me/tradingview_premium_indicator
Add Comment
Please, Sign In to add comment
Advertisement