Chiến lược này là một hệ thống rút lui được thiết kế cho các chứng khoán có tính biến động cao, do đó Bitcoin là một loại giao dịch rất lý tưởng. Chiến lược này có thể được sử dụng trên biểu đồ đường nhật thực hoặc khung thời gian thấp hơn (tôi đã tìm thấy kết quả tốt trên khung thời gian 3 giờ, nhưng không thử nghiệm dưới 1 giờ).
Chiến lược này tính toán sự biến động bằng cách so sánh sự thay đổi của giá đóng cửa của hai đường K trước đó và tạo ra một đường trung bình di chuyển với sự thay đổi giá này. Bọc một dải chênh lệch chuẩn trên đường trung bình di chuyển, bên trong là 1 chênh lệch chuẩn và bên ngoài là 2 chênh lệch chuẩn. Nếu giá cao hơn bộ lọc đường trung bình di chuyển được đặt trước, chúng tôi xác định rằng chúng tôi đang trong xu hướng tăng, vì vậy khi xu hướng tăng, nếu có một sự rút lui khiến dải chênh lệch chuẩn bên trong bị đâm, một tín hiệu mua sẽ được phát ra.
Người dùng có thể thay đổi phạm vi ngày mà họ muốn kiểm tra, tính toán khoảng cách tiêu chuẩn của vòng trung bình di chuyển và các dải sóng bên trong và bên ngoài của tỷ lệ biến động. Đối với Bitcoin, tôi giữ các dải sóng chênh lệch tiêu chuẩn bên trong và bên ngoài ở cài đặt tiêu chuẩn, nhưng thấy rằng theo dõi tỷ lệ biến động 3 chu kỳ tốt cho giao dịch trên biểu đồ 1 ngày và theo dõi tỷ lệ biến động 5 chu kỳ tốt cho biểu đồ 3 giờ. Vì đây không phải là một chiến lược mua và giữ, bạn có thể muốn gắn bó với đồng tiền biến động nhất để có thể nhanh chóng vào và ra khỏi bất kỳ sàn giao dịch nào khi giao dịch.
Cách đối phó với rủi ro:
Lựa chọn các chỉ số biến động thích hợp, kiểm soát các vị trí đơn lẻ.
Tối ưu hóa các tham số, giảm giao dịch không hiệu quả.
Sử dụng các biện pháp dừng lỗ, quản lý tài chính nghiêm ngặt.
Cần chú trọng đến hiệu quả thực hiện giao dịch và chọn các chỉ số có tính thanh khoản tốt.
Điều chỉnh tham số để phù hợp với các đặc tính của các tiêu chuẩn khác nhau.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Tối ưu hóa chu kỳ trung bình di chuyển để theo dõi tốt hơn sự biến động của các chỉ số khác nhau.
Điều chỉnh các tham số của dải tỷ lệ dao động để nó gần hơn với phạm vi dao động của một tiêu chuẩn cụ thể.
Thêm các điều kiện lọc khác, chẳng hạn như tăng khối lượng giao dịch, để xác minh thêm tín hiệu giao dịch.
Sử dụng các tham số tối ưu hóa động của công nghệ học máy để làm cho chiến lược có thể thích ứng hơn.
Thử nghiệm trên một khung thời gian cao hơn để nắm bắt nhiều cơ hội giao dịch hơn.
Thêm theo dõi di động Stop Loss Stop Loss để các khoản lợi nhuận được khóa trong tài khoản.
Kết hợp với các chỉ số hoặc mô hình khác để xây dựng chiến lược kết hợp định lượng.
Chiến lược này đơn giản và trực quan hơn, sử dụng chỉ số biến động để xác định sự đảo ngược để nắm bắt điểm biến đổi của thị trường. Có nhiều không gian để tối ưu hóa chiến lược, có thể tiếp tục nâng cao tính ổn định và lợi nhuận của chiến lược bằng cách điều chỉnh tham số và kết hợp với các chỉ số kỹ thuật khác. Tuy nhiên, các nhà giao dịch cần chú ý để tránh các vấn đề tối ưu hóa quá mức và phù hợp với đường cong. Chiến lược này phù hợp hơn với giao dịch ngắn hạn, cần quản lý quỹ nghiêm ngặt để kiểm soát rủi ro.
/*backtest
start: 2023-09-11 00:00:00
end: 2023-10-11 00:00:00
period: 4h
basePeriod: 15m
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/
// © gary_trades
//This script is designed to be used on volatile securities/tickers so is best suited for day charts on Crypto (particularly good for BTC).
//It takes both long and short trades and the main indicator settings can be changed by the use so they can test for ideal settings for ticker of interest.
//@version=4
strategy("BTC Volatility Band Strategy", shorttitle="Vol Band Strategy", overlay=false, margin_long=100, margin_short=100)
//VOLATILTY
CandleChange = ((close - close[1])/close)*100 //OR CandleChange = ((close[2] - close[1])/close)*100
plot(CandleChange, color=color.red, linewidth = 1)
//VOLATILITY BANDS
MAlen = input(7, minval=3, maxval=30, title=" MA Length")
MAout = sma(CandleChange, MAlen)
plot(MAout, color=color.black, display=display.none)
InnerBand = input(1.0, minval=0.5, maxval=5, title="Inner Band")
OuterBand = input(2.00, minval=0.5, maxval=10, title="Outer Band")
devInner = InnerBand * stdev(CandleChange, MAlen)
devOuter = OuterBand * stdev(CandleChange, MAlen)
upper1 = MAout + devInner
lower1 = MAout - devInner
b1 = plot(upper1, "Upper Inner", color=color.gray)
b2 = plot(lower1, "Lower Inner", color=color.gray)
upper2 = MAout + devOuter
lower2 = MAout - devOuter
b3 = plot(upper2, "Upper Outer", color=color.gray)
b4 = plot(lower2, "Lower Outer", color=color.gray)
fill(b1, b3, color.rgb(250,145,175,70), title="Background")
fill(b2, b4, color.rgb(250,145,175,70), title="Background")
band1 = hline(25, "Upper Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
band0 = hline(-25, "Lower Band", color=color.gray, linestyle=hline.style_dotted, linewidth=2)
//LONG FILTER
VolFilterL = CandleChange <= lower1 and CandleChange > lower2
SMAFilterL = close[1] > sma(close[1], 50)
PriceFilterL = close > lowest(close,7)
LongFilter = VolFilterL and SMAFilterL and PriceFilterL
bgcolor(LongFilter ? color.new(color.green, 80) : na)
//SHORT FILTER
VolFilterS = CandleChange >= upper1 and CandleChange < upper2
SMAFilterS = close[1] < sma(close[1], 50)
PriceFilterS = close < highest(close,7)
ShortFilter = VolFilterS and SMAFilterS and PriceFilterS
bgcolor(ShortFilter ? color.new(color.red, 80) : na)
//SETTING BACK TEST INPUTS
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
startDate = timestamp("America/New_York", fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp("America/New_York", toYear, toMonth, toDay, 00, 00)
time_condition = time >= startDate and time <= finishDate
//ORDER DETAILS
Risk = (high[7] - low[7])/ 7
Profit = Risk*1.15
Loss = Risk*0.65
AlertMSG = "New stategy position" + tostring(strategy.position_size)
if (time_condition)
strategy.entry("Long", strategy.long, when = LongFilter, alert_message=AlertMSG)
if (LongFilter)
LongStop = strategy.position_avg_price - Loss
LongProfit = strategy.position_avg_price + Profit
strategy.exit("TP/SL", "Long", stop=LongStop, limit=LongProfit)
if (time_condition)
strategy.entry("Short", strategy.short, when = ShortFilter, alert_message=AlertMSG)
if (ShortFilter)
ShortStop = strategy.position_avg_price + Loss
ShortProfit = strategy.position_avg_price - Profit
strategy.exit("TP/SL", "Short", stop=ShortStop, limit=ShortProfit)