Cette stratégie est une stratégie combinée qui intègre des indicateurs de dynamique, des indicateurs de suivi de tendance et des indicateurs de moyenne mobile pour réaliser la tendance suivante et l'entrée/sortie de rupture.
La stratégie est composée des indicateurs suivants:
Les lignes EMA: Utilisez les lignes EMA 25, 50, 100 et 200 pour déterminer la tendance principale.
Indicateur de suivi de tendance de Supertrend: Les paramètres sont le facteur 3 et l'ATR 10 pour juger si le prix actuel est en tendance haussière ou baissière.
Indicateur de dynamique stochastique: %K 8 et %D 3 pour déterminer si Stochastique génère une croix dorée ou une croix morte.
La stratégie d'achat est la suivante: EMA montre tendance haussière + Supertrend montre tendance haussière + Croix dorée stochastique.
La stratégie de vente est la suivante: EMA montre tendance à la baisse + Supertrend montre tendance à la baisse + Stochastique croix morte.
Cette stratégie intègre des indicateurs de tendance, de dynamique et de rupture pour déterminer de manière fiable les mouvements du marché et les points de négociation.
Les principaux avantages de cette stratégie sont les suivants:
La combinaison de plusieurs indicateurs améliore la robustesse et filtre efficacement les fausses fuites.
L'ajout d'un indicateur de dynamique peut détecter les points tournants.
Les paramètres personnalisables s'adaptent aux différents environnements du marché.
Réalise un réglage de stop loss et de prise de profit relativement efficace.
Ça fonctionne bien quand on le teste sur de longues périodes comme tous les jours.
Il y a aussi des risques:
Les paramètres doivent être optimisés, ce qui peut entraîner des transactions trop fréquentes ou des signaux instables.
Il peut encore y avoir des erreurs de jugement dans le timing.
Le stop loss mis sur les extrêmes stochastiques peut être trop proche.
Les données insuffisantes des tests antérieurs peuvent entraîner un biais dans l'ajustement des paramètres.
La stratégie peut être optimisée de la manière suivante:
Testez plus d'ensembles de paramètres pour trouver l'optimum. Par exemple, ajustez le facteur Supertrend.
Ajoutez plus d'indicateurs de filtre comme l'énergie ou la volatilité pour réduire les erreurs de jugement.
Tester différentes méthodes de stop loss, par exemple le stop loss basé sur le pourcentage.
Optimiser pour tirer profit, comme un arrêt de trail pour bloquer plus de profits.
Élargir la portée, s'adapter à plus de produits ou à des délais plus longs.
La logique de la stratégie est claire et la sélection de l'indicateur raisonnable. Elle réalise le suivi de tendance et le trading de rupture de momentum avec de bons résultats de backtest. Mais il y a encore de la place pour l'optimisation, par exemple le réglage des paramètres, l'ajout de filtres, l'amélioration des arrêts et la prise de profit.
/*backtest start: 2023-12-05 00:00:00 end: 2023-12-06 07:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Supertrend + Stoch Strategy", overlay=true) // ---inputs--- pl = input(1.5, title="P/L", minval=0.1) lossPercentage = input(1, title="Loss Percentage", minval=1, maxval=100) atrPeriod = input(10, "ATR Length") factor = input(3, "Supertrend Factor") periodK = input(8, title="%K Length", minval=1) smoothK = input(3, title="%K Smoothing", minval=1) periodD = input(3, title="%D Smoothing", minval=1) ema1l = input(25, title="EMA 1 Length", minval=1) ema2l = input(50, title="EMA 2 Length", minval=1) ema3l = input(100, title="EMA 3 Length", minval=1) ema4l = input(200, title="EMA 4 Length", minval=1) // ---lines--- ema1 = ema(close, ema1l) ema2 = ema(close, ema2l) ema3 = ema(close, ema3l) ema4 = ema(close, ema4l) trendUpper = ema1 > ema2 and ema3 > ema4 trendLower = ema1 < ema2 and ema3 < ema4 [supertrend, direction] = supertrend(factor, atrPeriod) supertrendUpper = direction < 0 supertrendLower = direction > 0 k = sma(stoch(close, high, low, periodK), smoothK) d = sma(k, periodD) stochCrossOver = crossover(k, d) stochCrossUnder = crossunder(k, d) // ---plot--- plot(ema1, color=color.green) plot(ema2, color=color.orange) plot(ema3, color=color.blue) plot(ema4, color=color.purple) bodyMiddle = plot((open + close) / 2, display=display.none) upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr) downTrend = plot(direction < 0 ? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr) fill(bodyMiddle, upTrend, color.new(color.green, 95), fillgaps=false) fill(bodyMiddle, downTrend, color.new(color.red, 95), fillgaps=false) // ---stop place compute--- edge = 0. // periodly high/low edge := stochCrossOver ? high : stochCrossUnder ? low : k > d ? max(edge[1], high) : k < d ? min(edge[1], low) : edge[1] // plot(edge) // ---trade condition--- // longCond = trendUpper and supertrendUpper and stochCrossOver // shortCond = trendLower and supertrendLower and stochCrossUnder longCond = trendUpper and supertrendUpper and stochCrossOver and strategy.position_size == 0 shortCond = trendLower and supertrendLower and stochCrossUnder and strategy.position_size == 0 // ---stop & take--- stop = 0. stop := nz(stop[1], stop) take = 0. take := nz(take[1], take) if longCond stop := edge[1] take := close + (close - stop) * pl if shortCond stop := edge[1] take := close - (stop - close) * pl // ---trade--- qty = strategy.equity / abs(stop - close) / 100 * lossPercentage strategy.entry("Buy", strategy.long, when=longCond, qty=qty) strategy.exit("Close Buy","Buy", limit=take, stop=stop) strategy.entry("Sell", strategy.short, when=shortCond, qty=qty) strategy.exit("Close Sell","Sell", limit=take, stop=stop) stopLine = plot(strategy.position_size != 0 ? stop : na, color=color.red, style=plot.style_linebr) takeLine = plot(strategy.position_size != 0 ? take : na, color=color.green, style=plot.style_linebr) entryLine = plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.blue, style=plot.style_linebr) fill(entryLine, stopLine, color.new(color.red, 90), fillgaps=false) fill(entryLine, takeLine, color.new(color.green, 90), fillgaps=false)