
Chiến lược này dựa trên chỉ số Keltner Channel để thiết kế một chiến lược giao dịch rút lui. Chiến lược này được thiết kế bằng cách so sánh mối quan hệ giữa giá và đường lên xuống của Keltner Channel, để đánh giá thời gian giá có thể đảo ngược, và thực hiện các hoạt động giao dịch nhị phân thích hợp.
Chiến lược này sử dụng chỉ số Keltner Channel để xác định xu hướng giá. Keltner Channel bao gồm đường trung bình và độ sóng trung bình thực tế ((ATR)). Đường trên của kênh tương đương với đường trung bình cộng N lần ATR; đường dưới tương đương với đường trung bình trừ đi N lần ATR.
Ngoài ra, chiến lược này đánh giá cơ hội rút lui dựa trên giá chạm lại hoặc phá vỡ ranh giới kênh. Ví dụ, sau khi giá tăng vượt qua đường ray xuống, nó lại giảm chạm đường ray xuống mà không chạm đường ray lên, đây là một cơ hội để thực hiện nhiều lần rút lui.
Đây là một chiến lược giao dịch sử dụng tính năng thu hồi giá.
Những rủi ro chính của chiến lược này là:
Phản ứng:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Chiến lược này kết hợp các phương pháp đánh giá xu hướng và rút lại giao dịch, có lợi thế độc đáo trong việc nắm bắt các tình huống đảo ngược. Bằng cách điều chỉnh tham số và mở rộng chức năng, bạn có thể tăng thêm sự ổn định và lợi nhuận của chiến lược.
/*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")