La estrategia de red DCA de inversión media de doble fondo aplica principalmente el precio medio de reversión y la estrategia de DCA para implementar la construcción gradual de posiciones. Determina las oportunidades de reversión basadas en el patrón de reversión de doble fondo. Una vez que se activa el patrón de reversión, utiliza múltiples órdenes límite a diferentes precios combinados con DCA para establecer posiciones de red gradual.
La estrategia primero comprueba si hay dos precios de cierre consecutivos iguales al fondo en el gráfico de velas, lo que se llama
Específicamente, el indicador ATR sobre los 14 candeleros recientes se obtiene primero a través de ta.atr. Luego se calcula la volatilidad de precios sobre los 5 candeleros recientes. Son los parámetros principales utilizados para determinar la zona de la red. La red contiene 4 niveles de precios: precio inferior + volatilidad, precio inferior + 0.75 * volatilidad, y así sucesivamente. Una vez que se activa la condición de doble fondo, se colocarán 4 órdenes de límite de igual tamaño de acuerdo con esta fórmula. Las órdenes no cumplidas se cancelarán después de varios candeleros.
Además, la estrategia también establece un precio de stop loss y un precio de take profit. El precio de stop loss se establece en el precio más bajo del doble fondo menos un tamaño de tick, mientras que el precio de take profit se establece en el precio de entrada más 5 veces el ATR. Estos dos precios se actualizarán en tiempo real cuando el tamaño de la posición sea mayor de 0.
Las principales ventajas de esta estrategia son las siguientes:
Riesgos principales:
Algunos aspectos que pueden mejorarse:
La estrategia de red DCA de inversión media de doble fondo consolida el patrón de precios, las técnicas de indicadores y la negociación de la red. Tiene un tiempo preciso, una base de costos controlable y una protección contra el descenso. Todavía tiene espacio para la optimización y vale la pena investigar.
/*backtest start: 2024-02-12 00:00:00 end: 2024-02-19 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/ // © cherepanovvsb //@version=5 strategy("Reversal (only long)", overlay=true, margin_long=1, margin_short=1,initial_capital=1000,commission_type = strategy.commission.percent,commission_value =0.1,currency='USD', process_orders_on_close=true) plotshape(low == low[1], style=shape.triangleup, location=location.belowbar, color=color.blue, title="1 Setup") plotshape(low == low[1] and low[1]==low[2], style=shape.triangleup, location=location.belowbar, color=color.red, title="Triple Setup") ATRlenght = input.int(title="ATR length for taking profit", defval=14, group="Strategy Settings") rewardMultiplier= input.int(title="ATR multiplier", defval=5, group="Strategy Settings") Volatility_length=input.int(title='Volatility length',defval=5,group="Strategy Settings") Volatility_multiplier=input.float(title='Volatility multiplier',defval=0.5,step=0.1, group="Strategy Settings") Candles_to_wait=input.int(title='How many candles to wait after placing orders grid?',defval=4,group="Strategy Settings") // Get ATR atr1 = ta.atr(ATRlenght) //Get volatility values (not ATR) float result = 0 for i = 0 to Volatility_length result+=high[i]-low[i] volatility=result*Volatility_multiplier/Volatility_length //Validate entrance points validlow = low [2]== low[1] and not na(atr1) validlong = validlow and strategy.position_size == 0 and low[1]<low // Calculate SL/TP longStopPrice = low[1]-syminfo.mintick longStopDistance = close - longStopPrice longTargetPrice = close + (longStopDistance * rewardMultiplier) strategy.initial_capital = 50000 //Assign all variables var tradeStopPrice = 0.0 var tradeTargetPrice = 0.0 var point1=0.0 var point2=0.0 var point3=0.0 var point4=0.0 var contracts = int(strategy.initial_capital/close)/4 if validlong tradeStopPrice := longStopPrice tradeTargetPrice := longTargetPrice point1:=low[1]+volatility point2:=low[1]+volatility*0.75 point3:=low[1]+volatility*0.5 point4:=low[1]+volatility*0.25 strategy.entry ("Long1", strategy.long,limit=point1,qty=contracts, when=validlong) strategy.entry ("Long2", strategy.long,limit=point2,qty=contracts, when=validlong) strategy.entry ("Long3", strategy.long,limit=point3,qty=contracts, when=validlong) strategy.entry ("Long4", strategy.long,limit=point4,qty=contracts, when=validlong) stopcondition = ta.barssince(validlong) == Candles_to_wait strategy.cancel("Long1",when=stopcondition) strategy.cancel("Long2",when=stopcondition) strategy.cancel("Long3",when=stopcondition) strategy.cancel("Long4",when=stopcondition) strategy.exit(id="Long Exit", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size > 0) plot(strategy.position_size != 0 or validlong ? tradeStopPrice : na, title="Trade Stop Price", color=color.red, style=plot.style_linebr, linewidth=3) plot(strategy.position_size != 0 or validlong ? tradeTargetPrice : na, title="Trade Target Price", color=color.green, style=plot.style_linebr, linewidth=3) plot(strategy.position_size != 0? point1 : na, title="Long1", color=color.green, style=plot.style_linebr, transp=0) plot(strategy.position_size != 0? point2 : na, title="Long2", color=color.green, style=plot.style_linebr, transp=0) plot(strategy.position_size != 0? point3 : na, title="Long3", color=color.green, style=plot.style_linebr, transp=0) plot(strategy.position_size != 0? point4 : na, title="Long4", color=color.green, style=plot.style_linebr, transp=0)