Estrategia dinámica de dimensionamiento de posiciones basada en la curva de patrimonio

El autor:¿ Qué pasa?, Fecha: 2024-01-16 15:06:39
Las etiquetas:

img

Resumen de la estrategia

La idea central de esta estrategia es ajustar dinámicamente el tamaño de la posición en función de la tendencia de la curva de acciones: aumentar el tamaño de la posición durante la ganancia y disminuir el tamaño de la posición durante la pérdida para controlar el riesgo general.

Nombre de la estrategia

Estrategia dinámica de dimensionamiento de posiciones basada en la curva de patrimonio

Estrategia lógica

La estrategia utiliza dos métodos para determinar si la curva de renta variable está en una tendencia bajista: 1) Calcular las medias móviles simples rápidas y lentas de la curva de renta variable, si la SMA rápida está por debajo de la lenta, se considera una tendencia bajista; 2) Calcular la curva de renta variable frente a su propia media móvil simple de período más largo, si la renta variable está por debajo de la línea de media móvil, se considera una tendencia bajista.

Cuando se determina la tendencia a la baja de la curva de renta variable, el tamaño de la posición se reducirá o aumentará en un cierto porcentaje en función de los ajustes. Por ejemplo, si se establece una reducción del 50%, el tamaño original de la posición del 10% se reducirá al 5%. Este mecanismo aumenta el tamaño de la posición durante el beneficio y disminuye el tamaño durante la pérdida para controlar el riesgo general.

Ventajas

  • Utiliza la curva de patrimonio para juzgar el beneficio/pérdida global y ajusta dinámicamente el tamaño de la posición para controlar el riesgo
  • La combinación de múltiples indicadores para identificar las señales de entrada puede mejorar la tasa de ganancia
  • Los parámetros personalizables para el ajuste de la posición se adaptan a diferentes apetitos de riesgo

Los riesgos

  • La pérdida puede amplificarse con el aumento del tamaño de la posición durante el beneficio
  • Ajuste agresivo debido a ajustes incorrectos de parámetros
  • El dimensionamiento de las posiciones por sí solo no puede evitar completamente el riesgo del sistema

Direcciones de mejora

  • Eficacia del ensayo de los diferentes parámetros de ajuste de posición
  • Pruebe otros indicadores para determinar la tendencia de la curva de renta variable
  • Optimizar las condiciones de entrada para mejorar la tasa de ganancia

Conclusión

La lógica general de esta estrategia es clara: ajusta dinámicamente el tamaño de la posición en función de la curva de renta variable, lo que ayuda a controlar eficazmente el riesgo.


/*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))

Más.