Cycle de tendance de Schaff avec stratégie de croisement de la moyenne mobile double

Auteur:ChaoZhang est là., Date: 2023-12-12 17:43:19 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie s'appelle Schaff Trend Cycle with Double Moving Average Crossover Strategy. L'idée principale est de déterminer les positions longues et courtes en fonction de l'indicateur Schaff Trend Cycle (STC) et du double crossover de la moyenne mobile. Plus précisément, lorsque le STC sort des zones d'achat ou de survente, le prix est au-dessus de la moyenne mobile exponentielle rapide, et la EMA rapide est au-dessus de la EMA lente, une position longue est ouverte. Inversement, une position courte est ouverte.

La logique de la stratégie

La stratégie repose principalement sur deux indicateurs techniques:

  1. Indicateur de tendance: Indicateur STC pour déterminer la direction de la tendance. Le STC comprend la ligne MACD, stochastique et indicateur STC. Une rupture à la hausse de la zone 0-25 signale une tendance haussière, tandis qu'une rupture à la baisse de la zone 75-100 signale une tendance baissière.

  2. Crossover de moyenne mobile: moyenne mobile simple rapide (période par défaut 35) traverse au-dessus/en dessous de la SMA lente (période par défaut 200).

La logique des signaux de négociation est définie comme suit:

  1. Signal long: STC dépasse la ligne 25, la SMA rapide est au-dessus de la SMA lente et le prix de clôture est au-dessus de la SMA rapide.

  2. Signal court: le STC se déplace en dessous de la ligne 75, la SMA rapide est en dessous de la SMA lente et le prix de clôture est en dessous de la SMA rapide.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. Des signaux de négociation fiables provenant de la combinaison d'indicateurs de tendance et de moyennes mobiles.

  2. Des périodes de moyenne mobile personnalisables Les périodes de moyenne mobile peuvent être optimisées pour différentes conditions de marché.

  3. Le STC identifie les niveaux de surachat/survente pour éviter d'acheter des sommets et de vendre des fonds.

Analyse des risques

Il y a quelques risques à prendre en considération:

  1. Le potentiel de fausses fuites STC doit être confirmé par l'action des prix.

  2. Plus de faux signaux des croisements de MA.

  3. Il n'y a qu'une seule direction de négociation à la fois, limitant l'espace pour les positions ouvertes.

  4. Aucun traitement du risque de spreads dans le trading sur marge.

Optimisation

Les pistes d'optimisation possibles sont les suivantes:

  1. Régler les paramètres de surachat/survente STC.

  2. Optimiser les périodes d'autorisation de mise en œuvre pour améliorer la fiabilité du signal croisé.

  3. Ajoutez des filtres supplémentaires comme les bandes de Bollinger pour réduire les faux écarts.

  4. Mettre en œuvre une logique commerciale bidirectionnelle pour augmenter la capacité.

  5. Ajouter une logique de stop loss pour contrôler la perte par transaction.

Conclusion

En résumé, cette stratégie combine des indicateurs de croisement de tendance et de moyenne mobile pour déterminer la direction de la tendance et le moment des entrées. Avec des contrôles de risque appropriés, elle peut obtenir de bons rendements.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Shaff Trend Cycle coded by Alex Orekhov (everget)
// Strategy and its additional conditions provided by greenmask
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("STC", shorttitle="STC")

fastLength = input(title="MACD Fast Length", type=input.integer, defval=23)
slowLength = input(title="MACD Slow Length", type=input.integer, defval=50)
cycleLength = input(title="Cycle Length", type=input.integer, defval=10)
d1Length = input(title="1st %D Length", type=input.integer, defval=3)
d2Length = input(title="2nd %D Length", type=input.integer, defval=3)
src = close
highlightBreakouts = input(title="Highlight Breakouts ?", type=input.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] ? color.green : color.red) : #ff3013
stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
upper = 75
lower = 25
transparent = color.new(color.white, 100)
upperLevel = plot(upper, title="Upper", color=color.gray)
hline(50, title="Middle", linestyle=hline.style_dotted)
lowerLevel = plot(lower, title="Lower", color=color.gray)

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

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

fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
targetvalue = input(title="Target/stop", type=input.integer, defval=400)

ma1length = input(title="SMA1", type=input.integer, defval=35)
ma2length = input(title="SMA2", type=input.integer, defval=200)
ma1 = ema(close,ma1length)
ma2 = ema(close,ma2length)

bullbuy = crossover(stc, lower) and ma1>ma2 and close>ma1
bearsell = crossunder(stc, upper) and ma1<ma2 and close<ma1

if (bullbuy)
    strategy.entry("Riposte", strategy.long, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

if (bearsell)
    strategy.entry("Riposte", strategy.short, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

//plotshape(bullbuy,  title= "Purple", location=location.belowbar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
//plotshape(bearsell,  title= "Purple", location=location.abovebar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
















Plus de