다중 요인 운동 회전 전략

저자:차오장, 날짜: 2023-10-25 11:52:19
태그:

img

전반적인 설명

이 전략은 RSI, MACD, 볼링거 밴드 및 상향/하향 요인을 결합하여 다중 요인 모멘텀 로테이션 거래를 구현합니다. 전략은 먼저 여러 기술적 지표가 동시에 구매 또는 판매 신호를 주는지 판단합니다. 그렇다면 해당 구매 또는 판매 작전이 실행됩니다. 한편, 전략은 수익을 잠금하고 위험을 제어하기 위해 이동 스톱 이익과 스톱 손실을 채택합니다.

전략 논리

이 전략의 주요 구성 요소는 다음과 같습니다.

  1. 요인 판단

    • RSI: 14주기 RSI를 계산하고 구매 라인보다 낮거나 판매 라인보다 높는지 판단합니다.
    • TD 순서: 제한 상승/하락 날 수를 계산하고 구매/판매 조건을 충족하는지 판단합니다.
    • MACD: 구매/판매 조건을 판단하기 위해 MACD 및 MACD 히스토그램을 계산합니다.
    • 볼링거 밴드: 20주기 BB를 계산하고 가격이 BBs의 상단 또는 하단 범위에 도달하는지 판단합니다.
  2. 출입 및 출입

    • 구매 조건: RSI, MACD, TD 순서는 함께 구매 신호를 제공합니다.
    • 판매 조건: RSI, MACD, TD 순서는 함께 판매 신호를 제공합니다.
    • 스톱프로프트: 고정 포인트 또는 퍼센트를 트래일 스톱프로프트로 사용
    • 스톱 손실: 스톱 손실에 허용되는 최대 손실 포인트를 설정합니다.
  3. 전략 최적화

    • RSI 매개 변수를 조정: RSI 기간 매개 변수를 최적화
    • MA 기간 조정: 이동 평균의 기간 매개 변수를 최적화
    • 입력 조건을 조정: 입력 신호를 추가하거나 감소
    • 다른 요인을 추가: 더 많은 기술 지표와 통계 요인을 포함

이점 분석

  • 여러 가지 요소가 입력 정확성을 향상시킵니다.

    이 전략은 단일 지표보다는 RSI와 MACD와 같은 여러 요인을 고려합니다. 이것은 잘못된 신호를 줄이고 입력 정확도를 향상시킵니다.

  • 동력 특성은 동향을 포착합니다.

    RSI 및 MACD와 같은 지표는 가격 트렌드 변화를 포착하는 명백한 추진력 특성을 가지고 있습니다. 그들은 MAs와 같은 트렌드 다음 지표보다 더 민감합니다.

  • 수익/손실 중단 메커니즘은 위험을 제어합니다.

    스톱 노프트를 이동하면 시장을 따라 동적으로 수익을 확보 할 수 있습니다. 스톱 로스 설정은 단일 거래 손실을 제어합니다.

  • 단순하고 명확한 논리

    이 전략은 공통된 기술 지표를 결합하고 있으며 어느 정도 보편성을 가지고 있습니다.

위험 분석

  • 황금 시장의 저조한 성과

    이 전략은 평균 회전 거래에 초점을 맞추고 있습니다. 황소 시장에서 빈번한 스톱 로스를 유발할 수 있습니다.

  • 잠재적으로 거래 빈도가 너무 높습니다.

    만약 매개 변수들이 너무 민감하게 설정된다면 거래 빈도가 너무 높을 수 있고, 비용과 미끄러짐이 증가할 수 있습니다.

  • 각 지표의 격차 위험

    이 전략은 지표에 따라 일관된 신호에 의존하지만 때때로 오차가 발생할 수 있어 잘못된 신호가 발생할 수 있습니다.

  • 스톱 손실 침투

    고정 스톱 로스 포인트가 침투 될 수 있습니다. 동적 스톱 로스 또는 주식 변경은이 위험을 피하는 데 도움이 될 수 있습니다.

최적화 방향

  • 거래 빈도를 줄이기 위해 매개 변수를 최적화

    RSI 매개 변수와 MA 기간을 테스트하여 거래 빈도가 낮은 조합을 찾습니다.

  • 효율성을 높이기 위해 통계 요소를 추가

    변동성과 유동성 같은 주식별 통계를 포함해서 매개 변수를 설정하고 효율성을 높일 수 있습니다.

  • VIX와 같은 시장 수준의 지표를 결합합니다.

    VIX와 같은 시장 공황 지표에 기반한 전략 매개 변수를 조정하여 시장 전체의 충돌 중 거래 빈도를 줄이십시오.

  • 다른 유지 기간을 테스트합니다.

    전략 성과에 미치는 영향을 확인하기 위해 장기 보유 대 단기 회전 테스트.

  • 수익/손실 중지 최적화 및 테스트

    더 발전된 동적 스톱프로프트/손실 기술을 연구하고 백테스트합니다.

