Cette stratégie utilise des variations de prix en pourcentage pour définir des lignes d'entrée et des lignes de stop-loss. Elle entre en position lorsque les prix franchissent la ligne d'entrée et quitte les positions lorsque les prix tombent en dessous de la ligne de stop-loss. Sa principale caractéristique est qu'elle ne prend qu'une seule unité de risque, ce qui signifie que de nouvelles positions ne seront ajoutées qu'après que la position précédente ait atteint un objectif de profit prédéfini.
La stratégie fixe d'abord un prix de référence et utilise 10% de ce prix comme gamme de prix - la limite supérieure est la ligne d'entrée et la limite inférieure est la ligne de stop loss. Lorsque les prix franchissent la ligne d'entrée, des quantités fixes seront achetées. Lorsque les prix tombent en dessous de la ligne de stop loss, les positions seront fermées. Après avoir réalisé des bénéfices, les lignes d'entrée et de stop loss seront ajustées en pourcentage pour élargir la gamme de profit. Cela permet à la stratégie de suivre les tendances.
Un autre point clé de la stratégie est qu'elle n'assume qu'une seule unité de risque. C'est-à-dire que de nouvelles positions ne seront ajoutées qu'après que la position actuelle ait atteint l'objectif de profit. Les nouvelles positions suivront également les nouvelles lignes d'entrée et de stop-loss. Cela limite le risque.
Cette stratégie combine les avantages des arrêts de trailing et de la dimensionnement des positions, permettant un contrôle efficace des risques tout en étant rentable.
Il y a aussi des risques:
Ces risques peuvent être évités en ajustant des paramètres tels que la taille de la plage, les filtres d'entrée, etc.
Il est possible d'optimiser davantage:
Il s'agit d'un système basé sur une plage de pourcentage simple et pratique.
/*backtest start: 2022-11-16 00:00:00 end: 2023-11-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © HermanBrummer 4 April 2021 strategy ("The Box Percent Strat", shorttitle="The Box", overlay = true) /// Designed for LONG only on Daily, 2D or 3D Charts /// Uses fixed investment risk amount, meaning you're willing to lose that amount per trade /// Limit buy to not overpay RiskPerTrade = input(10000, "Risk losing this much per trade", tooltip="This calculates how much you will lose based on difference between the entry price and stop loss price") TradeAboveMAFilterPer = input(50, "The System won't trade if price is below this MA") UpBoxSize = (input(10, "Box size in %") * 0.01)+1 // 1.1 == 10% up DnBoxSize = 1-(input(10, "Box size in %") * 0.01) // 0.9 == 10% dn var FirstBar = close > 0 ? close : na var FirstTop = FirstBar * UpBoxSize var FirstBot = FirstBar * DnBoxSize var top = sma(FirstTop, 1) var bot = sma(FirstBot, 1) /// The Box Calcs if high[2] > top top := top * UpBoxSize bot := bot * UpBoxSize if low[1] < bot top := top * DnBoxSize bot := bot * DnBoxSize plot(bot, "Bot", #ff0000) // Green plot(top, "Top", #00ff00) // Red mid = ((top-bot)/2)+bot plot(mid, "Mid", color.gray) TradeAboveMAFilter = sma(close, TradeAboveMAFilterPer) plot(TradeAboveMAFilter, "Trade AboveMAF Filter", color.yellow, 3, style=plot.style_circles) // col = high[1] < top and high >= top ? color.white : na // bgcolor(col) /// Shares RiskRange = close * abs(DnBoxSize - 1) // 0.9 - 1 == 1.10 // 10% abs so you don't get a neg number NB NB Shares = RiskPerTrade / RiskRange //plot(close-RiskRange, "RiskRange", color.fuchsia) Enter = high >= top and close[1] > TradeAboveMAFilter and strategy.opentrades[0] == strategy.opentrades[1] and strategy.opentrades[1] == strategy.opentrades[2] and strategy.opentrades[2] == strategy.opentrades[3] and strategy.opentrades[3] == strategy.opentrades[4] and strategy.opentrades[4] == strategy.opentrades[5] and strategy.opentrades[5] == strategy.opentrades[6] // won't enter if new positon was taken in the last 6 bars // need better code for this. /// Buy & Sell // (new highs) and (Close above moving average filter) and (No new trades were taken receently) if Enter //(high >= top) and (close[1] > TradeAboveMAFilter) and strategy.opentrades[0] == strategy.opentrades[1] strategy.order("En", strategy.long, qty=Shares, limit=top)//, stop=top) //barcolor(strategy.position_size != 0 ? #00ff00 : color.gray) // /// If ONE Position THEN this Stop Because: // if strategy.position_size == 1 // strategy.exit("Ex", "En", stop=bot) /// If it has more than one trad OPEN if strategy.position_size > 0 strategy.exit("Ex", "En", stop=bot[2] ) // puts stop on old bot //plot(strategy.position_avg_price, "Avg Price", color.yellow)