Stratégie dynamique de dimensionnement des positions basée sur la courbe des actions

Auteur:ChaoZhang est là., Date: 2024-01-16 15:06:39 Je vous en prie.
Les étiquettes:

img

Vue d'ensemble de la stratégie

L'idée de base de cette stratégie est d'ajuster dynamiquement la taille de la position en fonction de la tendance de la courbe des actions - augmenter la taille de la position pendant le profit et diminuer la taille de la position pendant la perte pour contrôler le risque global.

Nom de la stratégie

Stratégie dynamique de dimensionnement des positions basée sur la courbe des actions

La logique de la stratégie

La stratégie utilise deux méthodes pour déterminer si la courbe des actions est en baisse: 1) Calculer les moyennes mobiles simples rapides et lentes de la courbe des actions, si la SMA rapide est inférieure à la lente, elle est considérée comme une tendance à la baisse; 2) Calculer la courbe des actions par rapport à sa propre moyenne mobile simple à plus longue période, si la valeur des actions est inférieure à la ligne moyenne mobile, elle est considérée comme une tendance à la baisse.

Lorsque la tendance à la baisse de la courbe des actions est déterminée, la taille de la position sera réduite ou augmentée d'un certain pourcentage en fonction des paramètres. Par exemple, si une réduction de 50% est définie, la taille de la position initiale de 10% sera réduite à 5%. Ce mécanisme augmente la taille de la position pendant le bénéfice et diminue la taille de la position pendant la perte pour contrôler le risque global.

Les avantages

  • Utilise la courbe de fonds propres pour juger du bénéfice/perte global et ajuste dynamiquement la taille de la position pour contrôler le risque
  • La combinaison de plusieurs indicateurs pour identifier les signaux d'entrée peut améliorer le taux de victoire
  • Paramètres personnalisables pour l'ajustement de la position adaptés aux différents appétits de risque

Les risques

  • Les pertes peuvent être amplifiées par une augmentation de la taille de la position au cours du bénéfice
  • Réglage agressif dû à des paramètres incorrects
  • Le dimensionnement des positions ne peut pas à lui seul éviter complètement le risque systémique

Directions de renforcement

  • Efficacité de l'essai des différents paramètres de réglage de la position
  • Essayez d'autres indicateurs pour déterminer l'évolution de la courbe des actions
  • Optimiser les conditions d'entrée pour améliorer le taux de victoire

Conclusion

La logique générale de cette stratégie est claire - elle ajuste dynamiquement la taille de la position en fonction de la courbe des actions, ce qui aide à contrôler efficacement le risque.


/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shardison
//@version=5

//EXPLANATION
//"Trading the equity curve" as a risk management method is the 
//process of acting on trade signals depending on whether a system’s performance
//is indicating the strategy is in a profitable or losing phase.
//The point of managing equity curve is to minimize risk in trading when the equity curve is  in a downtrend. 
//This strategy has two modes to determine the equity curve downtrend:
//By creating two simple moving averages of a portfolio's equity curve - a short-term
//and a longer-term one - and acting on their crossings. If the fast SMA is below
//the slow SMA, equity downtrend is detected (smafastequity < smaslowequity).
//The second method is by using the crossings of equity itself with the longer-period SMA (equity < smasloweequity).
//When "Reduce size by %" is active, the position size will be reduced by a specified percentage
//if the equity is "under water" according to a selected rule. If you're a risk seeker, select "Increase size by %"
//- for some robust systems, it could help overcome their small drawdowns quicker.

strategy("Use Trading the Equity Curve Postion Sizing", shorttitle="TEC", default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital = 100000)

//TRADING THE EQUITY CURVE INPUTS
useTEC           = input.bool(true, title="Use Trading the Equity Curve Position Sizing")
defulttraderule  = useTEC ? false: true
initialsize      = input.float(defval=10.0, title="Initial % Equity")
slowequitylength = input.int(25, title="Slow SMA Period")
fastequitylength = input.int(9, title="Fast SMA Period")
seedequity = 100000 * .10
if strategy.equity == 0
    seedequity
else
    strategy.equity
slowequityseed   = strategy.equity > seedequity ? strategy.equity : seedequity
fastequityseed   = strategy.equity > seedequity ? strategy.equity : seedequity
smaslowequity    = ta.sma(slowequityseed, slowequitylength)
smafastequity    = ta.sma(fastequityseed, fastequitylength)
equitycalc       = input.bool(true, title="Use Fast/Slow Avg", tooltip="Fast Equity Avg is below Slow---otherwise if unchecked uses Slow Equity Avg below Equity")
sizeadjstring    = input.string("Reduce size by (%)", title="Position Size Adjustment", options=["Reduce size by (%)","Increase size by (%)"])
sizeadjint       = input.int(50, title="Increase/Decrease % Equity by:")
equitydowntrendavgs = smafastequity < smaslowequity
slowequitylessequity = strategy.equity < smaslowequity

equitymethod = equitycalc ? equitydowntrendavgs : slowequitylessequity

if sizeadjstring == ("Reduce size by (%)")
    sizeadjdown = initialsize * (1 - (sizeadjint/100))
else
    sizeadjup = initialsize * (1 + (sizeadjint/100))
c = close
qty = 100000 * (initialsize / 100) / c
if useTEC and equitymethod
    if sizeadjstring == "Reduce size by (%)"
        qty := (strategy.equity * (initialsize / 100) * (1 - (sizeadjint/100))) / c
    else
        qty := (strategy.equity * (initialsize / 100) * (1 + (sizeadjint/100))) / c
    
//EXAMPLE TRADING STRATEGY INPUTS
CMO_Length = input.int(defval=9, minval=1, title='Chande Momentum Length')
CMO_Signal = input.int(defval=10, minval=1, title='Chande Momentum Signal')

chandeMO = ta.cmo(close, CMO_Length)
cmosignal = ta.sma(chandeMO, CMO_Signal)

SuperTrend_atrPeriod = input.int(10, "SuperTrend ATR Length")
SuperTrend_Factor = input.float(3.0, "SuperTrend Factor", step = 0.01)
Momentum_Length = input.int(12, "Momentum Length")
price = close

mom0 = ta.mom(price, Momentum_Length)
mom1 = ta.mom( mom0, 1)
[supertrend, direction] = ta.supertrend(SuperTrend_Factor, SuperTrend_atrPeriod)
stupind = (direction < 0 ? supertrend : na)
stdownind = (direction < 0? na : supertrend)

//TRADING CONDITIONS
longConditiondefault = ta.crossover(chandeMO, cmosignal) and (mom0 > 0 and mom1 > 0 and close > stupind) and defulttraderule
if (longConditiondefault)
    strategy.entry("DefLong", strategy.long, qty=qty)

shortConditiondefault = ta.crossunder(chandeMO, cmosignal) and (mom0 < 0 and mom1 < 0 and close < stdownind) and defulttraderule
if (shortConditiondefault)
    strategy.entry("DefShort", strategy.short, qty=qty)
    
longCondition = ta.crossover(chandeMO, cmosignal) and (mom0 > 0 and mom1 > 0 and close > stupind) and useTEC
if (longCondition)
    strategy.entry("AdjLong", strategy.long, qty = qty)

shortCondition = ta.crossunder(chandeMO, cmosignal) and (mom0 < 0 and mom1 < 0 and close < stdownind) and useTEC
if (shortCondition)
    strategy.entry("AdjShort", strategy.short, qty = qty)
plot(strategy.equity)
plot(smaslowequity, color=color.new(color.red, 0))
plot(smafastequity, color=color.new(color.green, 0))

Plus de