Stratégie de suivi de tendance basée sur l'indicateur stochastique et l'indicateur CCI


Date de création: 2023-11-22 16:23:31 Dernière modification: 2023-11-22 16:23:31
Copier: 1 Nombre de clics: 844
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance basée sur l’indicateur stochastique et l’indicateur CCI

Aperçu

La stratégie combine l’indicateur stochastique et l’indicateur CCI pour identifier la direction de la tendance, et utilise l’indicateur de taux de changement pour filtrer les tendances de choc et suivre la tendance. La stratégie utilise une méthode de négociation d’entrée de rupture et de sortie de rupture.

Principe de stratégie

  1. Les stochastiques jugent la forme du vide
    Le stochastic indique un signal d’achat quand il est au-dessus de sa dernière barre et un signal de vente quand il est au-dessous de sa dernière barre.
  2. L’indicateur CCI détermine la direction de la tendance
    CCI supérieur à 0 pour le marché à capitaux multiples et inférieur à 0 pour le marché à capitaux vides
  3. Rate of Change, un indicateur qui filtre la tendance à la récession
    Réglez les paramètres de Rate of Change pour déterminer si le prix est dans une tendance active
  4. Règles d’entrée et de sortie
    Signaux d’achat: Stochastic sur la barre la plus récente avec un CCI supérieur à 0 et une tendance active
    Signal de vente: Stochastic en dessous de la barre la plus récente avec un CCI inférieur à 0 et une tendance active
    Stop loss exit: Stop loss de 3% pour les lignes longues et de 3% pour les lignes courtes

Analyse des avantages

  1. Combiné à l’indicateur stochastique et à l’indicateur CCI, il est plus précis pour déterminer la direction de la tendance
  2. L’indicateur Rate of Change est un outil efficace pour éliminer les tendances choquantes et éviter les transactions inefficaces.
  3. Le trading bidirectionnel multi-channel permet de capturer différents types de tendances
  4. La première étape consiste à suivre la tendance et à saisir les opportunités qui se présentent.
  5. La réduction des pertes est une mesure de prévention des pertes majeures et de contrôle des risques.

Analyse des risques

  1. Une mauvaise configuration des paramètres de la stratégie peut conduire à un comportement trop conservateur ou trop radical
  2. L’indicateur est limité et peut ne pas fonctionner dans des cas extrêmes
  3. La pénétration de l’introduction a été supprimée au début de la tendance et une partie des bénéfices a été coupée.
  4. Un stop-loss trop petit est vulnérable, un stop-loss trop grand est une mauvaise gestion des risques.

Direction d’optimisation

  1. Optimisation des paramètres. Amélioration des paramètres pour trouver la combinaison optimale de paramètres
  2. La collaboration entre plusieurs indicateurs. Ajout de plus d’indicateurs de tendances de jugement pour améliorer l’efficacité de la décision
  3. Arrêt actif: arrêt de suivi ou arrêt au pas de temps, réduisant la probabilité de rupture du stop
  4. Évaluation des risques: inclusion de restrictions sur les indicateurs de risque tels que le retrait maximal et contrôle complet des lacunes de risque

Résumer

La stratégie intègre les trois indicateurs Stochastic, CCI et Rate of Change pour déterminer la direction de la tendance et saisir les opportunités de tendance de manière à dépasser le suivi. L’avantage de la stratégie réside dans le fait que les indicateurs sont associés à des mesures précises et efficaces.

Code source de la stratégie
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Stochastic CCI BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// CCI ///////////// 
src = close
ccilength = input(13, minval=1, title="CCI Length")
c=cci(src, ccilength)

///////////// Stochastic ///////////// 
len = input(19, minval=1, title="RSI Length")
lenema = input(12, minval=1, title="RSI-EMA Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
out = ema(rsi, lenema)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = out > out[1] and isMoving() and c > 0
short = out < out[1] and isMoving() and c < 0

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(3.0, title='Stop Loss %') / 100 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L",  strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)
    strategy.exit("L Ex", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S Ex", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(not isMoving() ? color.white : long ? color.lime : short ? color.red : na, transp=80)
plot(out, color = out > out[1] ? color.lime:color.red, linewidth = 2, title="Stoch")
plot(c, color = c > 0 ? color.lime:color.red, linewidth = 2, title="CCI")