
Cette stratégie est un système de trading automatisé qui combine plusieurs indicateurs techniques. Il identifie principalement les tendances du marché grâce à la coordination du RSI (Relative Strength Index), du CHOP (Cross Oscillation Index) et du Stochastic, et utilise un stop-profit et un stop-loss dynamiques pour stopper le marché. Gestion des pertes et risque de transaction. La stratégie utilise une période de 5 minutes pour les transactions à court terme et améliore la précision et la fiabilité des transactions grâce à la validation croisée multi-indicateurs.
La stratégie utilise quatre indicateurs de base pour la détermination des tendances et la génération de signaux de trading :
Les règles de trading sont les suivantes :
Cette stratégie construit un système de trading relativement complet grâce à une combinaison de plusieurs indicateurs et un contrôle strict des risques. Bien que certains domaines nécessitent d’être optimisés, l’idée de conception globale est claire et a une valeur d’application pratique. Grâce à une optimisation continue et à un ajustement des paramètres, la stabilité et la rentabilité de la stratégie peuvent être encore améliorées.
/*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)