Stratégie de réseau DCA à inversion moyenne à double fond

Auteur:ChaoZhang est là., Date: 2024-02-20 11:09:33 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie de la grille DCA de renversement de la moyenne de renversement de double fond applique principalement le prix de renversement moyen et la stratégie DCA pour mettre en œuvre la construction de position progressive.

La logique de la stratégie

La stratégie vérifie d'abord s'il y a deux prix de clôture consécutifs égaux au bas sur le graphique du chandelier, ce qu'on appelle un double bas. Si un double bas est détecté, elle considère qu'il peut y avoir une opportunité d'inversion de prix. À ce stade, la stratégie définira plusieurs ordres limite autour du prix du bas. Les prix de ces ordres seront calculés en fonction de l'ATR et de la volatilité, formant une zone de grille. Cela permet d'obtenir l'effet DCA et permet aux traders de construire progressivement des positions à des prix différents après l'inversion.

Plus précisément, l'indicateur ATR sur les 14 bougies récentes est d'abord obtenu par ta.atr. Ensuite, la volatilité des prix sur les 5 bougies récentes est calculée. Ce sont les principaux paramètres utilisés pour déterminer la zone de la grille. La grille contient 4 niveaux de prix - prix inférieur + volatilité, prix inférieur + 0,75 * volatilité, et ainsi de suite. Une fois que la double condition inférieure est déclenchée, 4 ordres de limite de taille égale seront placés selon cette formule. Les ordres non remplis seront annulés après plusieurs bougies.

En outre, la stratégie définit également un prix de stop loss et un prix de prise de profit. Le prix de stop loss est fixé au prix le plus bas du double bas moins une taille de tick, tandis que le prix de prise de profit est fixé au prix d'entrée plus 5 fois l'ATR. Ces deux prix seront mis à jour en temps réel lorsque la taille de la position est supérieure à 0.

Points forts

Les principaux avantages de cette stratégie sont les suivants:

  1. L'utilisation d'un double fond pour déterminer l'inversion améliore la précision et évite les fausses ruptures.
  2. La grille DCA permet aux traders de construire progressivement des positions à des prix différents, ce qui réduit la base de coûts.
  3. Les paramètres dynamiques ATR et de volatilité ajustent la grille et la fourchette de bénéfices en fonction des variations du marché.
  4. L'arrêt automatique des pertes contrôle efficacement le montant des pertes par transaction.

Analyse des risques

Principaux risques:

  1. Le prix peut franchir le support sans renversement, déclenchant un stop loss et des pertes.
  2. Un mauvais réglage de la grille DCA peut entraîner un faible taux de remplissage.
  3. Considérez la possibilité d'autoriser des multiples de profit plus larges.

Les domaines d'amélioration

Quelques domaines à améliorer:

  1. Ajoutez le jugement de tendance, ne négociez que les renversements le long de la tendance principale pour éviter les pertes.
  2. Considérez une taille plus grande pour la première entrée et des tailles plus petites pour les entrées de la grille afin d'optimiser l'efficacité de l'utilisation du capital.
  3. Testez différentes combinaisons de paramètres pour trouver les paramètres optimaux ou concevez des logiques d'ajustement dynamiques.
  4. Intégrer l'apprentissage automatique dans une plateforme avancée pour obtenir une optimisation automatique des paramètres.

Résumé

La stratégie de réseau DCA de double inversion de fond signifie inversion consolide le modèle de prix, les techniques d'indicateur et le trading de réseau. Il a un calendrier précis, une base de coûts contrôlable et une protection contre le retrait. Il a encore de la place pour l'optimisation et vaut la peine d'être étudié.


/*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)



Plus de