
Mục đích của chiến lược này là nghiên cứu sự khác biệt giữa việc mua tài sản trong thời gian biến động thấp và biến động cao. Nó cho phép người dùng chọn mua trong thời gian biến động thấp và biến động cao bằng cách thay đổi biến input mode.
Chiến lược này xác định tỷ lệ biến động bằng cách tính ATR và SMA của nó. Cụ thể, nó tính SMA của ATR, sau đó tính tỷ lệ của ATR với SMA của nó. Nếu tỷ lệ này cao hơn ngưỡng định nghĩa của người dùng volatilityTargetRatio, thì nó được coi là biến động cao; nếu thấp hơn ngưỡng đó, thì nó được coi là biến động thấp.
Tùy thuộc vào chế độ mà người dùng chọn, chiến lược sẽ tạo ra tín hiệu mua khi có biến động cao hoặc thấp. Một khi đã mua, chiến lược sẽ giữ một số bar nhất định (được xác định bởi sellAfterNBarsLength) và sau đó thanh toán.
Những ưu điểm chính của chiến lược này là:
Những rủi ro chính của chiến lược này là:
Những rủi ro trên có thể được giảm nhẹ bằng cách điều chỉnh các tham số, kết hợp các mức độ biến động khác nhau.
Chiến lược này có thể được tối ưu hóa hơn nữa:
Chiến lược này có thể so sánh hiệu quả hiệu suất của chiến lược mua có biến động thấp và chiến lược mua có biến động cao. Nó sử dụng SMA để làm mịn ATR, tạo tín hiệu giao dịch dựa trên mức độ biến động. Chiến lược này có thể được cải thiện bằng cách điều chỉnh các tham số và điều kiện tối ưu hóa.
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © I11L
//@version=5
strategy("I11L - Better Buy Low Volatility or High Volatility?", overlay=false)
mode = input.string("Buy low Volatility",options = ["Buy low Volatility","Buy high Volatility"])
volatilityTargetRatio = input.float(1,minval = 0, maxval = 100,step=0.1, tooltip="1 equals the average atr for the security, a lower value means that the volatility is lower")
atrLength = input.int(14)
atr = ta.atr(atrLength) / close
avg_atr = ta.sma(atr,atrLength*5)
ratio = atr / avg_atr
sellAfterNBarsLength = input.int(5, step=5, minval=0)
var holdingBarsCounter = 0
if(strategy.opentrades > 0)
holdingBarsCounter := holdingBarsCounter + 1
isBuy = false
if(mode == "Buy low Volatility")
isBuy := ratio < volatilityTargetRatio
else
isBuy := ratio > volatilityTargetRatio
isClose = holdingBarsCounter > sellAfterNBarsLength
if(isBuy)
strategy.entry("Buy",strategy.long)
if(isClose)
holdingBarsCounter := 0
strategy.exit("Close",limit=close)
plot(ratio, color=isBuy[1] ? color.green : isClose[1] ? color.red : color.white)
plot(1, color=color.white)