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.
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.
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.
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.
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.\(1000 al mes en backtests, que se ampliará a 33 meses, es decir, una inversión total de33,000.
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.
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.
La estrategia se puede optimizar aún más en las siguientes direcciones:
Optimizar el ciclo de seguimiento regular, como el seguimiento una vez cada dos meses, para reducir el problema de las operaciones excesivamente frecuentes.
Incorporar más indicadores para determinar el final de un descenso a corto plazo, acercando el punto de entrada al punto más bajo.
Optimizar la cantidad de fondos invertidos cada mes para encontrar la configuración óptima.
Trate de incorporar estrategias de stop loss para evitar pérdidas excesivas cuando los precios caen demasiado bajo.
Prueba el impacto de los diferentes períodos de retención en los rendimientos para encontrar los días de retención óptimos.
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)