Stratégie de grille DCA à moyenne mobile avec inversion à double fond


Date de création: 2024-02-20 11:09:33 Dernière modification: 2024-02-20 11:09:33
Copier: 3 Nombre de clics: 839
1
Suivre
1617
Abonnés

Stratégie de grille DCA à moyenne mobile avec inversion à double fond

Aperçu

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.

Principe de stratégie

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.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’utilisation du double fond pour déterminer le moment de l’inversion permet d’éviter efficacement les fausses percées.
  2. La conception de la grille DCA permet aux traders de construire des positions progressivement à des prix différents, réduisant ainsi les coûts de position.
  3. Les paramètres ATR et de volatilité permettent d’ajuster dynamiquement la grille et l’espace de freinage pour s’adapter aux changements du marché.
  4. Le système d’arrêt automatique des pertes permet de contrôler efficacement les pertes individuelles.

Analyse des risques

Les principaux risques sont les suivants:

  1. Il est possible que le prix ne se retourne pas et tombe directement au-dessus du support du double fond. À ce moment-là, le stop loss sera déclenché et causera des pertes.
  2. La zone de la grille DCA n’est pas correctement définie et la plupart des commandes ne peuvent pas être traitées. Différents paramètres peuvent être testés pour assurer le taux de transaction.
  3. Les arrêts peuvent être déclenchés fréquemment en cas de fortes fluctuations du marché. Il est possible d’envisager d’élargir le multiplicateur des arrêts.

Direction d’optimisation

Cette stratégie peut également être optimisée dans les directions suivantes:

  1. Il est important de ne pas rater une tendance majeure, mais plutôt d’en voir plus et d’en faire le tour.
  2. Envisagez d’augmenter la position initiale et de réduire progressivement la position de la grille, afin d’optimiser l’efficacité de l’utilisation des fonds.
  3. Il est possible de tester différentes combinaisons de paramètres pour trouver les meilleurs. Il est également possible de concevoir des paramètres dynamiques qui s’adaptent en temps réel au marché.
  4. L’optimisation automatique des paramètres peut être intégrée à l’apprentissage automatique dans les plates-formes avancées.

Résumer

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.

Code source de la stratégie
/*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)