Keltner Channel Pullback chiến lược

Tác giả:ChaoZhang, Ngày: 2023-12-27 14:49:39
Tags:

img

Tổng quan

Chiến lược này thiết kế một chiến lược giao dịch rút lui dựa trên chỉ số Keltner Channel. Nó đánh giá thời gian đảo ngược giá tiềm năng bằng cách so sánh giá với đường ray trên và dưới của Keltner Channel, và có các vị trí dài và ngắn thích hợp.

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

Chiến lược này sử dụng chỉ số Keltner Channel để đánh giá xu hướng giá. Keltner Channel bao gồm trung bình chuyển động và phạm vi trung bình thực (ATR). Đường sắt trên bằng trung bình chuyển động cộng với N lần ATR; đường sắt dưới bằng trung bình chuyển động trừ N lần ATR. Khi giá vượt qua đường sắt dưới của kênh từ dưới lên, nó được coi là sức mạnh tăng và các vị trí dài có thể được thực hiện; khi giá vượt qua đường sắt trên từ trên xuống, nó được coi là sức mạnh giảm được tăng và các vị trí ngắn có thể được thực hiện.

Ngoài ra, cơ sở cho chiến lược đánh giá cơ hội rút lui là giá chạm hoặc phá vỡ ranh giới kênh một lần nữa. Ví dụ, sau khi giá tăng để phá vỡ đường ray dưới, nếu nó giảm lại để chạm vào đường ray dưới mà không chạm vào đường ray trên, đó là một cơ hội để rút lui dài. Chiến lược sẽ mở các vị trí dài vào thời điểm này.

Phân tích lợi thế

Đây là một chiến lược giao dịch sử dụng các đặc điểm giảm giá.

  1. Sử dụng Keltner Channel để đánh giá hướng xu hướng giá có thể lọc hiệu quả tiếng ồn.
  2. Việc áp dụng chiến lược rút lui có thể đi vào thị trường trước khi đảo ngược và nắm bắt xu hướng lớn hơn.

Phân tích rủi ro

Những rủi ro chính của chiến lược này là:

  1. Trong thị trường một chiều dài, có thể có ít cơ hội rút lui, không thể kiếm lợi nhuận.
  2. Phán đoán không chính xác về tín hiệu rút lại có thể dẫn đến tổn thất.

Các biện pháp đối phó:

  1. Tối ưu hóa các tham số để điều chỉnh chiều rộng kênh để thích nghi với điều kiện thị trường.
  2. Tăng quản lý vị trí để giảm lỗ đơ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. Việc lọc đột phá dựa trên khối lượng giao dịch để tránh đột phá sai.
  2. Điều chỉnh kích thước vị trí dựa trên sự biến động.
  3. Cập nhật phương pháp dừng lỗ với dừng di chuyển để khóa thêm lợi nhuận.

Tóm lại

Chiến lược này tích hợp phương pháp đánh giá xu hướng và phương pháp giao dịch rút lui, và có những lợi thế độc đáo trong việc nắm bắt xu hướng đảo ngược. Bằng cách điều chỉnh các tham số và mở rộng các chức năng, sự ổn định và lợi nhuận của chiến lược có thể được tăng thêm.


/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Keltner bounce from border. No repaint. (by Zelibobla)", shorttitle="Keltner border bounce", overlay=true)

price = close

// build Keltner
keltnerLength = input(defval=200, minval=1, title="Keltner EMA Period Length")
keltnerATRLength = input(defval=200, minval=1, title="Keltner ATR Period Length (the same as EMA length in classic Keltner Channels)")
keltnerDeviation = input(defval=8, minval=1, maxval=15, title="Keltner band width (in ATRs)")
closeOnEMATouch = input(type=bool, defval=false, title="Close trade on EMA touch? (less drawdown, but less profit and higher commissions impact)")
enterOnBorderTouchFromInside = input(type=bool, defval=false, title="Enter on border touch from inside? (by default from outside, which is less risky but less profitable)")
SL = input(defval=50, minval=0, maxval=10000, title="Stop loss in ticks (leave zero to skip)")
EMA = sma(price, keltnerLength)
ATR = atr(keltnerATRLength)
top = EMA + ATR * keltnerDeviation
bottom = EMA - ATR * keltnerDeviation

buyEntry = crossover(price, bottom)
sellEntry = crossunder(price, top)
plot(EMA, color=aqua,title="EMA")
p1 = plot(top, color=silver,title="Keltner top")
p2 = plot(bottom, color=silver,title="Keltner bottom")
fill(p1, p2)

tradeSize = input(defval=1, minval=1, title="Trade size")

if ( enterOnBorderTouchFromInside and crossunder(price, bottom) )
    strategy.entry("BUY", strategy.long, qty=tradeSize, comment="BUY")
else
    if( crossover(price, bottom) )
        strategy.entry("BUY", strategy.long, qty=tradeSize, comment="BUY")

if( crossover(price,EMA) and closeOnEMATouch )
    strategy.close("BUY")

if( 0 != SL )
    strategy.exit("EXIT BUY", "BUY", qty=tradeSize, loss=SL)
    strategy.exit("EXIT SELL", "SELL", qty=tradeSize, loss=SL)
   
if( enterOnBorderTouchFromInside and crossover(price, bottom) )
    strategy.entry("SELL", strategy.long, qty=tradeSize, comment="SELL")
else
    if ( crossunder(price, top) )
        strategy.entry("SELL", strategy.short, qty=tradeSize, comment="SELL")
    
    
if( crossunder(price, EMA) and closeOnEMATouch )
    strategy.close("SELL")

Thêm nữa