Stratégie de suivi des pourcentages de boîtes dynamiques

Auteur:ChaoZhang est là., Date: 2023-11-23 10:32:39
Les étiquettes:

img

Résumé

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.

Principaux

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.

Analyse des avantages

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.

  1. L' utilisation de fourchettes en pourcentage pour les lignes d' entrée et de stop loss permet de suivre automatiquement la tendance
  2. Le risque est limité à un seul chiffre, évitant ainsi des pertes importantes
  3. Les nouvelles positions ne sont ajoutées qu'après les bénéfices, en évitant de suivre les tendances
  4. Les lignes stop-loss montent après les profits, bloquant les gains.

Analyse des risques

Il y a aussi des risques:

  1. Si les fourchettes de pourcentages sont trop larges, le risque peut s'élargir
  2. Si les fourchettes sont trop étroites, le potentiel de profit est limité
  3. Le placement incorrect d'un stop loss peut entraîner une sortie prématurée
  4. Les ajouts agressifs peuvent amplifier les pertes

Ces risques peuvent être évités en ajustant des paramètres tels que la taille de la plage, les filtres d'entrée, etc.

Optimisation

Il est possible d'optimiser davantage:

  1. Combinaison avec les indicateurs de tendance pour déterminer la direction de la tendance
  2. Ajout de modèles d'apprentissage automatique pour des lignes plus adaptatives
  3. Tester différentes conditions d'addition pour réduire les risques
  4. Déterminer les périodes de rétention optimales par des essais

Conclusion

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)





Plus de