
La estrategia de la red DCA de doble fondo invertido y mediano se aplica principalmente a la inversión de precios medianos y a la estrategia de DCA para que la red se construya gradualmente. Se juzga la oportunidad de reversión en función de la forma de reversión de doble fondo. Una vez que se activa la forma de reversión, se utilizan varios mandatos de diferentes precios, en combinación con la DCA para establecer posiciones de red gradualmente.
La estrategia comienza por determinar si en la línea K aparecen dos fondos consecutivos con precios de cierre iguales, lo que se conoce como el doble fondo de la barra. Si se detecta un doble fondo, se considera que puede haber una oportunidad de reversión del precio. En este caso, la estrategia establece varios mandatos de precio límite cerca de la base, cuyos precios se calculan según el ATR y la volatilidad, formando una zona de rejilla.
Concretamente, primero se calcula el índice ATR de las 14 líneas K más recientes a través de ta.atr, y luego se calcula la volatilidad de los precios de las 5 líneas K más recientes, que es el principal parámetro utilizado para determinar el intervalo de la cuadrícula. El intervalo de la cuadrícula se divide en 4 puntos de precio, respectivamente, precio inferior + volatilidad, precio inferior + 0,75 veces la volatilidad, y así sucesivamente.
Además, la estrategia también establece un punto de parada y un punto de parada. El precio de parada es el precio mínimo de doble fondo - el punto de menor salto, el precio de parada es el precio de entrada + 5 veces el indicador ATR. Cuando la posición no es 0, ambos precios se actualizan en tiempo real.
La estrategia tiene las siguientes ventajas:
Los principales riesgos son:
La estrategia también puede ser optimizada en las siguientes direcciones:
La estrategia de la red DCA de doble fondo invertido y mediano utiliza varios medios técnicos, como la forma de precio, el indicador de la línea mediana y el comercio de la red. Tiene ventajas como la precisión del momento de juicio, el control de los costos y la protección de la retirada. La estrategia de optimización es grande y merece un estudio y aplicación en profundidad. Si los parámetros se ajustan adecuadamente, se puede obtener un buen efecto en situaciones de crisis.
/*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)