Tendance à la suite de la stratégie de rupture de l'élan

Auteur:ChaoZhang est là., Date: 2024-01-05 13:38:18 Je suis désolé
Les étiquettes:

img

Résumé

La stratégie s'appelle Trend Following Momentum Breakout Strategy. Elle utilise l'indicateur Super Trend pour déterminer la direction de la tendance actuelle et la combine avec la direction des corps de chandeliers pour la tendance suivant la négociation afin d'obtenir des ruptures de momentum.

La logique de la stratégie

Le noyau de cette stratégie repose sur l'indicateur Super Trend pour juger de la direction de la tendance actuelle. L'indicateur Super Trend calcule les bandes supérieures et inférieures en fonction de la plage moyenne vraie (ATR). Lorsque les prix franchissent la bande supérieure, c'est un signal haussier et lorsque les prix franchissent la bande inférieure, c'est un signal baissier.

Lorsque l'indicateur Super Trend détermine une tendance haussière, si le chandelier est un corps rouge (close below open), allez long. Lorsque l'indicateur Super Trend détermine une tendance à la baisse, si le chandelier est un corps vert (close above open), allez court. Cela permet d'atteindre la tendance après le momentum de rupture du trading.

Analyse des avantages

Cette stratégie combine le jugement de tendance et les caractéristiques de l'élan pour filtrer efficacement les fausses ruptures et améliorer la validité des signaux de trading.

Les principaux avantages sont résumés comme suit:

  1. Filtrer les fausses ruptures en combinant le jugement de tendance et les caractéristiques de l'élan
  2. Suivez la direction des corps de chandeliers pour éviter le contre-trend
  3. Rentabilité accrue

Analyse des risques

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

  1. Le problème de la façon de définir les paramètres de l'indicateur Super Trend.
  2. Seul le fait de suivre la direction du corps du chandelier ne peut déterminer la force du corps, et il peut y avoir des risques de perte.
  3. Le ratio risque/rendement fixe ne peut pas être ajusté dynamiquement et la perte unique ne peut pas être contrôlée.

Les contre-mesures sont les suivantes:

  1. Optimiser les paramètres de l'indicateur Super Trend pour rendre le jugement plus précis.
  2. Jugez de la force du corps du chandelier en combinant des indicateurs comme le volume des transactions et le flux de trésorerie.
  3. Ajouter un stop-loss dynamique pour contrôler une perte unique.

Directions d'optimisation

Cette stratégie peut être optimisée dans les aspects suivants:

  1. Combiner des indicateurs plus techniques pour le filtrage des signaux, tels que les bandes de Bollinger et le KDJ, pour améliorer les performances de la stratégie.
  2. Ajouter des algorithmes d'apprentissage automatique pour optimiser dynamiquement les paramètres et rendre l'indicateur Super Trend plus stable.
  3. Ajouter des mécanismes de stop loss pour arrêter les pertes avant que les pertes ne s'étendent.
  4. Utiliser des produits offrant des capacités de négociation bidirectionnelles, tels que des contrats à terme, pour tirer pleinement parti des opportunités à long terme et à court terme.

Résumé

En général, cette stratégie est très appropriée pour les positions à moyen et court terme. En combinant le jugement de tendance et la dynamique de rupture, elle peut filtrer efficacement le bruit et améliorer le taux de gain.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's SuperTrend Strategy v1.0", shorttitle = "ST str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
cloud = input(25, defval = 25, minval = 5, maxval = 50, title = "cloud, % of ATR")
Factor = input(title = "Super Trend", defval = 3, minval = 1, maxval = 100)
ATR = input(title = "ATR", defval = 7, minval = 1,maxval = 100)
centr = input(true, defval = true, title = "need center of ATR?")
border = input(false, defval = false, title = "need border?")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Super Trend ATR 1
src = close
Up=hl2-(Factor*atr(ATR))
Dn=hl2+(Factor*atr(ATR))
TUp=close[1]>TUp[1]? max(Up,TUp[1]) : Up
TDown=close[1]<TDown[1]? min(Dn,TDown[1]) : Dn
Trend = close > TDown[1] ? 1: close< TUp[1]? -1: nz(Trend[1],1)
Tsl1 = Trend==1? TUp: TDown
Tsl2 = Trend==1? TDown: TUp
limit = (Tsl1 - Tsl2) / 100 * cloud
upcloud = Tsl1 - limit
dncloud = Tsl2 + limit

//Cloud
linecolor = Trend == 1 ? green : red
centercolor = centr == true ? blue : na
cloudcolor = Trend == 1 ? green : red
cline = (Tsl1 + Tsl2) / 2
P1 = plot(Tsl1, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend ATR-1")
P2 = plot(Tsl2, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend ATR-2")
P3 = plot(cline, color = centercolor , style = line , linewidth = 1,title = "SuperTrend Center")
P4 = plot(upcloud, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend Center+1")
P5 = plot(dncloud, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend Center-1")
fill(P1, P4, color = linecolor == red ? red : lime, transp = 50)
fill(P2, P5, color = linecolor == red ? red : lime, transp = 50)

//Signals
up = Trend == 1 and close < open //and low < cline 
dn = Trend == -1 and close > open //and high > cline

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    strategy.entry("Long", strategy.long, needlong ? lot : 0)

if dn
    strategy.entry("Short", strategy.short, needshort ? lot : 0)


Plus de