
Chiến lược này là một hệ thống giao dịch tự động kết hợp nhiều chỉ báo kỹ thuật. Nó chủ yếu xác định xu hướng thị trường thông qua sự phối hợp của RSI (Chỉ số sức mạnh tương đối), CHOP (Chỉ số dao động chéo) và Stochastic, và sử dụng lệnh dừng lỗ và dừng lỗ động để dừng thị trường. Quản lý rủi ro giao dịch. Chiến lược này sử dụng khoảng thời gian 5 phút cho giao dịch ngắn hạn và cải thiện độ chính xác và độ tin cậy của giao dịch thông qua xác thực chéo nhiều chỉ báo.
Chiến lược này sử dụng bốn chỉ số cốt lõi để xác định xu hướng và tạo tín hiệu giao dịch:
Các quy tắc giao dịch như sau:
Chiến lược này xây dựng một hệ thống giao dịch tương đối hoàn chỉnh thông qua sự kết hợp của nhiều chỉ số và kiểm soát rủi ro chặt chẽ. Mặc dù có một số khu vực cần được tối ưu hóa, nhưng ý tưởng thiết kế tổng thể rất rõ ràng và có giá trị ứng dụng thực tế. Thông qua việc tối ưu hóa và điều chỉnh thông số liên tục, tính ổn định và lợi nhuận của chiến lược có thể được cải thiện hơn nữa.
/*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)