요약

이 전략은 여러 가지 기술적 지표를 결합하고 높은 입력 정확성을 보장하면서 수익을 잠금하고 위험을 제어하기 위해 이동 스톱/손실을 채택합니다. 논리는 간단하고 명확합니다. 매개 변수 최적화 및 지표 선택으로 성능을 더욱 향상시킬 수 있습니다. 그러나 전략은 평균 역전 및 범위 제한 시장에 더 적합합니다. 지속적인 상승 추세에서 저효율을 보일 수 있습니다. 요약하면 이것은 주식 회전 거래에 대한 아이디어와 참조를 제공하는 전형적인 다인자 평균 역전 동력 전략입니다.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("RSI, TD Seq, MACD, BB Strategy - Calculation Trailing Profit",overlay=true)


RSIDifference = input(-7, minval=-50, maxval=50, title="RSI Difference") 


TD = close > close[4] ?nz(TD[1])+1:0
TS = close < close[4] ?nz(TS[1])+1:0
TDUp = TD - valuewhen(TD < TD[1], TD , 1 )
TDDn = TS - valuewhen(TS < TS[1], TS , 1 )
TDcheckUP = iff(TD == 2, true, false)
TDCheckDOWN = iff(TS == 2, true, false)

[_, _, histLine] = macd(close, 12, 26, 9)
MACDCheckDown = iff(histLine > 0 and histLine[1] > 0 and histLine[2] > 0 and histLine[3] > 0  and histLine[4] > 0, true, false)
MACDCheckUp = iff(histLine < 0 and histLine[1] < 0 and histLine[2] < 0 and histLine[3] < 0 and histLine[4] < 0, true, false)

RSICal = rsi(close, 14)
RSICalNewUp = 50 + RSIDifference
RSICalNewDown = 50 - RSIDifference
RSICheckUp = iff(RSICal <= RSICalNewUp, true, false)
RSICheckDown = iff(RSICal >= RSICalNewDown, true, false)

basis = sma(close, 20)
dev = 2 * stdev(close, 20)
upperBB = basis + dev
lowerBB = basis - dev
BBCheckUp = iff(close > upperBB, true, false)
BBCheckDown = iff(close < lowerBB, true, false)
//BBCheckUp = false
//BBCheckDown = false


BuyCheck = iff(TDcheckUP == true and MACDCheckUp == true and RSICheckUp == true and BBCheckUp == false, true, false)
SellCheck = iff(TDCheckDOWN == true and MACDCheckDown == true and RSICheckDown == true and BBCheckDown == false, true, false)


ProfitStratA = input(50, minval=0, maxval=10000, title="Profit", step=0.5) 
ProfitTrailingA = input(10, minval=0, maxval=10000, title="Profit", step=0.5) 
useStopLoss = input(false, title="Use Stop Loss?")
LossstratA = input(145, minval=0, maxval=10000, title="Stop Loss", step=0.5) 
colB = input(100, minval=0, maxval=100, title="0-show / 100-hide Strategy", step=100) 

ProfitStrat = ProfitStratA * 10
ProfitTrailing = ProfitTrailingA * 10
Lossstrat = useStopLoss ? LossstratA * 10 : 1000000

if (strategy.position_size > 0)
    strategy.exit("BuyClose", "Buy", trail_points=ProfitStrat, trail_offset=ProfitTrailing, loss=Lossstrat)
    
    
if (strategy.position_size < 0)   
    strategy.exit("SellClose", "Sell", trail_points=ProfitStrat, trail_offset=ProfitTrailing, loss=Lossstrat) 
    

if (BuyCheck == true and strategy.position_size == 0)
    strategy.entry("Buy", strategy.long, comment="Long Entry")
    


if (SellCheck == true and strategy.position_size == 0)
    strategy.entry("Sell", strategy.short, comment="Short Entry")
    


plotshape(BuyCheck, color=blue, transp=colB, style=shape.arrowup, text="Buy\n", location=location.belowbar)
plotshape(SellCheck, color=orange, transp=colB, style=shape.arrowdown, text="Sell\n", location=location.abovebar)













더 많은