Dựa trên chiến lược động lượng tương đối


Ngày tạo: 2024-01-29 08:38:04 sửa đổi lần cuối: 2024-01-29 08:38:04
sao chép: 0 Số nhấp chuột: 722
1
tập trung vào
1617
Người theo dõi

Dựa trên chiến lược động lượng tương đối

Tổng quan

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

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

Chiến lược này chủ yếu đánh giá sức mạnh của các cổ phiếu so với thị trường lớn, theo logic cụ thể:

  1. Tính năng này được sử dụng để tính lợi nhuận của mỗi cổ phiếu trong một khoảng thời gian nhất định.
  2. Chỉ số tính lợi nhuận trong cùng một khoảng thời gian như động lực chỉ số
  3. Xử lý trơn trung bình di chuyển để tính toán biến động của mỗi cổ phiếu và biến động của chỉ số
  4. Khi giá trị của một cổ phiếu được tính trên đường trung bình di chuyển của một cổ phiếu, nó được coi là giá trị của một cổ phiếu lớn hơn so với toàn bộ chỉ số và trở thành một tín hiệu mua.
  5. Khi một cổ phiếu di chuyển dưới đường trung bình di chuyển của một chỉ số di chuyển, cho rằng một cổ phiếu di chuyển yếu hơn toàn bộ chỉ số, nó trở thành một tín hiệu bán

Với logic như vậy, chúng ta có thể mua cổ phiếu trong thời kỳ tăng trưởng mạnh mẽ và bán nó khi động lực tăng trưởng của nó giảm đi, khóa lợi nhuận dư thừa trong thời kỳ tăng trưởng cao nhất của nó.

Phân tích lợi thế

Chiến lược động lượng tương đối có những lợi thế chính như sau:

  1. Có khả năng thu thập các mức tăng trưởng cao nhất của một cổ phiếu, không cần quan tâm đến các hoạt động cụ thể, chỉ cần một cổ phiếu tăng nhanh hơn thị trường lớn để mua
  2. Thông qua xử lý trung bình di chuyển, có thể lọc nhiễu từ biến động ngắn hạn, tăng cường độ tin cậy của tín hiệu
  3. Đơn giản, trực tiếp mua và bán điều kiện, dễ hiểu hoạt động
  4. Các tham số thời gian có thể được thiết lập tự do để tính toán động lực tương đối, chiến lược tối ưu hóa

Phân tích rủi ro

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

  1. Có thể có sự điều chỉnh giảm giá sau khi tăng trưởng cao nhất của cổ phiếu, có nguy cơ không đủ kiềm chế
  2. Các chỉ số động lượng tương đối có thể tạo ra tín hiệu sai, các đỉnh tăng trưởng được xác định không phải là đỉ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 kiểm soát bằng các phương pháp như dừng lỗ và điều chỉnh các tham số thích hợp.

Hướng tối ưu hóa

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

  1. Kiểm tra các tham số thời gian tính toán động lực khác nhau để tìm tham số tối ưu
  2. Kiểm tra các loại và độ dài trung bình di chuyển để tìm tham số tối ưu
  3. Thêm bộ lọc cho chỉ số giao dịch để tránh đột phá giả do không đủ năng lượng
  4. Kết hợp với các chỉ số kỹ thuật khác để xác nhận thời gian mua

Tóm tắt

Chiến lược động lượng tương đối có thể thu được lợi nhuận vượt trội bằng cách nắm bắt đỉnh cao tăng trưởng của một cổ phiếu tương đối lớn. Chiến lược này có lợi thế về logic mua bán đơn giản và rõ ràng, dễ vận hành, có thể đạt được hiệu quả tốt hơn thông qua tối ưu hóa tham số và kiểm soát rủi ro.

Mã nguồn chiến lược
/*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)