Stratégie de tendance dynamique à indicateurs techniques multiples


Date de création: 2024-01-26 11:45:55 Dernière modification: 2024-01-26 11:45:55
Copier: 0 Nombre de clics: 575
1
Suivre
1617
Abonnés

Stratégie de tendance dynamique à indicateurs techniques multiples

Aperçu

La stratégie utilise une combinaison d’indicateurs techniques tels que les moyennes mobiles, les indices de force relative (RSI), les indicateurs de variation quantitative (VFI) et l’indice de force réelle (TSI) pour juger de l’ampleur et de la tendance globale du marché et capturer les mouvements de prix sur les lignes moyennes et longues.

Principe de stratégie

  1. Calculer les moyennes mobiles du RSI de la ligne rapide (7 jours), du RSI de la ligne normale (14 jours) et du RSI de la ligne lente (50 jours) pour juger de la tendance et de la dynamique du RSI.

  2. Calculer les moyennes mobiles des VFI et des VFI, les EMA (25 jours) et les SMA (25 jours), pour évaluer les entrées et les sorties de fonds sur le marché.

  3. Calculer le rapport entre la moyenne à long terme et la moyenne à court terme du TSI pour déterminer la force de la tendance du marché.

  4. L’intégration des résultats des indices RSI, VFI et TSI permet de déterminer la direction générale du mouvement du marché.

  5. Faire un short lorsque le marché est jugé à la baisse; faire un plafonnement à vide lorsque le marché est jugé à la baisse.

Analyse des avantages

  1. La combinaison d’indicateurs permet d’évaluer de manière plus complète et plus précise la dynamique et les tendances du marché.

  2. Les VFI reflètent les flux de capitaux sur le marché et évitent les inversions de transactions.

  3. Le filtre TSI pour les tremblements de terre rend le signal plus fiable

  4. Dans l’ensemble, la stratégie est plus fiable et offre un meilleur taux de réussite.

Analyse des risques

  1. La combinaison de plusieurs indicateurs et la configuration des paramètres sont complexes et nécessitent des tests répétés pour obtenir les paramètres optimaux.

  2. Les stratégies d’entrée et de sortie sont simples et ne peuvent pas tirer pleinement parti de l’information fournie par l’indicateur, ce qui peut entraîner des pertes inversées de ligne ultra-courte.

  3. Il est facile de faire des erreurs de signalisation et d’envisager des pertes mineures en cas de choc.

Direction d’optimisation

  1. Optimiser la combinaison des paramètres de l’indicateur pour trouver le paramètre optimal.

  2. Ajout d’une règle d’exit pour déterminer le retour vers l’exit à l’aide des indicateurs.

  3. Augmenter les mécanismes de protection des bénéfices et réduire les pertes mineures.

Résumer

Cette stratégie utilise une combinaison de plusieurs indicateurs pour juger de la dynamique globale du marché, en tirant profit en tirant profit lorsque le marché est à la baisse. La stratégie a une grande fiabilité, mais les mécanismes d’entrée et de sortie sont plus simples et les informations sur les indicateurs ne sont pas pleinement utilisées.

]

Code source de la stratégie
//@version=2
//credit to LazyBear, Lewm444, and others for direct and indirect inputs/////////////////////////////////
//script is very rough, publishing more for collaborative input value than as a finished product/////////
strategy("Momo", overlay=true)
length = input( 50 )
overSold = input( 50 )
overBought = input( 65 )
price = ohlc4

/////////////////////////////////////////////////////macd/////////////////////////////////////////////////

fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)
MACD = (fastMA - slowMA)
Msignal = (sma(MACD, 9))*40
//plot(Msignal, color=blue, linewidth=3)

/////////////////////////////////////////////////rsi spread/////////////////////////////////////////////////

source = price

RSIFast  = rsi(source, input(7))
RSINorm  = rsi(source, input(14))
RSISlow = rsi(source, input(50))

//plot(RSIFast, color=silver, style=area, histbase=50)
//plot(RSINorm, color=#98b8be, style=area, histbase=50)
//plot(RSISlow, color=#be9e98, style=area, histbase=50)

//plot(RSIFast, color=gray, style=line, linewidth=1)
//plot(RSINorm, color=purple, style=line, linewidth=2)
//plot(RSISlow, color=black, style=line, linewidth=3)

exponential = input(true, title="Exponential MA")

src = (RSIFast)

ma05 = exponential ? ema(src, 05) : sma(src, 05)
ma30 = exponential ? ema(src, 30) : sma(src, 30)
ma50 = exponential ? ema(src, 50) : sma(src, 50)
ma70 = exponential ? ema(src, 70) : sma(src, 70)
ma90 = exponential ? ema(src, 90) : sma(src, 90)
ma100 = exponential ? ema(src, 100) : sma(src, 100)

