Chiến lược đảo ngược dải biến động Bitcoin

Tác giả:ChaoZhang, Ngày: 2023-10-12 17:38:39
Tags:

Tổng quan

Chiến lược này là một hệ thống pullback được thiết kế cho các chứng khoán có biến động cao, vì vậy tự nhiên Bitcoin là một lựa chọn tuyệt vời để giao dịch. Điều này có thể được sử dụng trên biểu đồ hàng ngày hoặc trên 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 chưa thử nghiệm nó trên bất cứ thứ gì dưới 1 giờ).

Chiến lược logic

Chiến lược tính toán biến động bằng cách so sánh sự thay đổi giá đóng của 2 ngọn nến trước đó, và sử dụng sự thay đổi giá này để tạo ra một đường trung bình động. Một dải được bọc xung quanh đường trung bình động với độ lệch chuẩn 1 cho dải bên trong và 2 cho dải bên ngoài. Nếu giá trên một bộ lọc MA (trung bình động) đã được đặt trước thì nó được xác định chúng ta đang trong xu hướng tăng nên chiến lược sẽ phát ra tín hiệu khi chúng ta đang trong xu hướng tăng và có một pullback gây ra dải lệch bên trong thấp hơn tăng, nhưng nếu giá tiếp tục và giảm qua dải lệch bên ngoài thì một tín hiệu mua sẽ không phát ra vì vấn đề này gây bất lợi cho sự gia tăng biến động quá lớn. Bạn có thể thấy sự gia tăng xảy ra trên chỉ báo nơi sự kiện màu xanh lá cây.

Người dùng có thể thay đổi phạm vi ngày mà họ muốn kiểm tra, khoảng thời gian trung bình chuyển động để theo dõi biến động và sai lệch dải bên trong và bên ngoài. Trên BTC, tôi đã để lại các dải lệch bên trong và sai lệch bên ngoài trên các thiết lập tiêu chuẩn nhưng thấy việc theo dõi biến động 3 giai đoạn là tốt cho giao dịch biểu đồ 1 ngày và theo dõi biến động 5 giai đoạn là tốt cho biểu đồ 3 giờ. Vì đây không phải là một chiến lược mua và giữ, vì vậy để giao dịch, bạn có thể muốn gắn bó với các đồng xu lỏng nhất để bạn có thể vào và ra rất nhanh trên bất kỳ sàn giao dịch nào. Nếu bạn muốn thử điều này trên các thị trường ít biến động hơn thì thay đổi dải lệch bên trong ~ 0.75 sẽ hoạt động ổn trong các thị trường tương lai khác nhau. Lượng lợi nhuận và dừng lỗ dựa trên nhiều phạm vi giao dịch nhìn lại 7 nến qua.

Ưu điểm của Chiến lược

  • Sử dụng giao dịch biến động để nắm bắt các điểm chuyển hướng thị trường
  • Giao dịch cả dài và ngắn, kiếm lợi nhuận trên thị trường tăng và giảm
  • Cài đặt tham số tiêu chuẩn đơn giản dễ sử dụng
  • Các thông số có thể dễ dàng tối ưu hóa cho các nền tảng khác nhau
  • Các thiết lập dừng lỗ và lấy lợi nhuận hợp lý giúp khóa lợi nhuận

Rủi ro của chiến lược

  • Các chứng khoán cơ bản biến động cao có nguy cơ mất mát lớn hơn
  • Chuyển thường xuyên dài / ngắn gây ra chi phí giao dịch cao hơn
  • Các hoạt động ngắn hạn cần theo dõi thị trường chặt chẽ
  • Khó ngăn chặn lỗ khi thanh khoản thị trường thấp
  • Điều chỉnh tham số kém có thể dẫn đến giao dịch quá mức

Phương pháp giảm thiểu rủi ro:

  1. Chọn cơ sở biến động thích hợp, kiểm soát kích thước vị trí.

  2. Tối ưu hóa các thông số để giảm giao dịch không hiệu quả.

  3. Dùng stop loss và take profit, quản lý tiền chặt chẽ.

  4. Tập trung vào hiệu quả thực hiện, chọn các cơ sở chất lỏng.

  5. Điều chỉnh các tham số để phù hợp với các đặc điểm cơ bản khác nhau.

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. Tối ưu hóa thời gian trung bình động để theo dõi tốt hơn sự biến động của các chứng khoán cơ bản khác nhau.

  2. Điều chỉnh các thông số dải biến động để phù hợp hơn với phạm vi biến động cụ thể của chứng khoán cơ bản.

  3. Thêm các bộ lọc khác như tăng âm lượng để xác nhận tín hiệu hơn nữa.

  4. Sử dụng các kỹ thuật học máy để tối ưu hóa các thông số cho khả năng thích nghi.

  5. Kiểm tra trên khung thời gian tần số cao hơn để nắm bắt nhiều cơ hội giao dịch hơn.

  6. Thêm theo dõi dừng lỗ / lấy lợi nhuận để khóa lợi nhuận nhiều hơn.

  7. Kết hợp với các chỉ số hoặc mô hình khác để xây dựng các chiến lược danh mục đầu tư định lượng.

Tóm lại

Chiến lược tổng thể khá đơn giản và trực quan, xác định sự đảo ngược thông qua chỉ số biến động để nắm bắt các điểm chuyển hướng của thị trường. Có không gian tối ưu hóa lớn bằng cách điều chỉnh các tham số và kết hợp các chỉ số kỹ thuật khác để tăng cường sự ổn định và lợi nhuận hơn nữa. Tuy nhiên, các nhà giao dịch cần phải nhận thức được các vấn đề quá phù hợp và phù hợp đường cong. Chiến lược này phù hợp hơn với giao dịch ngắn hạn, đòi hỏi quản lý tiền tệ nghiêm ngặt để kiểm soát rủi ro. Nếu nắm vững đúng cách, nó có thể trở thành một công cụ mạnh mẽ để giao dịch tiền điện tử biến động cao.


/*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)




Thêm nữa