
La stratégie de grille DCA à double fond inverse est principalement utilisée pour la conversion des prix à la même ligne et la mise en place progressive de la grille par la stratégie DCA. Elle juge les opportunités de conversion en fonction de la forme de conversion du double fond. Une fois que la forme de conversion est déclenchée, utilisez plusieurs bons de commande à prix différents pour créer des positions de grille progressive en combinaison avec le DCA.
La stratégie détermine d’abord si la ligne K présente deux bottes de clôture consécutives avec des prix égaux, ce qui est connu sous le nom de “double bottes”. Si un double fond est détecté, il est considéré comme une opportunité de reprise des prix.
Plus précisément, en calculant d’abord l’indicateur ATR des 14 dernières lignes K via ta.atr, puis en combinant les 5 dernières lignes K pour calculer le taux de fluctuation des prix, c’est le principal paramètre utilisé pour déterminer la fourchette. La fourchette est divisée en 4 points de prix, soit le prix de base + taux de fluctuation, le prix de base + 0,75 fois le taux de fluctuation, et ainsi de suite.
En outre, la stratégie définit un stop loss et un stop loss. Le prix stop loss est le prix le plus bas du double fond - le minimum de rebond, et le prix stop est le prix d’entrée + 5 fois l’indicateur ATR. Les deux prix sont mis à jour en temps réel lorsque la position n’est pas 0.
Cette stratégie présente les avantages suivants:
Les principaux risques sont les suivants:
Cette stratégie peut également être optimisée dans les directions suivantes:
La stratégie de grille DCA à double fond inverse-équilibre utilise de multiples techniques, telles que la forme des prix, l’indicateur de l’équilibre, le trading de la grille. Elle présente des avantages tels que la précision du moment de jugement, la maîtrise des coûts et la protection contre les retraits.
/*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)