Cette stratégie est un système de trading automatisé qui combine plusieurs indicateurs techniques, utilisant principalement des indicateurs RSI (Relative Strength Index), CHOP (Choppiness Index) et stochastique pour identifier les tendances du marché tout en gérant les risques de trading grâce à des mécanismes dynamiques de prise de profit et de stop-loss.
La stratégie utilise quatre indicateurs de base pour la détection des tendances et la génération de signaux commerciaux: L'indicateur RSI pour identifier les conditions de surachat/survente (indicateur RSI <30 suracheté, >70 suracheté) 2. indice CHOP pour déterminer l'agitation du marché (<50 indique une tendance claire) 3. croisements de lignes stochastiques K et D pour la confirmation des délais de négociation 4. SMA (moyenne mobile simple) pour l'assistance globale de la tendance
Les règles de négociation sont les suivantes: - Entrée longue: RSI<30 + CHOP<50 + la ligne K traverse la ligne D - Entrée courte: RSI>70 + CHOP<50 + la ligne K traverse la ligne D La stratégie met en œuvre des niveaux dynamiques de prise de profit et de stop-loss pour le contrôle des risques, basés sur des pourcentages.
Cette stratégie construit un système de trading relativement complet grâce à une combinaison d'indicateurs multiples et un contrôle strict des risques. Bien qu'il existe des domaines d'optimisation, la conception globale est claire et a une valeur d'application pratique.
/*backtest start: 2024-12-17 00:00:00 end: 2025-01-16 00:00:00 period: 4h basePeriod: 4h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("RSI + CHOP + Stochastic Strategy", overlay=true) // Parametry wskaźników rsiPeriod = input(14, title="RSI Period") chopPeriod = input(14, title="Choppiness Period") stochK = input(14, title="Stochastic K Period") stochD = input(3, title="Stochastic D Period") stochSmoothK = input(3, title="Stochastic Smooth K Period") smaPeriod = input(50, title="SMA Period") // Parametry Take Profit i Stop Loss longTakeProfitPct = input.float(1.0, title="Long Take Profit %", minval=0.1, step=0.1) / 100 longStopLossPct = input.float(5.0, title="Long Stop Loss %", minval=0.1, step=0.1) / 100 shortTakeProfitPct = input.float(1.0, title="Short Take Profit %", minval=0.1, step=0.1) / 100 shortStopLossPct = input.float(5.0, title="Short Stop Loss %", minval=0.1, step=0.1) / 100 // Obliczenia wskaźników rsiValue = ta.rsi(close, rsiPeriod) highLowRange = ta.highest(high, chopPeriod) - ta.lowest(low, chopPeriod) chopIndex = 100 * math.log10(highLowRange / ta.sma(close, chopPeriod)) / math.log10(2) stoch = ta.stoch(close, high, low, stochK) k = stoch[0] d = stoch[1] // Obliczenia SMA smaValue = ta.sma(close, smaPeriod) // Warunki kupna i sprzedaży buyCondition = (rsiValue < 30) and (chopIndex < 50) and (ta.crossover(k, d)) sellCondition = (rsiValue > 70) and (chopIndex < 50) and (ta.crossunder(k, d)) var float longStopLevel = na var float longTakeProfitLevel = na var float shortStopLevel = na var float shortTakeProfitLevel = na // Wejście w pozycję długą if (buyCondition and na(longStopLevel)) strategy.entry("Long", strategy.long) longStopLevel := na // Zresetuj poziom Stop Loss longTakeProfitLevel := na // Zresetuj poziom Take Profit // Wejście w pozycję krótką if (sellCondition and na(shortStopLevel)) strategy.entry("Short", strategy.short) shortStopLevel := na // Zresetuj poziom Stop Loss shortTakeProfitLevel := na // Zresetuj poziom Take Profit // Ustaw poziomy Take Profit i Stop Loss na podstawie ceny wejścia w pozycję if (strategy.position_size > 0 and na(longTakeProfitLevel)) longStopLevel := strategy.position_avg_price * (1 - longStopLossPct) longTakeProfitLevel := strategy.position_avg_price * (1 + longTakeProfitPct) if (strategy.position_size < 0 and na(shortTakeProfitLevel)) shortStopLevel := strategy.position_avg_price * (1 + shortStopLossPct) shortTakeProfitLevel := strategy.position_avg_price * (1 - shortTakeProfitPct) // Resetowanie poziomów po wyjściu z pozycji if (strategy.position_size == 0) longStopLevel := na longTakeProfitLevel := na shortStopLevel := na shortTakeProfitLevel := na // Wyjście z pozycji długiej if (strategy.position_size > 0) strategy.exit("Take Profit", "Long", limit=longTakeProfitLevel, stop=longStopLevel) // Wyjście z pozycji krótkiej if (strategy.position_size < 0) strategy.exit("Take Profit", "Short", limit=shortTakeProfitLevel, stop=shortStopLevel) // Oznaczenie poziomów stop loss i take profit na wykresie plot(series=longStopLevel, title="Long Stop Loss", color=color.red, linewidth=1, style=plot.style_circles) plot(series=longTakeProfitLevel, title="Long Take Profit", color=color.green, linewidth=1, style=plot.style_circles) plot(series=shortStopLevel, title="Short Stop Loss", color=color.red, linewidth=1, style=plot.style_circles) plot(series=shortTakeProfitLevel, title="Short Take Profit", color=color.green, linewidth=1, style=plot.style_circles) // Wyświetlanie wskaźników na wykresie plot(rsiValue, title="RSI", color=color.blue, linewidth=2) hline(30, "RSI 30", color=color.red) hline(70, "RSI 70", color=color.red) plot(chopIndex, title="Choppiness Index", color=color.purple, linewidth=2) hline(50, "CHOP 50", color=color.red) plot(k, title="Stochastic K", color=color.green, linewidth=2) plot(d, title="Stochastic D", color=color.red, linewidth=2) hline(20, "Stoch 20", color=color.red) hline(80, "Stoch 80", color=color.red) // Wyświetlanie SMA na wykresie plot(smaValue, title="SMA", color=color.orange, linewidth=2)