멀티 타임프레임 트렌드 추적 전략

저자:차오장, 날짜: 2023-11-14 14:29:39
태그:

img

전반적인 설명

이 전략은 이동 평균, MACD 및 RSI를 여러 시간 프레임에 걸쳐 결합하여 트렌드 방향을 파악하고 S&P500 지수 트렌드를 거래합니다.

전략 논리

  1. 10일 간 간편 이동 평균은 가격 추세를 판단합니다. 10일 간 간편 이동 평균을 넘어서면 상승세를 나타내고, 그 아래를 넘어가면 하락세를 나타냅니다.

  2. MACD는 모멘텀 강도를 판단합니다. 12일과 21일 지수 이동 평균의 차이를 계산하고 MACD 라인과 신호 라인의 교차가 거래 신호를 생성합니다. MACD 라인이 신호 라인의 위를 넘어가면 상승을 나타내고 아래를 넘어가면 하락을 나타냅니다.

  3. 14일 RSI와 50일 MA가 계산됩니다. RSI가 MA를 넘으면 상승 신호이고, 그 아래를 넘으면 하락 신호입니다.

  4. 1분, 3분 및 5분 시간 프레임은 트렌드 일관성을 확인합니다.

  5. 가격이 10일 MA를 넘으면 RSI가 MA를 넘고 MACD 라인이 신호선을 넘으면 구매 신호가 생성됩니다. 가격이 10일 MA를 넘으면 RSI가 MA를 넘고 MACD 라인이 신호선을 넘으면 판매 신호가 생성됩니다.

장점

  1. 지표를 결합하면 신호 정확도가 향상됩니다. 10 일 MA는 주요 트렌드를 판단하고 MACD는 모멘텀 강도를 결정하며 RSI는 과잉 구매 / 과잉 판매 수준을 확인합니다. 지표 조합은 서로를 확인하고 잘못된 거래를 줄입니다.

  2. 여러 시간 프레임 확인은 시장 소음을 피합니다. 1 분, 3 분 및 5 분 시간 프레임에 대한 두 번 확인은 동시에 신호의 출현을 보장하고 잘못된 신호를 필터합니다.

  3. 그래프 패턴은 신뢰성을 위해 시각적 판단을 지원합니다. 그래픽 패턴 분석은 극단적인 과잉 구매 / 과잉 판매 수준을 피하고 손실 위험을 줄입니다.

  4. 중간 거래 빈도는 지수 거래에 적합합니다. 주요 지표로 10 일 MA는 과도한 거래를 방지하여 과도한 거래로 인한 추가 거래 비용을 피합니다.

위험성

  1. 비합리적인 사건에서 급격한 반전을 감지하지 못하는 것. 그러한 시장 혼란은 모델을 방해하고 위험 통제를 위해 포지션 크기를 줄여야합니다.

  2. 변화하는 시장 조건을 고려하지 않고 고정된 매개 변수 설정. 매개 변수는 라이브 거래에서 다른 시장 체제에 동적으로 조정되어야합니다.

  3. 너무 이상적인 입구점으로 실행에 어려움이 있습니다. 실행 가능한 유동성을 향상시키기 위해 입구 신호는 미세하게 조정되어야합니다.

  4. 여러 시간 프레임은 신호 지연을 증가시킵니다. 갑작스러운 사건의 경우 지연으로 인한 손실을 최소화하기 위해 적절한 위험 통제가 필요합니다.

강화

  1. 단 하나의 거래 손실을 통제하기 위해 후속 스톱 손실과 비율 스톱 손실과 같은 스톱 손실 메커니즘을 포함합니다.

  2. 역동적 매개 변수 설정을 최적화하여 변화하는 시장에 적응하고 전략 안정성을 향상시킵니다.

  3. 모델 쇼크를 피하기 위해 중요한 사건으로 인한 시장 체제 변경을 고려하십시오.

  4. 미끄러짐과 같은 거래 비용을 계산하고 더 나은 실행을 위해 입구 / 출구 지점을 조정합니다.

  5. 시그널 확인으로 촛불처럼 다른 가격 입력을 테스트하여 멀티 타임프레임 검증을 다양화합니다.

  6. 전략 최적화를 자동화하기 위해 빅데이터에서 머신러닝 알고리즘을 활용합니다.

결론

이 전략은 여러 지표와 트렌드 식별 및 시그널 확인을 통해 S&P500 트렌드를 효과적으로 거래합니다. 이 전략의 장점은 높은 신호 정확성과 노이즈 탄력성, 그러나 위험 제어 및 동적 매개 변수 조정이 필요합니다. 간단한 이동 평균 전략보다 최적화 된 만큼 양적 거래 전략 향상을위한 귀중한 영감을 제공하고 참조를 제공합니다.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
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/
// USE HEIEN ASHI, 1 min, SPX 500 USD OANDA
// © connor2279
//@version=5
strategy(title="SPX Strategy", shorttitle="SPXS", overlay=true)

//SMA
len1 = 10
src1 = input(close, title="SMA Source #1")
out1 = ta.sma(src1, len1)
plot(out1, title="SMA #1", color=close >= out1 ? color.lime : color.red, linewidth=2)

data_over = ta.crossover(close, out1)
dataO = close >= out1
data_under = ta.crossunder(close, out1)
dataU = close < out1

bgcolor(color=ta.crossover(close, out1) ? color.new(color.lime, 90) : na)
bgcolor(color=ta.crossunder(close, out1) ? color.new(color.red, 90) : na)     

//Norm MacD
sma = 12
lma = 21
tsp = 10
np = 50
    
sh = ta.ema(close,sma)  

lon= ta.ema(close,lma) 

ratio = math.min(sh,lon)/math.max(sh,lon)

Mac = ratio - 1
if(sh>lon)
    Mac := 2-ratio - 1
else
    Mac := ratio - 1

MacNorm = ((Mac-ta.lowest(Mac, np)) /(ta.highest(Mac, np)-ta.lowest(Mac, np)+.000001)*2)- 1

MacNorm2 = MacNorm

if(np<2)
    MacNorm2 := Mac
else
    MacNorm2 := MacNorm
    
Trigger = ta.wma(MacNorm2, tsp)

trigger_above = Trigger >= MacNorm
trigger_under = Trigger < MacNorm
plotshape(ta.crossover(Trigger, MacNorm2), style=shape.triangledown, color=color.red)
plotshape(ta.crossunder(Trigger, MacNorm2), style=shape.triangledown, color=color.lime)

//RSI / SMA RSI
swr=input(true,title="RSI")
src = close
len = 14
srs = 50
up = ta.rma(math.max(ta.change(src), 0), len)
down = ta.rma(-math.min(ta.change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
mr = ta.sma(rsi,srs)
rsi_above = rsi >= mr
rsi_under = rsi < mr

//All
buySignal = rsi_above and trigger_under and dataO
shortSignal = rsi_under and trigger_above and dataU
bgcolor(color=buySignal ? color.new(color.lime,97) : na)     
bgcolor(color=shortSignal ? color.new(color.red, 97) : na)     
     
sellSignal = ta.cross(close, out1) or ta.cross(Trigger, MacNorm2) or ta.cross(rsi, mr)
if (buySignal)
    strategy.entry("LONG", strategy.long, 1)

if (shortSignal)
    strategy.entry("SHORT", strategy.short, 1)

// Submit exit orders
strategy.close("LONG", when=sellSignal)
strategy.close("SHORT", when=sellSignal)

더 많은