JiaYiBing Chiến lược giao dịch xu hướng định lượng

Tác giả:ChaoZhang, Ngày: 2024-03-08 15:40:05
Tags:

img

Tổng quan

Chiến lược giao dịch động lượng xu hướng định lượng JiaYiBing là một chiến lược giao dịch định lượng dài ngắn kết hợp theo dõi xu hướng, chỉ số động lượng và các kênh Bollinger Bands. Chiến lược sử dụng sự chéo chéo giữa các đường trung bình di chuyển nhanh và chậm để xác định hướng xu hướng và xác nhận các tín hiệu đầu vào dựa trên các kênh Bollinger Bands và các chỉ số động lực. Chiến lược cũng bao gồm các biện pháp kiểm soát rủi ro như lấy lợi nhuận, dừng lỗ, dừng lại và kích thước vị trí.

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

Nguyên tắc cốt lõi của chiến lược này là nắm bắt các cơ hội thị trường bằng cách tận dụng xu hướng giá và hiệu ứng động lực. Cụ thể, chiến lược sử dụng hai đường trung bình động với các giai đoạn khác nhau (nhanh và chậm) để xác định hướng của xu hướng giá. Khi đường trung bình động nhanh vượt qua đường trung bình động chậm, nó chỉ ra xu hướng tăng và chiến lược tạo ra tín hiệu dài; ngược lại, khi đường trung bình động nhanh vượt qua đường trung bình động chậm, nó chỉ ra xu hướng giảm và chiến lược tạo ra tín hiệu ngắn.

Để xác nhận thêm xu hướng và thời gian nhập cảnh, chiến lược cũng kết hợp Bollinger Bands và các chỉ số động lực. Bollinger Bands bao gồm ba đường: đường giữa là đường trung bình động, trong khi các đường trên và dưới là một số độ lệch chuẩn trên và dưới đường giữa. Khi giá vượt qua đường Bollinger Band trên, nó chỉ ra đà tăng mạnh và chiến lược sẽ đi dài; khi giá vượt qua đường Bollinger Band dưới, nó chỉ ra đà giảm mạnh và chiến lược sẽ đi ngắn.

Ngoài ra, chiến lược cũng giới thiệu một chỉ số động lực, đo tốc độ thay đổi giá bằng cách so sánh giá hiện tại với giá một khoảng thời gian nhất định trước.

Về kích thước vị trí, chiến lược cho phép thiết lập kích thước vị trí dựa trên vốn chủ sở hữu tài khoản và ưu tiên rủi ro. Đồng thời, chiến lược cũng bao gồm các cơ chế lấy lợi nhuận, dừng lỗ và dừng kéo theo để kiểm soát rủi ro của mỗi giao dịch.

Nhìn chung, Chiến lược giao dịch động lực xu hướng định lượng của JiaYiBing tìm cách nắm bắt các cơ hội thị trường xu hướng trong khi kiểm soát chặt chẽ rủi ro thông qua nhiều khía cạnh như theo dõi xu hướng, xác nhận động lực và quản lý rủi ro, để đạt được lợi nhuận đầu tư ổn định.

Phân tích lợi thế

  1. Theo dõi xu hướng: Chiến lược sử dụng sự chéo chéo giữa các đường trung bình di chuyển nhanh và chậm để nắm bắt các cơ hội giá xu hướng, cho phép nó đi dài trong xu hướng tăng và ngắn trong xu hướng giảm, thích nghi với các điều kiện thị trường khác nhau.

  2. Xác nhận đà: Việc giới thiệu chỉ số đà như một xác nhận thứ cấp về xu hướng giúp lọc các tín hiệu sai và cải thiện chất lượng đầu vào.

  3. Bollinger Bands hỗ trợ ra quyết định: Bollinger Bands có thể phản ánh phạm vi biến động giá, và sự đột phá của Bollinger Bands có thể được xem là tín hiệu tăng tốc xu hướng hoặc biến động giá bất thường, cung cấp một tham chiếu để nhập.

  4. Định giá vị trí: Chiến lược sử dụng phương pháp định giá vị trí dựa trên tỷ lệ phần trăm vốn chủ sở hữu tài khoản và giới hạn tối đa, cho phép kiểm soát linh hoạt vốn được sử dụng trong mỗi giao dịch, cả hai sử dụng đầy đủ các quỹ và tránh rủi ro quá mức.

  5. Lấy Lợi nhuận và Dừng Loss: Các tập hợp chiến lược lấy lợi nhuận, dừng lỗ và mức dừng lỗ, có thể bảo vệ lợi nhuận khi giá di chuyển theo hướng dự kiến, và cắt giảm đáng kể khi giá đảo ngược, kiểm soát hiệu quả mức lỗ tối đa của mỗi giao dịch.

  6. Tối ưu hóa đa tham số: Chiến lược bao gồm nhiều tham số có thể điều chỉnh, chẳng hạn như thời gian trung bình động, tham số Bollinger Bands, tỷ lệ phần trăm lợi nhuận và dừng lỗ, vv, có thể được tối ưu hóa để cải thiện khả năng thích nghi và độ bền của chiến lược.

