Stratégie de suivi des super tendances sur plusieurs périodes

Auteur:ChaoZhang est là., Date: 2024-01-15 11h35 et 47 min
Les étiquettes:

img

Résumé

Cette stratégie utilise l'indicateur ATR pour construire un canal de tendance dynamique à plusieurs délais pour suivre les tendances.

La logique de la stratégie

La stratégie utilise l'indicateur ATR pour construire un canal de tendance haussière et un canal de tendance baissière. Plus précisément, la ligne du canal de tendance haussière est le prix de clôture moins N fois l'indicateur ATR; la ligne du canal de tendance baissière est le prix de clôture plus N fois l'indicateur ATR. La valeur de N peut être ajustée à travers des paramètres.

Lorsque le prix traverse le canal de tendance haussière, un signal d'achat est généré; lorsque le prix traverse le canal de tendance baissière, un signal de vente est généré. Le canal s'ajuste dynamiquement en fonction des derniers prix pour suivre les tendances.

En outre, la stratégie définit également une variable de tendance pour déterminer si le courant est en hausse ou en baisse.

Les avantages

  • Utilise des canaux dynamiques pour suivre les tendances et négocier avec les tendances
  • Éviter de courir après les hauts et les bas, réduisant le risque d'inversion du marché
  • Paramètres de canal réglables, grande adaptabilité
  • Des paramètres plus souples pour les délais multiples

Les risques

  • Un suivi trop agressif peut augmenter le risque de perte
  • Des paramètres de chaîne incorrects entraînent moins ou plus de signaux incorrects
  • Requiert de solides compétences en programmation pour ajuster les paramètres

Amélioration:

  • Réduire de manière appropriée le multiplicateur ATR à une magnitude de suivi inférieure
  • Optimiser les paramètres pour trouver la meilleure combinaison
  • Ajouter une stratégie de stop loss pour réduire les pertes par transaction

Directions d'optimisation

  • Ajouter d'autres indicateurs pour le filtre pour des signaux plus fiables
  • Ajouter une stratégie de stop loss pour réduire le risque
  • Optimisation des paramètres pour trouver le paramètre optimal
  • Optimiser les délais d'entrée et de sortie pour améliorer le taux de profit

Résumé

Dans l'ensemble, il s'agit d'une stratégie de suivi de tendance décente. Elle s'ajuste dynamiquement au commerce avec les tendances et évite de poursuivre les hauts et les bas de vente. Avec l'optimisation des paramètres et des améliorations appropriées, les avantages de la stratégie peuvent être encore améliorés et les risques réduits pour obtenir de meilleurs résultats.


/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '买入')
shortCondition = sellSignal
if shortCondition and window()
    strategy.close('BUY',comment = '卖出')
buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na



Plus de