Chiến lược phá vỡ kênh dao động

Tác giả:ChaoZhang, Ngày: 2023-11-15 16:01:09
Tags:

img

Tổng quan

Đây là một chiến lược giao dịch đột phá dựa trên các chỉ số kênh. Nó sử dụng đặc điểm dao động của các dải kênh để đi dài khi giá vượt qua dải trên và đi ngắn khi phá vỡ dưới dải dưới. Nó thuộc thể loại chiến lược theo xu hướng.

Chiến lược logic

Chiến lược đầu tiên sử dụng SMA để tính toán đường giữa của kênh. Dải trên được đặt là đường giữa cộng với giá trị tham số, và dải dưới là đường giữa trừ giá trị tham số, tạo thành một kênh giá. Sau đó nó đánh giá xem giá có vượt ra khỏi các dải trên hoặc dưới, kết hợp với sự gia tăng khối lượng giao dịch như tín hiệu mở. Khi giá giảm trở lại kênh, nó phục vụ như tín hiệu đóng cửa.

Cụ thể, logic giao dịch là như sau:

  1. Tính toán đường trung: SMA (gần, N)

  2. Dải trên: đường trung + giá trị tham số

  3. Phạm vi dưới: đường trung - giá trị tham số

  4. Khi giá phá vỡ trên dải trên, nếu khối lượng giao dịch lớn hơn 2x của giai đoạn trước, đi dài.

  5. Khi giá giảm trở lại kênh, đóng vị trí dài.

  6. Khi giá phá vỡ dưới dải dưới, nếu khối lượng giao dịch lớn hơn 2 lần so với giai đoạn trước, đi ngắn.

  7. Khi giá giảm trở lại kênh, đóng vị trí ngắn.

Phân tích lợi thế

Những lợi thế của chiến lược này là:

  1. Sử dụng chỉ số kênh có thể theo dõi hiệu quả xu hướng giá.

  2. Kết hợp với sự gia tăng khối lượng giao dịch sẽ lọc ra những sự đột phá sai lầm.

  3. Quay trở lại kênh phục vụ như một cơ chế dừng lỗ và giới hạn lỗ cho mỗi giao dịch.

  4. Đặc điểm dao động phù hợp với xu hướng trung hạn.

  5. Lý thuyết đơn giản làm cho nó dễ hiểu và thực hiện.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Các giao dịch theo cùng một hướng khi giá bám vào một bên của kênh cho một thời gian dài, tăng nguy cơ mất mát.

  2. Cài đặt tham số kênh không chính xác có thể gây ra tín hiệu sai quá mức.

  3. Các tiêu chí sai cho khối lượng giao dịch tăng có thể bỏ lỡ các tín hiệu đột phá thực sự.

  4. Cơ chế dừng lỗ có thể quá bảo thủ, bỏ lỡ các động thái lớn hơn.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Tối ưu hóa các thông số kênh để phù hợp với các đặc điểm thị trường khác nhau.

  2. Cải thiện các tiêu chí vị trí mở, chẳng hạn như xem xét đường chéo MA hoặc mô hình nến, để tránh đột phá sai.

  3. Tối ưu hóa cơ chế dừng lỗ, cho phép phạm vi dừng lỗ rộng hơn để tránh thoát sớm.

  4. Thêm các quy tắc kích thước vị trí để điều chỉnh kích thước vị trí và sử dụng vốn dựa trên điều kiện thị trường.

  5. Bao gồm nhiều chỉ số hơn để xác định hướng xu hướng tổng thể, tránh giao dịch chống lại xu hướng chính.

Tóm lại

Tóm lại, đây là một chiến lược theo xu hướng đơn giản và thực tế. Bằng cách sử dụng dao động kênh, nó có thể nắm bắt hiệu quả các xu hướng trung hạn. Nhưng điều chỉnh tham số là cần thiết để phù hợp với các thị trường khác nhau và rủi ro nên được theo dõi. Tăng cường tối ưu hóa thêm với nhiều chỉ số và kỹ thuật hơn có thể nâng cao sự ổn định và lợi nhuận của nó.


/*backtest
start: 2022-11-08 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Copyright, 2022, Cache_that_pass.  You are free to use this script however you see fit and reproduce it in any manner.

//@version=5

            //////  Name the strategy between the 2 quotation marks.  Consider setting commission type and value in strategy header to match exchanges rates. //////

strategy("Oscillating SSL Channel Strategy", "O-SSL Strat", overlay=true, pyramiding=1, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 100, calc_on_order_fills=true)



            //////  Inputs and calculations used by script  //////

period = input(title='Period', defval=25)
len = input(title='Period', defval=25)
smaHigh = ta.sma(high, len)
smaLow = ta.sma(low, len)
Hlv = int(na)
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

            //////  Show me the money  //////

plot(sslDown, linewidth=2, color=color.new(color.red, 0))
plot(sslUp, linewidth=2, color=color.new(color.lime, 0))


            //////  Trade execution logic  //////  
            
//pseudo-code//
        //Go long when high (or maybe close) breaks above the sslUp and volume is 2x or > Volume[1] and sslUp > sslDown
        //Close the above longs when sslUp crosses under sslDown (or set takeprofit and stop loss exits)
        //
        //Go short when low is lower than the sslUp and volume is 2x or > Volume[1] and sslDown > sslUp
        //Close shorts when sslDown crosses under sslUp

longCondition1 = (sslUp > sslDown)
longCondition2 = ta.crossover(high, sslUp)
//longCondition3 = (volume >= (volume[1]*1.89))
longCondition = ((longCondition1) and (longCondition2))// and (longCondition3))

longExit = ta.crossunder(sslUp, sslDown)

            //////  Bring It  //////
if (longCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (longExit)
    strategy.close("Bring It", comment="Sling It")


shortCondition1 = (sslDown) > (sslUp)
shortCondition2 = ta.crossunder(low, sslUp)
//shortCondition3 = (volume >= (volume[1]*1.89))
shortCondition = ((shortCondition1) and (shortCondition2))// and (shortCondition3))

shortExit = ta.crossunder(sslDown, sslUp)

            //////  Bring It  //////
if (shortCondition)
    strategy.entry("Bring It", strategy.long)

            //////  Sling It  //////
if (shortExit)
    strategy.close("Bring It", comment="Sling It")

            //////  Sling It  //////
if (shortCondition)
    strategy.entry("Sling It", strategy.short)

            //////  Bling It  //////
if (shortExit)
    strategy.close("Sling It", comment="Bring It")



Thêm nữa