Chiến lược động lực tương đối

Tác giả:ChaoZhang, Ngày: 2024-01-29 08:38:04
Tags:

img

Tổng quan

Chiến lược động lực tương đối so sánh động lực của các cổ phiếu và chỉ số cá nhân để đánh giá sức mạnh tương đối của cổ phiếu đối với thị trường rộng lớn hơn. Nó mua khi động lực cổ phiếu cao hơn so với chỉ số và bán khi động lực cổ phiếu thấp hơn chỉ số, để nắm bắt đỉnh tăng trưởng của các cổ phiếu cá nhân.

Nguyên tắc

Lý thuyết cốt lõi của chiến lược này là đánh giá sức mạnh tương đối của các cổ phiếu cá nhân so với thị trường, cụ thể là:

  1. Tính toán lợi nhuận trong một khoảng thời gian như động lực của cổ phiếu
  2. Tính toán lợi nhuận chỉ số trong cùng một khoảng thời gian như động lực chỉ số
  3. Sử dụng đường trung bình động để làm mịn động lực cổ phiếu và chỉ số
  4. Khi trung bình động của động lực cổ phiếu vượt trên chỉ số, động lực cổ phiếu được coi là mạnh hơn thị trường nói chung - đó là tín hiệu mua
  5. Khi động lượng cổ phiếu chuyển động trung bình vượt qua dưới động lượng chỉ số chuyển động trung bình, động lượng cổ phiếu được coi là yếu hơn, kích hoạt tín hiệu bán

Thông qua logic này, chúng ta có thể mua cổ phiếu khi sự tăng trưởng của chúng đang phát triển mạnh và bán ra khi đà tăng trưởng mờ dần, khóa trong lợi nhuận dư thừa trong thời kỳ tăng trưởng cao nhất của cổ phiếu.

Phân tích lợi thế

Những lợi thế chính của chiến lược động lượng tương đối:

  1. Có thể nắm bắt năng động đỉnh tăng trưởng của cổ phiếu mà không liên quan đến điều kiện thị trường cụ thể - chỉ mua khi tăng trưởng cổ phiếu vượt quá thị trường tổng thể
  2. Làm mịn với các đường trung bình động lọc ra các biến động ngắn hạn và tăng độ tin cậy tín hiệu
  3. Điều kiện mua và bán trực tiếp đơn giản, dễ hiểu và hoạt động
  4. Tính linh hoạt để cấu hình thời gian để tính toán động lượng tương đối và tối ưu hóa

Phân tích rủi ro

Ngoài ra còn có một số rủi ro với chiến lược động lực tương đối:

  1. Cổ phiếu có thể giảm sau khi đỉnh tăng trưởng kết thúc, gây ra rủi ro thu lợi nhuận không đủ
  2. Tín hiệu động lượng tương đối có thể sai, xác định một đỉnh giả thay vì đỉnh thực sự
  3. Cần thiết lập stop loss để kiểm soát lỗ tối đa

Những rủi ro này có thể được quản lý bằng cách lấy lợi nhuận hợp lý, dừng lỗ, điều chỉnh tham số v.v.

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

Chiến lược động lượng tương đối có thể được tối ưu hóa chủ yếu từ các khía cạnh sau:

  1. Kiểm tra các khoảng thời gian khác nhau để tính toán động lực để tìm tối ưu
  2. Thử các loại khác nhau và chiều dài của trung bình động cho các thông số tốt nhất
  3. Thêm bộ lọc âm lượng để tránh đột phá sai do thiếu động lực
  4. Bao gồm các chỉ số khác để xác nhận thời gian nhập khẩu tối ưu

Kết luận

Chiến lược động lượng tương đối nắm bắt các giai đoạn tăng trưởng dư thừa của các cổ phiếu cá nhân so với thị trường tổng thể để tạo ra alpha. Với logic mua / bán đơn giản, rõ ràng và dễ vận hành, và khi kết hợp với tối ưu hóa tham số và kiểm soát rủi ro, chiến lược này có thể hoạt động rất tốt.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-01-28 00:00:00
period: 15m
basePeriod: 5m
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Relative Returns Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

index_ticker=input("BTC_USDT:swap")
Loopback = input(40, step=20)
useStopAndIndexReturns = input(true)
useStopAndIndexReturnsMa = input(true)

useDifference = not useStopAndIndexReturns

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
MALength = input(10, minval=10,step=10)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time)
inDateRange = true

f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on)
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

index = f_secureSecurity(index_ticker, '1D', close, 0)
stock_return = (close - close[Loopback])*100/close
index_return = (index - index[Loopback])*100/index

stock_return_ma = f_getMovingAverage(stock_return, MAType, MALength)
index_return_ma = f_getMovingAverage(index_return, MAType, MALength)
relativeReturns = stock_return - index_return
relativeReturns_ma = f_getMovingAverage(relativeReturns, MAType, MALength)

plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma : stock_return : na, title="StockReturn", color=color.green, linewidth=1)
plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? index_return_ma : index_return : na, title="IndexReturn", color=color.red, linewidth=1)

plot(useDifference?relativeReturns:na, title="Relative-Returns", color=color.blue, linewidth=1)
plot(useDifference?relativeReturns_ma:na, title="MA", color=color.red, linewidth=1)

buyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma > index_return_ma : stock_return > index_return : relativeReturns > relativeReturns_ma)
closeBuyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma < index_return_ma : stock_return < index_return : relativeReturns < relativeReturns_ma)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca")
strategy.close("Buy", when=closeBuyCondition)

Thêm nữa