Chiến lược đột phá vùng giá trị xuyên chu kỳ


Ngày tạo: 2023-12-12 10:58:22 sửa đổi lần cuối: 2023-12-12 10:58:22
sao chép: 0 Số nhấp chuột: 361
1
tập trung vào
1212
Người theo dõi

Chiến lược đột phá vùng giá trị xuyên chu kỳ

Tổng quan

Ý tưởng cốt lõi của chiến lược này là kết hợp các chỉ số RSI của các chu kỳ khác nhau để xác định khu vực giá hiện tại, và khi thấy các chỉ số RSI chu kỳ lớn hơn có đột phá, hãy thực hiện giao dịch mua hoặc bán tương ứng trong các chu kỳ nhỏ hơn. Chiến lược này tổng hợp lợi thế của các chỉ số kỹ thuật chu kỳ khác nhau để xác định giá trị tương đối của giá hiện tại thông qua nhiều chiều thời gian để tìm kiếm điểm vào tốt hơn.

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

Chiến lược này chủ yếu xác định các khu vực giá và tìm kiếm các cơ hội giao dịch thông qua các bước sau:

  1. Tính toán các điểm cao nhất (Swing High) và điểm thấp nhất (Swing Low) của chỉ số RSI trong chu kỳ lớn hơn (ví dụ như đường hằng ngày)
  2. Xác định RSI chu kỳ lớn có cao nhất hoặc thấp nhất trong một chu kỳ xem xét nhất định
  3. Nếu có sự phá vỡ, hãy đánh giá giá trong một chu kỳ nhỏ hơn (ví dụ như đường 5 phút) và thực hiện các hoạt động mua hoặc bán tương ứng.

Ví dụ, khi chỉ số RSI đường ngày phá vỡ một mức cao mới, chúng tôi đánh giá hiện tại đang ở trong giao dịch đa đầu, và nếu RSI đường ngày phá vỡ một mức thấp mới, chúng tôi đánh giá hiện tại đang ở trong giao dịch trống, trong cả hai trường hợp chúng tôi thực hiện mua và bán trên đường 5 phút.

Phân tích lợi thế

So với các chiến lược truyền thống chỉ tập trung vào một chu kỳ thời gian, chiến lược này có một số ưu điểm:

  1. Đánh giá giá trị tương đối của giá hiện tại chính xác hơn. Các chỉ số chu kỳ lớn hơn như đường nắng có thể lọc ra tiếng ồn thị trường ngắn hạn, phán đoán xu hướng chu kỳ lớn và khu vực giá trị.

  2. Kết hợp với các chỉ số chu kỳ thời gian khác nhau, tăng độ tin cậy của tín hiệu. Dựa vào chỉ số chu kỳ đơn lẻ dễ bị tín hiệu sai, trong khi nhiều chỉ số chu kỳ phát tín hiệu đồng thời thì đáng tin cậy hơn.

  3. Chúng ta cần tìm kiếm cơ hội trong khoảng thời gian ngắn như 5 phút để có được lợi nhuận.

  4. Quay lại nhỏ hơn. Kết hợp theo chu kỳ thời gian giúp tránh bị lôi kéo. Khi chỉ số chu kỳ lớn biến đổi, chúng tôi sẽ dừng lỗ khi rút ra.

Phân tích rủi ro

Rủi ro chính của chiến lược này là:

  1. Lỗi đánh giá của chỉ số chu kỳ lớn. Các chỉ số như RSI đường ngày không có khả năng đánh giá hiệu quả các khu vực giá trị, có thể dẫn đến lỗi tín hiệu. Điều này đòi hỏi phải tối ưu hóa các tham số của RSI.

  2. Các hoạt động của chu kỳ nhỏ không phù hợp với phán đoán của chu kỳ lớn. Đôi khi, các động thái giá của chu kỳ nhỏ sẽ chống lại xu hướng của chu kỳ lớn, khi đó cần thiết phải thiết lập dừng lỗ để kiểm soát tổn thất.

  3. Quản lý tiền tệ không đúng cách. Nếu quản lý rủi ro không đúng cách, một lần mất mát quá lớn, sẽ dẫn đến khó phục hồi. Điều này đòi hỏi phải thiết lập quản lý vị thế hợp lý.

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

Có rất nhiều cách để tối ưu hóa chiến lược này, chủ yếu là từ các khía cạnh sau:

  1. Tối ưu hóa tham số chu kỳ. Bạn có thể thử nghiệm nhiều hơn các kết hợp chu kỳ để tìm tham số tối ưu.

  2. Tối ưu hóa tham số RSI. Bạn có thể điều chỉnh các tham số của RSI để xem liệu có thể cải thiện độ chính xác phán đoán hay không.

  3. Thêm các chỉ số khác. Bạn có thể thêm nhiều chỉ số để kết hợp, ví dụ như thêm đường trung bình để xác định xu hướng.

  4. Tối ưu hóa cơ chế dừng lỗ. Bạn có thể điều chỉnh điểm dừng lỗ một cách động theo trường hợp rút tiền.

  5. Tối ưu hóa quản lý vị thế. Có thể quản lý một cách khoa học và hợp lý hơn vị thế cụ thể của mỗi giao dịch.

Tóm tắt

Chiến lược này thực hiện đòn bẩy giá trị giữa các chiều thời gian khác nhau bằng cách đánh giá giá cả của chỉ số RSI trong các chu kỳ khác nhau. Suy nghĩ về phán đoán xuyên chu kỳ này đáng để khai thác thêm, chúng ta có thể liên tục hoàn thiện bằng các phương pháp tối ưu hóa tham số, tối ưu hóa dừng lỗ và tối ưu hóa kết hợp, để làm cho chiến lược có lợi thế hơn. Nói chung, chiến lược này có suy nghĩ độc đáo và có rất nhiều không gian tối ưu hóa.

Mã nguồn chiến lược
/*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)