exponential1 = input(true, title="Exponential MA")

src1 = (RSINorm)

ma051 = exponential1 ? ema(src1, 05) : sma(src1, 05)
ma301 = exponential1 ? ema(src1, 30) : sma(src1, 30)
ma501 = exponential1 ? ema(src1, 50) : sma(src1, 50)
ma701 = exponential1 ? ema(src1, 70) : sma(src1, 70)
ma901 = exponential1 ? ema(src1, 90) : sma(src1, 90)
ma1001 = exponential1 ? ema(src1, 100) : sma(src1, 100)


exponential2 = input(true, title="Exponential MA")

src2 = (RSINorm)

ma052 = exponential2 ? ema(src2, 05) : sma(src2, 05)
ma302 = exponential2 ? ema(src2, 30) : sma(src2, 30)
ma502 = exponential2 ? ema(src2, 50) : sma(src2, 50)
ma702 = exponential2 ? ema(src2, 70) : sma(src2, 70)
ma902 = exponential2 ? ema(src2, 90) : sma(src2, 90)
ma1002 = exponential2 ? ema(src2, 100) : sma(src2, 100)


////////////////////////////////////////////////vfi by LazyBear, modified////////////////////////////////////

VFIlength = input(130, title="VFI length")
coef = input(0.2)
vcoef = input(2.5, title="Max. vol. cutoff")
signalLength=input(10)
signalLength2 = input(100)
smoothVFI=input(false, type=bool)

ma(x,y) => smoothVFI ? sma(x,y) : x

typical=hlc3
inter = log( typical ) - log( typical[1] )
vinter = stdev(inter, 30 )
cutoff = coef * vinter * close
vave = sma( volume, VFIlength )[1]
vmax = vave * vcoef
vc = iff(volume < vmax, volume, vmax) //min( volume, vmax )
mf = typical - typical[1]
vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) )

vfi = ma(sum( vcp , VFIlength )/vave, 3)
vfima = ema( vfi, 25 )
vfimaS = (sma(vfima, 25))
zima = ema( vfima, signalLength2 )
d=vfi-vfima
vfi_avg = avg(vfi, vfima, vfimaS)
vfi_avgS = (sma(vfi_avg,5))

plot( zima, title="EMA of vfima", color=fuchsia, linewidth=1)
plot( vfimaS, title="SMA of vfima", color=blue, linewidth=1)
plot( vfima , title="EMA of vfi", color=black, linewidth=1)
//plot( vfi, title="vfi", color=green,linewidth=1)
//plot( vfi_avg, title="vfi_avg", color=blue, linewidth=2)
//plot( vfi_avgS, title="vfi_avgS", color=maroon, linewidth=2)

/////////////////////////////////////////////////////tsi////////////////////////////////////////////////

long2 = input(title="Long Length",  defval=24)
short2 = input(title="Short Length",  defval=7)
signal2 = input(title="Signal Length",  defval=13)
pc = change(price)
double_smooth2(src, long2, short2) =>
    fist_smooth2 = ema(src, long2)
    ema(fist_smooth2, short2)
double_smoothed_pc2 = double_smooth2(pc, long2, short2)
double_smoothed_abs_pc2 = double_smooth2(abs(pc), long2, short2)
tsi_value2 = 60 * (double_smoothed_pc2 / double_smoothed_abs_pc2)
//plot( tsi_value2, title="tsi2", color=black, linewidth=1)

////////////////////////////////////////////////////////mjb////////////////////////////////////////////////

trendSignal = avg(tsi_value2, Msignal, vfi)*1.75
T1 = sma(trendSignal, 5)
T2 = ema(trendSignal, 25)
T3 = ema(T2, 25)
//plot( T1, title="Trend", color=red, linewidth=3)
plot( T3, title="Trend3", color=black, linewidth=3)

/////////////////////////////////////////////////////mjb////////////////////////////////////////////////

Momentum = avg (T3, vfimaS, vfima)
plot( Momentum, title="Momentum", color=blue, linewidth=2)
vrsi = rsi(price, length)
clearance = abs(zima - Msignal)

/////////////////////////////////////////////////////mjb////////////////////////////////////////////////

if (not na(vrsi)) 
    if (zima > T3) and (clearance > 5) and (falling(zima, 1) == 1) and (zima > vfimaS) and (zima > vfima) and (falling(T3, 1) == 1) and (zima > 6)
        strategy.entry("ss", strategy.short)
    if (T3 > zima) and (rising(zima, 1) == 1)
        strategy.entry("Zcover", strategy.long)
    if (strategy.openprofit > 750) and (rising(T2, 1) == 1) and (T2 > 10)
        strategy.entry("ProfitTake", strategy.long)
// strategy.risk.allow_entry_in(strategy.direction.short)
// strategy.risk.max_intraday_loss(2000, strategy.cash)