Chiến lược theo dõi đợt bùng nổ

Tác giả:ChaoZhang, Ngày: 2024-03-01 11:08:43
Tags:

img

Tổng quan

Chiến lược theo dõi bùng nổ động lực đánh giá sự đột phá giá bằng cách tính toán tỷ lệ thay đổi giá và lọc tín hiệu với khối lượng giao dịch để thực hiện nắm bắt các điểm đột phá xu hướng có xác suất cao. Sau khi kích hoạt tín hiệu mua, chiến lược này sử dụng việc theo dõi giá dừng lỗ để khóa lợi nhuận và tránh rút tiền quá mức.

Nguyên tắc chiến lược

Các chỉ số chính được sử dụng trong chiến lược này để xác định tín hiệu nhập cảnh là:

  1. Tỷ lệ thay đổi giá phần trăm (isFourPercentBull) - Tính toán tỷ lệ thay đổi phần trăm của giá đóng liên quan đến giá đóng ngày trước để xác định xem giá đã vượt qua hiệu quả.

  2. Tỷ lệ giá đóng cửa với giá cao nhất (HighCloseRatio) - Tính toán tỷ lệ giá đóng cửa với giá cao nhất để xác định sức mạnh của sự đột phá giá.

  3. Số lượng giao dịch (volume) - yêu cầu khối lượng giao dịch lớn hơn ngày trước để đảm bảo đột phá hợp lệ.

  4. Trung bình di chuyển đơn giản 200 ngày (SMA) - Yêu cầu giá đóng và giá mở cao hơn đường 200 ngày để xác định hướng xu hướng.

Khi nhiều điều kiện trên được đáp ứng cùng một lúc, một tín hiệu mua được phát hành. Sau đó, chiến lược sử dụng giá theo dõi dừng lỗ để chủ động dừng lỗ và khóa lợi nhuận. Cụ thể, công thức tính toán cho đường dừng lỗ sau là:

trailPrice = close * (100 - trailPercent) / 100

Trong đó trailPercent là tỷ lệ phần trăm stop loss có thể cấu hình. Điều này đảm bảo rằng miễn là giá tăng, đường stop loss cũng sẽ tăng để khóa lợi nhuận. Khi giá giảm trở lại đường stop loss, đóng các vị trí để dừng lỗ.

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

Là một chiến lược thoát điển hình, nó có những lợi thế sau:

  1. Bộ lọc đa điều kiện đảm bảo tính hợp lệ của sự đột phá và tránh sự đột phá sai.

  2. Sử dụng theo dõi giá dừng lỗ, có thể tích cực cắt giảm tổn thất và khóa lợi nhuận để tối đa hóa tránh rút tiền.

  3. Logic chiến lược đơn giản và rõ ràng, dễ hiểu và tối ưu hóa.

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

Chiến lược này cũng có một số rủi ro:

  1. Vẫn có khả năng thất bại mà không thể tránh hoàn toàn tổn thất.

  2. Các điểm dừng theo dõi quá hung hăng có thể gây ra các điểm dừng thường xuyên.

  3. Cài đặt tham số không chính xác có thể dẫn đến tần suất giao dịch quá mức hoặc tín hiệu bị bỏ lỡ.

Các giải pháp cho các rủi ro tương ứng là:

  1. Tối ưu hóa các thông số và giảm kích thước stop loss để đảm bảo đủ không gian.

  2. Nới lỏng hợp lý các điều kiện đột phá để đảm bảo các xu hướng rõ ràng không bị bỏ qua.

  3. Kiểm tra các giống khác nhau để đánh giá tính ổn định của chiến lược.

Hướng dẫn tối ưu hóa

Xem xét tần suất dừng cao trong chiến lược này, các hướng sau đây có thể được tối ưu hóa thêm:

  1. Hãy thử các phương pháp theo dõi dừng lỗ khác, chẳng hạn như theo dõi trung bình động, ATR và theo dõi biến động.

  2. Tăng các thuật toán học máy để đào tạo các phán đoán về sự kết hợp các tham số hiệu suất tốt hơn dựa trên dữ liệu lịch sử.

  3. Thêm các điều kiện đánh giá phụ dựa trên sự phân tán khối lượng để đảm bảo hiệu quả.

  4. Đánh giá sự khác biệt trong cài đặt tham số giữa các giống khác nhau để tìm ra phù hợp nhất.

