Ý tưởng cốt lõi của chiến lược này là xác định phạm vi giá hiện tại bằng cách kết hợp các chỉ số RSI của các chu kỳ khác nhau và thực hiện các hành động mua hoặc bán tương ứng trong các chu kỳ nhỏ hơn khi có sự đột phá trong RSI chu kỳ lớn hơn.
Các bước chính cho chiến lược này để xác định phạm vi giá và tìm cơ hội giao dịch là:
Ví dụ, khi chỉ số RSI hàng ngày phá vỡ mức cao trước đó, chúng tôi đánh giá rằng hiện tại nó là thị trường tăng. Và khi chỉ số RSI hàng ngày phá vỡ dưới mức thấp trước đó, chúng tôi đánh giá nó là thị trường gấu. Trong cả hai trường hợp, chúng tôi hành động dài và ngắn tương ứng trong biểu đồ 5 phút.
So với các chiến lược truyền thống chỉ tập trung vào một giai đoạn, chiến lược này có những lợi thế sau:
Đánh giá chính xác hơn về giá trị giá tương đối hiện tại Các chu kỳ lớn hơn như hàng ngày có thể lọc tiếng ồn thị trường ngắn hạn và xác định xu hướng và khu vực giá trị tổng thể.
Kết hợp các chỉ số qua các giai đoạn cải thiện độ tin cậy tín hiệu. Chỉ dựa vào chỉ số thời gian duy nhất có thể tạo ra tín hiệu sai dễ dàng hơn, trong khi các tín hiệu đồng thời từ nhiều giai đoạn là đáng tin cậy hơn.
Tận dụng các cơ hội ngắn hạn hiệu quả hơn. trong khi chúng ta chỉ cần tìm cơ hội trong các chu kỳ nhỏ như 5 phút để kiếm lợi nhuận.
Tỷ lệ giảm nhỏ hơn. Kết hợp các giai đoạn chéo giúp tránh bị mắc kẹt. Chúng ta có thể thoát ra nhanh chóng khi các chỉ số chu kỳ lớn bắt đầu đảo ngược.
Những rủi ro chính của chiến lược này nằm ở:
Phản án sai trong các chỉ số chu kỳ lớn. Định nghĩa không hiệu quả của khu vực giá trị trong RSI hàng ngày, v.v. có thể dẫn đến tín hiệu sai. Điều chỉnh tham số của RSI là cần thiết để cải thiện độ chính xác.
Sự khác biệt giữa chuyển động giá chu kỳ nhỏ và xác định chu kỳ lớn. Đôi khi chuyển động ngắn hạn chống lại xu hướng hình ảnh lớn. Chúng ta cần thiết lập stop loss thích hợp để kiểm soát lỗ.
Quản lý rủi ro không phù hợp. Mất quá mức trong giao dịch duy nhất do kích thước vị trí kém có thể dẫn đến giảm không thể phục hồi.
Vẫn còn nhiều chỗ để cải thiện chiến lược này, chủ yếu là về các khía cạnh sau:
Kiểm tra thêm các kết hợp thời gian để tìm các tham số tối ưu.
Điều chỉnh tham số RSI. Điều chỉnh các tham số RSI lookback vv để cải thiện độ chính xác phán đoán.
Thêm thêm các chỉ số. Tạo thêm các chỉ số như MA để giúp đánh giá hướng xu hướng.
Cải thiện cơ chế dừng lỗ. Điều chỉnh động các điểm dừng lỗ dựa trên điều kiện rút tiền.
Tối ưu hóa quy tắc kích thước vị trí. Quản lý kích thước vị trí cụ thể cho mỗi giao dịch một cách khoa học hơn.
Chiến lược này nhận ra sự điều chỉnh giai đoạn chéo giữa các chiều dài thời gian khác nhau bằng cách đánh giá tình trạng tăng giá trong RSI giai đoạn chéo. Ý tưởng này của sự đánh giá giai đoạn chéo xứng đáng được khai thác hơn nữa. Chúng ta có thể tiếp tục cải thiện nó thông qua điều chỉnh tham số, tối ưu hóa dừng lỗ, kết hợp chỉ số để làm cho nó có lợi hơn. Nhìn chung, chiến lược này có một ý tưởng độc đáo và tiềm năng lớn để tăng cường.
/*backtest start: 2022-12-05 00:00:00 end: 2023-12-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Swing MTF", shorttitle="Swing MTF", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5) // otf_period = input(defval=2, title="Look Back Period (2nd Timeframe)") otf = input(defval="180", title="Second Momentum Timeframe") // Function to dectect a new bar is_newbar(res) => t = time(res) change(t) != 0 ? true : false // Check how many bars are in our upper timeframe since_new_bar = barssince(is_newbar(otf)) otf_total_bars = na otf_total_bars := since_new_bar == 0 ? since_new_bar[1] : otf_total_bars[1] //Calculate RSI Values ctf_rsi = rsi(open, otf_period) breakline=input(title="Breaks in lines", defval = true, type=bool) so = request.security(syminfo.tickerid, otf, rsi(open, otf_period)) sc = request.security(syminfo.tickerid, otf, rsi(close, otf_period)) final_otf_so = na final_otf_so := barstate.isrealtime ? since_new_bar == otf_total_bars ? so : final_otf_so[1] : so final_otf_sc = na final_otf_sc := barstate.isrealtime ? since_new_bar == otf_total_bars ? sc : final_otf_sc[1] : sc barsback = input(11, title='Bars back to check for a swing') // showsig = input(false, title='Show Signal Markers') swing_detection(index)=> swing_high = false swing_low = false start = (index*2) - 1 // -1 so we have an even number of swing_point_high = final_otf_so[index] swing_point_low = final_otf_sc[index] //Swing Highs for i = 0 to start swing_high := true if i < index if final_otf_so[i] > swing_point_high swing_high := false break // Have to do checks before pivot and after seperately because we can get // two highs of the same value in a row. Notice the > and >= difference if i > index if final_otf_so[i] >= swing_point_high swing_high := false break //Swing lows for i = 0 to start swing_low := true if i < index if final_otf_sc[i] < swing_point_low swing_low := false break // Have to do checks before pivot and after seperately because we can get // two lows of the same value in a row. Notice the > and >= difference if i > index if final_otf_sc[i] <= swing_point_low swing_low := false break [swing_high, swing_low] // Check for a swing [swing_high, swing_low] = swing_detection(barsback) long = final_otf_so > final_otf_sc short = final_otf_so < final_otf_sc if swing_low and long strategy.entry("My Long Entry Id", strategy.long) if swing_high and short strategy.entry("My Short Entry Id", strategy.short)