Stratégie de la période transversale de la tendance Alpha

Auteur:ChaoZhang est là., Date: le 28 septembre 2023 à 11h05
Les étiquettes:

Résumé

Cette stratégie est basée sur l'indicateur AlphaTrend, qui combine les avantages des indicateurs RSI et MFI et peut obtenir de bons résultats sur les marchés à tendance haussière et baissière.

La logique de la stratégie

  1. Calcul de l'indicateur ATR pour mesurer la volatilité du marché
  2. Utiliser l'indice de rentabilité pour déterminer l'orientation du marché s'il n'existe pas de données sur le volume; utiliser l'IFM si des données sur le volume existent
  3. Calcul des bandes supérieures et inférieures en fonction de l'ATR et de la direction du marché
  4. Calculer la courbe AlphaTrend, qui intègre des bandes dynamiques supérieures et inférieures
  5. Générer des signaux d'achat et de vente lorsque le prix dépasse ou dépasse la courbe AlphaTrend

La stratégie repose principalement sur la courbe AlphaTrend pour déterminer la direction de la tendance des prix. Elle prend en compte ATR, RSI / MFI et peut suivre la tendance efficacement. Lorsque le prix pénètre la courbe, il signale un changement de tendance et forme le point d'entrée.

Les avantages

  1. AlphaTrend combine les atouts de l'indicateur de risque et de l'IFM, adapté aux marchés haussiers et baissiers
  2. Les bandes supérieures et inférieures dynamiques sont ajustées automatiquement en fonction de la volatilité du marché
  3. Inclut à la fois des informations sur les prix et le volume, évitant ainsi les faux signaux
  4. L'approche de rupture identifie clairement la direction de la tendance
  5. Une logique simple et facile à comprendre

En résumé, cette stratégie fonctionne pour les marchés haussiers et baissiers, filtre efficacement le bruit du marché, identifie les tendances avec précision et constitue une stratégie de suivi des tendances efficace.

Les risques

  1. La courbe AlphaTrend peut présenter de fausses ruptures, nécessitant une confirmation par d'autres indicateurs.
  2. Beaucoup de faux signaux peuvent se produire pendant la consolidation du marché
  3. Résultats inefficaces du mauvais réglage des paramètres
  4. Le stop loss peut être effectué pendant les pics, entraînant des pertes importantes.

Pour faire face aux risques, le stop loss peut contrôler les pertes d'une seule transaction; le combiner avec d'autres indicateurs pour éviter de faux signaux; ajuster les paramètres en fonction des différents marchés.

Des possibilités d'amélioration

  1. Testez différentes combinaisons de paramètres pour des paramètres optimisés
  2. Incorporer d'autres indicateurs pour former des conditions de confirmation
  3. Utiliser un stop-loss dynamique ou à retard pour contrôler les risques
  4. Commerce sur différentes périodes de temps (5m, 15m, etc.) en fonction des conditions du marché
  5. Améliorer le système de chronométrage pour une entrée plus précise

Des optimisations supplémentaires peuvent être effectuées en testant sur différents marchés et paramètres afin que la stratégie soit adaptable à davantage de conditions de marché.

Conclusion

Dans l'ensemble, cette stratégie AlphaTrend est un système de suivi de tendance simple et efficace. Elle intègre à la fois des informations sur les prix et le volume pour s'adapter aux marchés haussiers et baissiers. Le mécanisme de rupture fournit des signaux d'entrée clairs. Avec un contrôle correct des risques, il peut obtenir de bons résultats. Des tests et des améliorations supplémentaires peuvent aider à stabiliser sa rentabilité dans plus de conditions de marché.


/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-26 00:00:00
period: 30m
basePeriod: 15m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
// pv additions, simplification and strategy conversion @ treigen
//@version=5
strategy('AlphaTrend For ProfitView', overlay=true, calc_on_every_tick=true, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, initial_capital=1000)
coeff = input.float(1.5, 'Multiplier', step=0.1)
AP = input(15, 'Common Period')
ATR = ta.sma(ta.tr, AP)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)

i_startTime = input(defval = timestamp("01 Jan 2014 00:00 +0000"), title = "Backtesting Start Time", inline="timestart", group='Backtesting')
i_endTime = input(defval = timestamp("01 Jan 2100 23:59 +0000"), title = "Backtesting End Time", inline="timeend", group='Backtesting')
timeCond = true

pv_ex = input.string('', title='Exchange', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_sym = input.string('', title='Symbol', tooltip='Leave empty to use the chart ticker instead (Warning: May differ from actual market name in some instances)', group='PV Settings')
pv_acc = input.string("", title="Account", group='PV Settings')
pv_alert_long = input.string("", title="PV Alert Name Longs", group='PV Settings')
pv_alert_short = input.string("", title="PV Alert Name Shorts", group='PV Settings')
pv_alert_test = input.bool(false, title="Test Alerts", tooltip="Will immediately execute the alerts, so you may see what it sends. The first line on these test alerts will be excluded from any real alert triggers" ,group='PV Settings')

upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(close, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT


k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])

var exsym = ""
if barstate.isfirst
    exsym := pv_ex == "" ? "" : "ex=" + pv_ex + ","
    exsym := pv_sym == "" ? exsym : exsym + "sym=" + pv_sym + ","


if barstate.isconfirmed and timeCond 
    if strategy.position_size <= 0 and buySignalk
        strategy.entry("Buy", strategy.long)
        alert(pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)
    if strategy.position_size >= 0 and sellSignalk
        strategy.entry("Sell", strategy.short)
        alert(pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar_close)


//  Only used for testing/debugging alert messages
if pv_alert_test
    alert("<![Alert Test]!>\n" + pv_alert_long + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)
    alert("<![Alert Test]!>\n" + pv_alert_short + "(" + exsym + "acc=" + pv_acc + ")", alert.freq_once_per_bar)


Plus de