Promedio del costo en dólares después de la estrategia de tendencia bajista

El autor:¿ Qué pasa?, Fecha: 2024-01-17 17:57:58
Las etiquetas:

img

Resumen general

El objetivo principal de esta estrategia es realizar un seguimiento periódico de los precios medios bajos después de que finalicen las caídas a corto plazo, concretamente, la estrategia identificará el final de una caída a corto plazo al final de cada mes, con el fin de añadir posiciones con regularidad; al mismo tiempo, eliminar las posiciones cuando se cierre la última línea K.

Principio de la estrategia

  1. En el caso de las señales de seguimiento regulares, después de 24*30 K-líneas (que representan un mes), se determina que se ha alcanzado el punto de seguimiento regular y se emite la primera señal.

  2. Cuando se produce una divergencia del MACD y el MACD cae por debajo de la línea de señal, se determina que el declive a corto plazo ha terminado.

  3. Reglas de entrada: cuando se activa al mismo tiempo la señal de seguimiento regular y el final de la señal de descenso a corto plazo, se libera una señal de seguimiento y se abren posiciones largas.

  4. Reglas de salida: cuando se cierre la última línea K, despejen todas las posiciones.

Lo anterior es el flujo comercial básico y los principios de la estrategia. Vale la pena señalar que la estrategia por defecto para el seguimiento de $ 1,000 por mes en backtests, que se ampliará a 33 meses, es decir, una inversión total de $ 33,000.

Análisis de ventajas

La mayor ventaja de esta estrategia es que puede construir posiciones regularmente en niveles bajos. Desde una perspectiva a largo plazo, puede obtener un precio de costo promedio relativamente asequible para generar altos retornos. Además, usar el indicador MACD para identificar puntos de compra a corto plazo también es bastante confiable y claro, lo que puede evitar entrar en un callejón sin salida hasta cierto punto, y esto también puede evitar pérdidas hasta cierto punto.

En general, se trata de una estrategia de mediación de costes que es más adecuada para que los titulares a medio y largo plazo compren regularmente lotes para obtener rendimientos satisfactorios.

Riesgos y soluciones

El principal riesgo de la estrategia es la incapacidad de determinar con precisión el final de la caída a corto plazo. El juicio del indicador MACD del final de la caída puede retrasarse, lo que conducirá a la falta de entrada en el punto óptimo. Además, la inversión dispersa de fondos también aumenta los costos operativos.

Considere agregar más indicadores para determinar tendencias, como bandas de Bollinger, KDJ, etc. Estos indicadores pueden anticipar el tiempo de reversión con anticipación. Al mismo tiempo, la cantidad de fondos invertidos cada mes se puede optimizar para reducir el impacto de los costos operativos en los rendimientos.

Direcciones de optimización

La estrategia se puede optimizar aún más en las siguientes direcciones:

  1. Optimizar el ciclo de seguimiento regular, como el seguimiento una vez cada dos meses, para reducir el problema de las operaciones excesivamente frecuentes.

  2. Incorporar más indicadores para determinar el final de un descenso a corto plazo, acercando el punto de entrada al punto más bajo.

  3. Optimizar la cantidad de fondos invertidos cada mes para encontrar la configuración óptima.

  4. Trate de incorporar estrategias de stop loss para evitar pérdidas excesivas cuando los precios caen demasiado bajo.

  5. Prueba el impacto de los diferentes períodos de retención en los rendimientos para encontrar los días de retención óptimos.

Resumen de las actividades

La idea general de este promedio de costo en dólares después de la estrategia de tendencia bajista es clara y fácil de entender. Al combinar el reabastecimiento regular y el juicio a corto plazo, se puede obtener un precio de costo promedio más asequible. Las tenencias a medio y largo plazo de esta estrategia pueden generar rendimientos estables y son adecuadas para los inversores que buscan un valor de inversión a largo plazo. Al mismo tiempo, hay algunas direcciones que se pueden optimizar para mejorar aún más la estrategia para que su rendimiento pueda subir un nivel.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © BHD_Trade_Bot

// @version=5
strategy(
 shorttitle            = 'DCA After Downtrend v2',
 title                 = 'DCA After Downtrend v2 (by BHD_Trade_Bot)',
 overlay               = true,
 calc_on_every_tick    = false,
 calc_on_order_fills   = false,
 use_bar_magnifier     = false,
 pyramiding            = 1000,
 initial_capital       = 0,
 default_qty_type      = strategy.cash,
 default_qty_value     = 1000,
 commission_type       = strategy.commission.percent,
 commission_value      = 1.1)



