Seguimiento regular de la estrategia de precio promedio mínimo


Fecha de creación: 2024-01-17 17:57:58 Última modificación: 2024-01-17 17:57:58
Copiar: 4 Número de Visitas: 605
1
Seguir
1617
Seguidores

Seguimiento regular de la estrategia de precio promedio mínimo

Descripción general

La idea principal de la estrategia es seguir periódicamente el precio promedio bajo después del final de la caída a corto plazo. En concreto, la estrategia identifica el momento en que la caída a corto plazo termina al final de cada mes, por lo que agrega posiciones periódicamente; y al mismo tiempo liquida la salida de la posición al cierre de la última línea K.

Principio de estrategia

  1. Determinación de señales de seguimiento periódico: cada 24*Después de 30 líneas K (que representan un mes), se determina que se ha llegado al punto de seguimiento periódico y se emite la primera señal.
  2. Determinación del final de la caída a corto plazo: se utiliza el indicador MACD para determinar la tendencia y se considera que la caída a corto plazo ha terminado cuando el MACD se desvía y atraviesa la línea de señal.
  3. Reglas de entrada: Libera la señal de seguimiento y abre una posición al mismo tiempo que satisface la señal de seguimiento periódico y la señal de fin de la caída a corto plazo.
  4. Reglas de salida: Cuando la última línea K se cierre, liquide toda la posición.

Esto es el proceso de negociación y el principio básico de la estrategia. Cabe señalar que la estrategia usa el seguimiento de fondos de \( 1,000 por mes de forma predeterminada, que se ampliará a 33 meses en el backtest, es decir, un total de \) 33,000 en inversión.

Análisis de las ventajas

La mayor ventaja de esta estrategia es la posibilidad de establecer posiciones regularmente en niveles bajos, obteniendo costos de compra más favorables en el largo plazo y generando una tasa de rendimiento más alta. Además, el uso del indicador MACD para identificar puntos de compra a corto plazo también es más fiable y claro, no se equivoca en calles sin salida, lo que también puede evitar pérdidas hasta cierto punto.

En general, esta es una estrategia de costo-beneficio, más adecuada para los propietarios de líneas medianas y largas que compran en lotes regulares y obtienen rendimientos satisfactorios.

Riesgos y soluciones

El principal riesgo de la estrategia es la imposibilidad de determinar con precisión el punto final de la caída a corto plazo. El indicador MACD puede tardar en determinar el final de la caída, lo que hace que los costos no puedan comprar en el óptimo. Además, la inversión dispersa de fondos también aumenta los costos de operación.

Se puede considerar la inclusión de más indicadores para determinar la tendencia, como la línea de Brin, KDJ, etc., que pueden predecir el momento de la reversión. Al mismo tiempo, se puede optimizar la cantidad de capital invertido mensualmente para reducir el impacto de los costos de operación en los ingresos.

Dirección de optimización

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

  1. Optimizar el ciclo de seguimiento periódico, por ejemplo, cambiando a seguimiento periódico cada dos meses, etc., para reducir el problema de transacciones demasiado frecuentes.

  2. La combinación de más indicadores para determinar el momento en que termina la caída a corto plazo hace que el punto de compra esté más cerca del mínimo.

  3. Optimización de la cantidad de dinero que se invierte mensualmente para encontrar la mejor configuración.

  4. En este caso, el objetivo es evitar que la caída sea demasiado profunda y que se produzcan pérdidas.

  5. Prueba los efectos de los diferentes períodos de tenencia de posiciones en los ingresos para encontrar la cantidad óptima de días de tenencia.

Resumir

La estrategia de seguimiento periódico de la media baja es clara y fácil de entender. La combinación de la adición periódica y el juicio a corto plazo permite obtener un precio de costo más favorable. Los inversores que tienen esta estrategia pueden obtener un rendimiento estable y son adecuados para los inversores que buscan el valor de la inversión a largo plazo.

Código Fuente de la Estrategia
/*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)