Kết luận

Chiến lược theo dõi bùng nổ động lực là một chiến lược theo dõi xu hướng rất thực tế nói chung. Nó giải quyết vấn đề về không thể ngăn chặn hiệu quả mất mát và lợi nhuận trong các chiến lược đột phá, trong khi vẫn kiểm soát rủi ro tốt khi nắm bắt xu hướng. Với chỗ để cải thiện hơn nữa bằng cách giới thiệu tối ưu hóa và học máy, nó đáng nghiên cứu và áp dụng sâu sắc.


/*backtest
start: 2023-03-01 00:00:00
end: 2023-12-10 05:20: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/
// © doks23

//@version=5
strategy(title = "SD:Momentum Burst", overlay=true, initial_capital=1000,commission_value = 0,slippage = 0,process_orders_on_close=true)

//Check Vol
checkVol = input.bool(defval=false,title="IncludeAvgVolume?")
volSMAlength = input(50, title="VolumeLength")
volumeSma = ta.sma(volume, volSMAlength)
highvolume = volume >= volumeSma
volumeCond=checkVol?highvolume:true

// Profit and Loss
trailPercent    = input.float(title="Trail%", defval=3, step=0.1)

//longCondition
PercentThreshold=input.float(3.8,'BreakoutPercent', step=0.1)
MaxThreshold=input.float(10,'Max Breakout', step=0.1)
HighCloseRatio=input.float(70,'Close to High Ratio', step=1)
float candleCloseBull = ((close[0] - open[0]) / (high[0] - open[0]) * 100)
float isFourPercentBull = (((close[0] - close[1]) / close[1]) * 100)
LongCond=volume > volume[1] and isFourPercentBull > PercentThreshold and candleCloseBull > HighCloseRatio and isFourPercentBull<MaxThreshold
barcolor(color=(LongCond?color.yellow: na),title='BObar')
longCondition= LongCond and volumeCond and close>ta.sma(close,200) and open>ta.sma(close,200)

//Input Strategy
DateCheck=  input.bool(title = 'Custom Date Range?', defval=true,group = 'Strategy')
FromDate=   input(defval = timestamp("1 Jan 2019 00:00"),group = 'Strategy')
ToDate      =input(defval = timestamp("31 Dec 2023 00:00"),group = 'Strategy')
PostionSize =input.string('Contract','Select Position Size',options = ['Percent of Equity','Contract'],group = 'Strategy')
ContractQty =input.int(1,'No of Contract',group = 'Strategy')

//Backtesting Date Range
TimeWindow=true
// Number of Contract
var int trade_qty=na
if(PostionSize=='Contract')
    trade_qty:=ContractQty
else
    trade_qty:= (strategy.equity>strategy.initial_capital)?math.floor(strategy.equity/strategy.initial_capital):ContractQty


//Position Buy
BuyTriggerPrice = ta.valuewhen(longCondition,high,0)
//Trailing price
var float trailPrice    = na
float percentMulti = (100 - trailPercent) / 100
longCondition2=longCondition and TimeWindow
if longCondition2
    strategy.entry("Long", strategy.long,qty=trade_qty,stop = BuyTriggerPrice)
    trailPrice := close*percentMulti
if strategy.position_size>0
    trailPrice := math.max(close*percentMulti,trailPrice[1])
    if low <= trailPrice
        strategy.exit('Exit','Long',stop = trailPrice)
        if strategy.position_size==0     
            trailPrice:=na
// Plot Strategy
var float trail_long_SL=na
if strategy.position_size>0
    trail_long_SL:=trailPrice
else
    trail_long_SL:=na
//Strategy Plot
PlotMA=input.bool(title="Plot MA?", defval=false)
plot(PlotMA?ta.sma(close,10):na,color = color.red,title = '10MA')
plot(PlotMA?ta.sma(close,21):na,color = color.white,title = '21MA')
plot(PlotMA?ta.sma(close,200):na,color = color.orange,title = '200MA')
// plot(trail_long_SL,color = color.gray,style = plot.style_steplinebr,linewidth = 1)

Thêm nữa