
Chiến lược này là một chiến lược phá vỡ xu hướng dựa trên chỉ số ATR. Ý tưởng chính của nó là thực hiện các hoạt động phá vỡ xu hướng khi giá vượt quá ATR của một số nhân. Chiến lược này cũng bao gồm xác nhận xu hướng và sử dụng các tính năng hạn chế giao dịch trong phạm vi ngày.
Chiến lược sử dụng chỉ số ATR để xác định mức độ biến động giá. ATR là mức độ biến động thực trung bình, đo mức độ biến động giá trung bình trong một khoảng thời gian nhất định.
Khi giá tăng vượt qua số ATRs trên gấp đôi ATR, thực hiện nhiều hoạt động; khi giá giảm vượt qua số ATRs dưới gấp đôi ATR, thực hiện giao dịch ngắn hạn.
Ngoài ra, chiến lược thêm các biến BOOL cần vị trí dài ((needlong) và cần short ((needshort), có thể kiểm soát chỉ làm nhiều hoặc chỉ làm ngắn. Chiến lược cũng đặt phạm vi ngày, chỉ giao dịch trong khoảng thời gian giữa các ngày được chỉ định, để thực hiện giới hạn phạm vi thời gian.
Chiến lược sử dụng biến số kích thước để xác định vị trí, tính toán số lần chơi theo tình trạng vị trí. Số lần chơi được tính theo tỷ lệ phần trăm quyền lợi tài khoản.
Ý tưởng tổng thể của chiến lược này rất rõ ràng và dễ hiểu, sử dụng chỉ số ATR để tự động thích ứng với biến động của thị trường, là một chiến lược theo dõi xu hướng phổ biến. Bằng cách tối ưu hóa tham số và kết hợp các chiến lược khác, có thể cải thiện hơn nữa hiệu suất và sự ổn định của chiến lược.
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=3
strategy(title = "Noro's Volty Strategy v1.0", shorttitle = "Volty 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
length = input(5)
numATRs = input(0.75)
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Indicator
atrs = sma(tr, length) * numATRs
//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if (not na(close[length])) and needlong
strategy.entry("L", strategy.long, lot, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needlong == false
strategy.entry("L", strategy.long, 0, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort
strategy.entry("S", strategy.short, lot, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort == false
strategy.entry("S", strategy.short, 0, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))