상대적 추진력 전략

저자:차오장, 날짜: 2024-01-29 08:38:04
태그:

img

전반적인 설명

상대적 모멘텀 전략은 주식 및 지수의 상대적 힘을 판단하기 위해 개별 주식 및 지수의 모멘텀을 비교합니다. 주식 모멘텀이 지수보다 높을 때 구매하고 주식 모멘텀이 지수보다 낮을 때 판매하여 개별 주식의 성장 피크를 포착합니다.

원칙

이 전략의 핵심 논리는 시장에 비해 개별 주식의 상대적 강도를 판단하는 것입니다. 구체적으로:

  1. 주식의 동력으로 일정 기간 동안의 수익을 계산합니다.
  2. 인덱스 모멘텀과 같은 기간에 인덱스 수익을 계산합니다.
  3. 주식 및 지수 동력을 부드럽게 하기 위해 이동 평균을 사용
  4. 주식 추진력의 이동 평균이 지수보다 높을 때 주식 추진력은 전체 시장보다 강하다고 간주됩니다. 즉 구매 신호입니다.
  5. 주식 모멘텀 이동 평균이 인덱스 모멘텀 이동 평균 아래로 넘어가면 주식 모멘텀이 약해져 판매 신호가 발사됩니다.

이 논리를 통해 우리는 증가가 성장하는 동안 주식을 구매하고 성장 동력이 사라질 때 매각할 수 있습니다.

이점 분석

상대적 추진력 전략의 주요 장점:

  1. 특정 시장 조건을 고려하지 않고 동적으로 주식의 성장 정점을 포착 할 수 있습니다 - 단지 주식 성장이 전체 시장을 능가 할 때 구입
  2. 이동 평균으로 평평화 하 여 단기 변동 을 필터링 하 고 신호 신뢰성 을 향상
  3. 간단한 직접 구매 및 판매 조건, 이해하기 쉽고 작동하기 쉽습니다
  4. 상대적 추진력을 계산하고 최적화 할 수 있는 기간을 구성하는 유연성

위험 분석

또한 상대적 추진력 전략에는 몇 가지 위험이 있습니다.

  1. 주식은 성장의 최고가 끝나면 감소할 수 있으며, 수익을 얻을 위험이 충분하지 않습니다.
  2. 상대적 운동량 신호는 가짜가 될 수 있습니다. 실제 피크 대신 가짜를 식별합니다.
  3. 최대 손실을 제어하기 위해 중지 손실을 설정해야 합니다

이 위험은 합리적인 수익, 스톱 손실, 매개 변수 조정 등을 통해 관리 될 수 있습니다.

최적화 방향

상대적 추진력 전략은 주로 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 최적을 찾기 위해 계산 모멘텀을 위해 다른 시간 기간을 테스트
  2. 가장 좋은 매개 변수를 위해 이동 평균의 다른 종류와 길이를 시도
  3. 부피 필터를 추가하여 모멘텀 부족으로 인한 잘못된 브레이크를 피합니다.
  4. 최적의 입시 시기를 확인하기 위해 다른 지표를 포함

결론

상대적 모멘텀 전략은 알파를 생성하기 위해 전체 시장에 비해 개별 주식의 과도한 성장 단계를 포착합니다. 간단하고 명확한 구매/판매 논리와 작동 용이성, 매개 변수 최적화 및 위험 관리와 결합하면이 전략은 매우 잘 수행 할 수 있습니다.


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

더 많은