Phân tích rủi ro

  1. Giao dịch thường xuyên: Chiến lược tạo ra các tín hiệu đầu vào dựa trên đường chéo trung bình động và Bollinger Band breakouts. Khi biến động thị trường cao, nó có thể thường xuyên tạo ra các tín hiệu giao dịch, dẫn đến tần suất giao dịch quá cao và tăng phí hoa hồng và chi phí trượt.

  2. Độ nhạy của các thông số: Chiến lược bao gồm nhiều thông số, chẳng hạn như thời gian trung bình động, thời gian động lực, thông số Bollinger Bands, vv. Việc lựa chọn các thông số khác nhau có thể có tác động đáng kể đến hiệu suất của chiến lược. Nếu các thông số không được lựa chọn đúng cách, nó có thể dẫn đến hiệu suất chiến lược kém.

  3. Nhận dạng xu hướng tụt hậu: Mức trung bình động là các chỉ số tụt hậu, đặc biệt là khi khoảng thời gian trung bình động dài, tốc độ xác định sự đảo ngược xu hướng sẽ chậm hơn và thời gian vào tốt nhất có thể bị bỏ lỡ.

  4. Rủi ro dừng lỗ: Mặc dù chiến lược thiết lập các biện pháp dừng lỗ, trong điều kiện thị trường cực đoan (như khoảng cách nhanh chóng), giá có thể trực tiếp vượt qua mức dừng lỗ, dẫn đến tổn thất thực tế vượt quá mong đợi.

  5. Rủi ro vị trí tập trung: Nếu chiến lược liên tục tạo ra các tín hiệu theo cùng một hướng trong một khoảng thời gian nhất định, nó có thể dẫn đến sự tập trung quá mức các vị trí theo một hướng, đối mặt với rủi ro vị trí lớn hơn.

  6. Rủi ro thanh khoản: Hiệu suất của chiến lược trong backtesting và giao dịch trực tiếp có thể bị ảnh hưởng bởi thanh khoản thị trường, đặc biệt là khi giao dịch với các quỹ lớn, có thể phải đối mặt với các vấn đề trượt và khối lượng giao dịch không đủ.

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

  1. Giới thiệu nhiều chỉ số kỹ thuật hơn: Trên cơ sở các đường trung bình động hiện tại, động lượng và Bollinger Bands, có thể giới thiệu nhiều chỉ số kỹ thuật hơn như RSI và MACD để cải thiện độ tin cậy của tín hiệu thông qua xác nhận đa chỉ số.

  2. Tối ưu hóa các cơ chế vào và ra: Có thể đưa ra nhiều điều kiện hơn trong phán quyết vào và ra, chẳng hạn như yêu cầu một khối lượng giao dịch nhất định trước khi phá vỡ giá, sử dụng đóng cửa vị trí theo giai đoạn hoặc kéo dài lợi nhuận cho việc ra, để tăng sự linh hoạt và lợi nhuận của chiến lược.

  3. Điều chỉnh tham số động: Đối với các giai đoạn trung bình động, thời kỳ động lực, các tham số Bollinger Bands, v.v., một bộ cơ chế thích nghi tham số có thể được thiết kế để điều chỉnh động các giá trị tham số dựa trên các trạng thái thị trường và mức độ biến động khác nhau, cải thiện khả năng thích nghi của chiến lược.

  4. Cải thiện kích thước vị trí: Trên cơ sở kích thước vị trí hiện tại, các phương pháp quản lý tiền tệ tiên tiến hơn như tiêu chí Kelly, tỷ lệ cố định, vốn chủ động, v.v. có thể được giới thiệu để có lợi nhuận và rủi ro cân bằng tốt hơn.

  5. Kết hợp với Phân tích cơ bản: Các chiến lược phân tích kỹ thuật thuần túy có thể đối mặt với nguy cơ không hiệu quả hoặc thất bại của thị trường. Nếu một số yếu tố cơ bản, chẳng hạn như dữ liệu kinh tế vĩ mô và xu hướng trong ngành, có thể được kết hợp để lọc và xác nhận các tín hiệu kỹ thuật, nó có thể cải thiện hiệu suất của chiến lược.

  6. Cải thiện tính nhất quán của kiểm tra lại và giao dịch trực tiếp: Hiệu suất của chiến lược trong kiểm tra lại và giao dịch trực tiếp có thể khác nhau.

