Chiến lược theo xu hướng dựa trên chỉ báo Stochastic và chỉ báo CCI


Ngày tạo: 2023-11-22 16:23:31 sửa đổi lần cuối: 2023-11-22 16:23:31
sao chép: 1 Số nhấp chuột: 844
1
tập trung vào
1617
Người theo dõi

Chiến lược theo xu hướng dựa trên chỉ báo Stochastic và chỉ báo CCI

Tổng quan

Chiến lược này kết hợp chỉ số Stochastic và chỉ số CCI để xác định hướng xu hướng, sử dụng chỉ số Rate of Change để lọc xu hướng dao động và thực hiện theo dõi xu hướng. Chiến lược sử dụng cách giao dịch đột phá vào, dừng lỗ.

Nguyên tắc chiến lược

  1. Chỉ số Stochastic đánh giá hình dạng trống
    Stochastic chỉ báo là một tín hiệu mua khi nó vượt qua gần nhất của nó trên một bar và một tín hiệu bán khi nó vượt qua gần nhất của nó trên một bar
  2. Chỉ số CCI đánh giá xu hướng
    CCI lớn hơn 0 cho thị trường đa đầu, nhỏ hơn 0 cho thị trường trống
  3. Chỉ số Rate of Change lọc xu hướng dao động
    Cài đặt tham số Rate of Change để xác định giá đang trong xu hướng hoạt động
  4. Quy tắc nhập cảnh và xuất cảnh
    Tín hiệu mua: Stochastic trên một thanh gần nhất và CCI lớn hơn 0 và xu hướng giá đang hoạt động
    Tín hiệu bán: Stochastic dưới một thanh gần nhất và CCI nhỏ hơn 0 và xu hướng giá hoạt động
    Stop loss exit: đường dài 3% Stop loss, đường ngắn 3% Stop loss

Phân tích lợi thế

  1. Kết hợp chỉ số Stochastic và chỉ số CCI để xác định hướng xu hướng, có độ chính xác cao
  2. Chỉ số Rate of Change có hiệu quả trong việc loại bỏ xu hướng dao động và tránh giao dịch không hiệu quả
  3. Giao dịch 2 chiều đa không gian, có thể nắm bắt các loại xu hướng khác nhau
  4. Tiếp theo, bạn có thể tham gia vào các chương trình khác.
  5. Ngăn chặn thiệt hại nghiêm ngặt, tránh thiệt hại lớn và kiểm soát rủi ro hiệu quả

Phân tích rủi ro

  1. Thiết lập các tham số chính sách không đúng có thể dẫn đến quá bảo thủ hoặc cực đoan
  2. Chỉ số có giới hạn và có thể không hiệu quả trong trường hợp cực đoan
  3. Những người tham gia đột phá sẽ bỏ qua xu hướng ban đầu và cắt giảm một phần lợi nhuận.
  4. Lệnh dừng quá nhỏ dễ bị phá vỡ, quá lớn thường không kiểm soát rủi ro

Hướng tối ưu hóa

  1. Tối ưu hóa tham số. Cải thiện các thiết lập tham số, tìm kiếm sự kết hợp tham số tối ưu
  2. Tham gia nhiều chỉ số hơn để đánh giá xu hướng, cải thiện hiệu quả ra quyết định
  3. Hạn chế tích cực. Thiết lập dừng theo dõi hoặc dừng theo bước thời gian, giảm khả năng phá vỡ
  4. Đánh giá rủi ro. Thêm các giới hạn về chỉ số rủi ro như rút tối đa, kiểm soát toàn bộ lỗ hổng rủi ro

Tóm tắt

Chiến lược này tích hợp Stochastic, CCI và Rate of Change, ba chỉ số lớn để xác định hướng xu hướng, nắm bắt cơ hội xu hướng bằng cách theo dõi theo dõi. Ưu điểm của chiến lược là các chỉ số được kết hợp để đánh giá chính xác, lọc hiệu quả hành vi chấn động, thông qua rủi ro kiểm soát lỗ hổng nghiêm ngặt. Bước tiếp theo có thể được cải thiện từ các khía cạnh tối ưu hóa tham số, nhiều chỉ số kết hợp, chiến lược dừng lỗ, để chiến lược trở nên vững chắc và linh hoạt hơn.

Mã nguồn chiến lược
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Stochastic CCI BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// CCI ///////////// 
src = close
ccilength = input(13, minval=1, title="CCI Length")
c=cci(src, ccilength)

///////////// Stochastic ///////////// 
len = input(19, minval=1, title="RSI Length")
lenema = input(12, minval=1, title="RSI-EMA Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
out = ema(rsi, lenema)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = out > out[1] and isMoving() and c > 0
short = out < out[1] and isMoving() and c < 0

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(3.0, title='Stop Loss %') / 100 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L",  strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)
    strategy.exit("L Ex", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S Ex", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(not isMoving() ? color.white : long ? color.lime : short ? color.red : na, transp=80)
plot(out, color = out > out[1] ? color.lime:color.red, linewidth = 2, title="Stoch")
plot(c, color = c > 0 ? color.lime:color.red, linewidth = 2, title="CCI")