// Backtest Time Period
start_year   = input(title='Start year'   ,defval=2017)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_time   = timestamp(start_year, start_month, start_day, 00, 00)

end_year     = input(title='end year'     ,defval=2050)
end_month    = input(title='end month'    ,defval=1)
end_day      = input(title='end day'      ,defval=1)
end_time     = timestamp(end_year, end_month, end_day, 23, 59)

window() => time >= start_time and time <= end_time ? true : false
h1_last_bar = (math.min(end_time, timenow) - time)/1000/60/60 < 2



// EMA
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)

// EMA_CD
emacd = ema50 - ema200
emacd_signal = ta.ema(emacd, 20)
hist = emacd - emacd_signal

// BHD Unit
bhd_unit = ta.rma(high - low, 200) * 2
bhd_upper = ema200 + bhd_unit
bhd_upper2 = ema200 + bhd_unit * 2
bhd_upper3 = ema200 + bhd_unit * 3
bhd_upper4 = ema200 + bhd_unit * 4
bhd_upper5 = ema200 + bhd_unit * 5

bhd_lower = ema200 - bhd_unit
bhd_lower2 = ema200 - bhd_unit * 2
bhd_lower3 = ema200 - bhd_unit * 3
bhd_lower4 = ema200 - bhd_unit * 4
bhd_lower5 = ema200 - bhd_unit * 5

// Count n candles after x long entries
var int nPastCandles = 0
var int entryNumber = 0
if window()
    nPastCandles := nPastCandles + 1



// ENTRY CONDITIONS

// 24 * 30 per month
entry_condition1 = nPastCandles > entryNumber * 24 * 30

// End of downtrend
entry_condition2 = emacd < 0 and hist < 0 and hist > hist[2]

ENTRY_CONDITIONS = entry_condition1 and entry_condition2


if ENTRY_CONDITIONS
    entryNumber := entryNumber + 1
    entryId = 'Long ' + str.tostring(entryNumber)
    strategy.entry(entryId, strategy.long)
    
    

// CLOSE CONDITIONS

// Last bar
CLOSE_CONDITIONS = barstate.islast or h1_last_bar

if CLOSE_CONDITIONS
    strategy.close_all()



// Draw
colorRange(src) =>
    if src > bhd_upper5
        color.rgb(255,0,0)
    else if src > bhd_upper4
        color.rgb(255,150,0)
    else if src > bhd_upper3
        color.rgb(255,200,0)
    else if src > bhd_upper2
        color.rgb(100,255,0)
    else if src > bhd_upper
        color.rgb(0,255,100)
    else if src > ema200
        color.rgb(0,255,150)
    else if src > bhd_lower
        color.rgb(0,200,255)
    else if src > bhd_lower2
        color.rgb(0,150,255)
    else if src > bhd_lower3
        color.rgb(0,100,255)
    else if src > bhd_lower4
        color.rgb(0,50,255)
    else
        color.rgb(0,0,255)
        
bhd_upper_line = plot(bhd_upper, color=color.new(color.teal, 90))
bhd_upper_line2 = plot(bhd_upper2, color=color.new(color.teal, 90))
bhd_upper_line3 = plot(bhd_upper3, color=color.new(color.teal, 90))
bhd_upper_line4 = plot(bhd_upper4, color=color.new(color.teal, 90))
bhd_upper_line5 = plot(bhd_upper5, color=color.new(color.teal, 90))

bhd_lower_line = plot(bhd_lower, color=color.new(color.teal, 90))
bhd_lower_line2 = plot(bhd_lower2, color=color.new(color.teal, 90))
bhd_lower_line3 = plot(bhd_lower3, color=color.new(color.teal, 90))
bhd_lower_line4 = plot(bhd_lower4, color=color.new(color.teal, 90))
bhd_lower_line5 = plot(bhd_lower5, color=color.new(color.teal, 90))
// fill(bhd_upper_line5, bhd_lower_line5, color=color.new(color.teal, 95))

plot(ema50, color=color.orange, linewidth=3)
plot(ema200, color=color.teal, linewidth=3)
plot(close, color=color.teal, linewidth=1)
plot(close, color=colorRange(close), linewidth=3, style=plot.style_circles)


Más.