Tóm lại

Chiến lược giao dịch xu hướng định lượng JiaYiBing là một chiến lược giao dịch định lượng tích hợp nhiều phương pháp phân tích kỹ thuật.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('甲易炳', overlay=true)

// Parameters
trendPeriod = input(50, 'Trend Period')
momentumPeriod = input(14, 'Momentum Period')
bbPeriod = input(20, 'Bollinger Bands Period')
bbDeviation = input(2, 'Bollinger Bands Deviation')
fastMALen = input(23, 'Fast SMA Length')
slowMALen = input(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
stopLossPerc = input.float(0.5, 'Stop Loss %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01
trailingStopLossPerc = input.float(0.5, 'Trailing Stop Loss %', minval=0.05, step=0.05) * 0.01
qty_percent = input.int(20, 'Position Size %', step=1)
qty_cap = input.int(10000, 'Max Position Size', step=1000)
beast_mode = input.bool(false, 'Beast Mode')
set_cap = input.bool(true, 'Cap Position Size')
strategy.initial_capital = 50000
// Calculate position size
qty1 = (strategy.initial_capital + strategy.netprofit) * qty_percent / 10 / close
qty = (set_cap and qty1 > qty_cap) ? qty_cap : qty1

// Calculate moving averages
fastMA = ta.sma(close, fastMALen)
slowMA = ta.sma(close, slowMALen)

// Bollinger Bands
[upperBB, middleBB, lowerBB] = ta.bb(close, bbPeriod, bbDeviation)

// Entry conditions
buySignal = ta.crossover(close, fastMA) and close > upperBB
sellSignal = ta.crossunder(close, fastMA) and close < lowerBB

// Rampage mode entry conditions
if beast_mode
    buySignal := buySignal and fastMA > fastMA[2]
    sellSignal := sellSignal and fastMA < fastMA[2]

// Active positions
longIsActive = buySignal or strategy.position_size > 0
shortIsActive = sellSignal or strategy.position_size < 0

// Declare take profit and stop loss variables
var float longTakeProfitPrice = na
var float shortTakeProfitPrice = na

// Take profit and stop loss calculation
if longIsActive
    if buySignal and not (strategy.position_size > 0)
        longTakeProfitPrice := close * (1 + longTakeProfitPerc)
    else
        longTakeProfitPrice := nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
if shortIsActive
    if sellSignal and not (strategy.position_size < 0)
        shortTakeProfitPrice := close * (1 - shortTakeProfitPerc)
    else
        shortTakeProfitPrice := nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPerc))

longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
longTrailingStopLossPrice = close * (1 - trailingStopLossPerc)
shortTrailingStopLossPrice = close * (1 + trailingStopLossPerc)

// Entries and exits
if strategy.position_size == 0
    strategy.entry('Long Entry', qty=qty, direction=strategy.long, when=buySignal, alert_message='Long Entry')
    strategy.entry('Short Entry', qty=qty, direction=strategy.short, when=sellSignal, alert_message='Short Entry')
    strategy.exit('Long Take Profit', 'Long Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : longTakeProfitPrice, trail_price=enableTrailing ? longTakeProfitPrice : na, trail_offset=enableTrailing ? longTrailingTakeProfitStepTicks : na, when=longIsActive, alert_message='Long Take Profit')
    strategy.exit('Short Take Profit', 'Short Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : shortTakeProfitPrice, trail_price=enableTrailing ? shortTakeProfitPrice : na, trail_offset=enableTrailing ? shortTrailingTakeProfitStepTicks : na, when=shortIsActive, alert_message='Short Take Profit')
else
    if longIsActive
        strategy.exit('Long Stop Loss', 'Long Entry', stop=longTrailingStopLossPrice, when=longIsActive)
    if shortIsActive
        strategy.exit('Short Stop Loss', 'Short Entry', stop=shortTrailingStopLossPrice, when=shortIsActive)

// Plotting
plot(fastMA, 'Fast SMA', color=color.blue, linewidth=1, style=plot.style_line)
plot(slowMA, 'Slow SMA', color=color.orange, linewidth=1, style=plot.style_line)
plot(upperBB, 'Upper BB', color=color.green, linewidth=1, style=plot.style_line)
plot(lowerBB, 'Lower BB', color=color.red, linewidth=1, style=plot.style_line)


Thêm nữa