Schaff Dynamique du cycle de la tendance à la suite de la stratégie

Auteur:ChaoZhang est là., Date: 2023-11-01 16h08:35 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est basée sur l'indicateur du cycle de tendance de Schaff, combiné avec les principes de surachat et de survente de l'indice de performance boursier, pour déterminer et suivre les tendances à l'aide de mesures de dynamique.

La logique de la stratégie

    1. Calculez le MACD, où la longueur rapide par défaut est 23 et la longueur lente est 50. Le MACD reflète la différence entre les moyennes mobiles à court et à long terme pour juger de la dynamique des prix.
    1. Appliquer le Stoch RSI au MACD pour former la valeur K, où la durée par défaut du cycle est de 10, reflétant les niveaux de surachat/survente de la métrique de dynamique MACD.
    1. Prenez la moyenne mobile pondérée de K sous forme de D, où la longueur par défaut 1ère %D est 3, pour éliminer le bruit de K.
    1. Appliquer à nouveau le Stoch RSI à D pour former la valeur STC initiale, où la deuxième longueur %D par défaut est de 3, afin de créer des signaux précis de surachat/survente.
    1. Prenez la moyenne mobile pondérée du STC initial pour obtenir la valeur finale du STC, allant de 0 à 100.
    1. Allez long lorsque le STC passe au-dessus de 25 vers le haut, et court lorsque le STC passe au-dessus de 75.

Les avantages

    1. La conception du STC combinant le Stock RSI identifie clairement les régions surachetées/survendues, formant ainsi de forts signaux de tendance.
    1. Le double filtrage Stoch RSI élimine efficacement les fausses éruptions.
    1. La gamme standardisée de 0 à 100 STC permet des signaux commerciaux mécanisés simples.
    1. Le backtest implémente des marquages de rupture visuels et des alertes contextuelles pour une capture claire et intuitive du signal.
    1. Les paramètres par défaut optimisés évitent les signaux trop sensibles et les transactions inutiles.

Les risques

    1. Le STC est sensible aux paramètres. Différentes pièces et délais nécessitent un réglage des paramètres pour s'adapter aux caractéristiques du marché.
    1. Les stratégies d'évasion sont sujettes aux pièges, nécessitant des arrêts pour contrôler le risque.
    1. Les fausses ruptures de faible liquidité peuvent générer de mauvais signaux, nécessitant un filtre de volume.
    1. La STC seule risque des renversements, une confirmation à l'aide d'autres facteurs est nécessaire.
    1. Les niveaux de soutien/résistance clés doivent être surveillés pour éviter les mauvais signaux.

Des possibilités d'amélioration

    1. Optimiser les paramètres MACD pour différentes périodes et pièces.
    1. Améliorer les valeurs K et D du Stoch RSI pour lisser la courbe STC.
    1. Ajouter un filtre de volume pour éviter les fausses fuites de faible liquidité.
    1. Incorporer des indicateurs supplémentaires pour confirmer les signaux, par exemple les bandes de Bollinger.
    1. Ajoutez des mécanismes d'arrêt comme les arrêts de déplacement/ATR.
    1. Les entrées sont ajustées, par exemple lors d'un repli après une rupture pour une confirmation de tendance.

Conclusion

La stratégie du cycle de tendance de Schaff identifie les surachats/survente via des mesures de dynamique pour déterminer les changements de tendance des prix à court terme. Bien que simple et ajustable, elle risque des pièges.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("Schaff Trend Cycle", shorttitle="STC Backtest", overlay=true)

fastLength = input(title="MACD Fast Length",  defval=23)
slowLength = input(title="MACD Slow Length",  defval=50)
cycleLength = input(title="Cycle Length",  defval=10)
d1Length = input(title="1st %D Length",  defval=3)
d2Length = input(title="2nd %D Length",  defval=3)
src = input(title="Source",  defval=close)
highlightBreakouts = input(title="Highlight Breakouts ?", type=bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)

k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))

d = ema(k, d1Length)

kd = nz(fixnan(stoch(d, d, d, cycleLength)))

stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc

//stcColor = not highlightBreakouts ? (stc > stc[1] ? green : red) : #ff3013
//stcPlot = plot(stc, title="STC", color=stcColor, transp=0)

upper = input(75, defval=75)
lower = input(25, defval=25)

transparent = color(white, 100)

upperLevel = plot(upper, title="Upper", color=gray)
// hline(50, title="Middle", linestyle=dotted)
lowerLevel = plot(lower, title="Lower", color=gray)

fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)

upperFillColor = stc > upper and highlightBreakouts ? green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? red : transparent

//fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
//fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)

long =  crossover(stc, lower) ? lower : na
short = crossunder(stc, upper) ? upper : na

long_filt = long and not short
short_filt = short and not long

prev = 0
prev := long_filt ? 1 : short_filt ? -1 : prev[1]

long_final = long_filt and prev[1] == -1
short_final = short_filt and prev[1] == 1

strategy.entry("long", strategy.long, when = long )
strategy.entry("short", strategy.short, when = short)

plotshape(crossover(stc, lower) ? lower : na, title="Crossover", location=location.absolute, style=shape.circle, size=size.tiny, color=green, transp=0)
plotshape(crossunder(stc, upper) ? upper : na, title="Crossunder", location=location.absolute, style=shape.circle, size=size.tiny, color=red, transp=0)

alertcondition(long_final, "Long", message="Long")
alertcondition(short_final,"Short", message="Short")

plotshape(long_final, style=shape.arrowup, text="Long", color=green, location=location.belowbar)
plotshape(short_final, style=shape.arrowdown, text="Short", color=red, location=location.abovebar)


Plus de