Cette stratégie est basée sur l’indicateur AlphaTrend, qui combine les avantages des deux indicateurs RSI et MFI pour obtenir un meilleur effet stratégique dans un marché à tendance multi-zones. La stratégie détermine principalement si le prix a franchi la courbe AlphaTrend pour capturer la direction de la tendance.
La stratégie s’appuie principalement sur la courbe AlphaTrend pour déterminer la direction de la tendance des prix. Elle prend en compte les mesures de volatilité du marché ATR, le RSI et l’indicateur de la hausse des MFI, permettant de suivre efficacement la tendance des prix.
Dans l’ensemble, la stratégie est applicable à toutes les conditions de marché, elle filtre efficacement le bruit du marché, elle identifie les tendances avec plus de précision et elle est une stratégie de suivi de tendances plus précise et plus efficace.
Pour les risques, il est possible de définir un stop-loss pour contrôler les pertes individuelles; optimiser les combinaisons de paramètres, utilisées avec d’autres combinaisons d’indicateurs pour réduire les signaux inefficaces; ajuster les paramètres en fonction des différents marchés.
En testant différents marchés et paramètres, la stratégie peut être optimisée pour s’adapter à d’autres types de situations.
La stratégie AlphaTrend est une stratégie simple et efficace pour suivre la tendance dans son ensemble. Elle combine les prix et le volume des transactions pour s’adapter à l’hypermarché.
/*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)