STC MA ATR 결합 트렌드 트레이딩 전략


생성 날짜: 2023-10-17 14:34:10 마지막으로 수정됨: 2023-10-17 14:34:10
복사: 0 클릭수: 845
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

STC MA ATR 결합 트렌드 트레이딩 전략

개요

이 전략은 종합적으로 주식 기술 지표 STC, 이동 평균 MA 및 평균 실제 변동률 ATR을 사용하여 여러 기술 지표의 추세 판단과 결합하여 비교적 안정적인 추세 추적 거래를 구현한다.

전략 원칙

  1. STC 지표는 트렌드 반전을 판단한다. 이 지표는 빠른 선을 사용하여 느린 선을, 다음으로 두 번째 평형 처리를 하여 일관된 트렌드 신호를 형성한다. 지표의 0축을 통과할 때 구매 신호이며, 0축을 통과할 때 판매 신호이다.

  2. 이동 평균 MA는 트렌드 방향을 판단한다. 주식 가격이 MA를 상회할 때, 여전히 상승하는 상황으로 간주하고, 다단계 신호를 보유하고 있다. 가격이 MA를 상회할 때, 하락하는 상황으로 간주하고, 공백 신호를 보유하고 있다.

  3. ATR 지표는 중지 손실을 설정한다. ATR은 시장의 변동에 따라 중지 손실을 조정할 수 있다. ATR을 거래 방향 신호로 사용하여, 다중 단계의 ATR이 상승하고, 공허 단계의 ATR이 떨어진다.

  4. 전략은 STC 판단을 반전으로 주요 매매점으로 선택하고, MA를 보조 판단 트렌드로, ATR로 스톱 스톱을 한다. STC가 구매 신호를 발송하면, MA가 상승하는 경향이 있다면, ATR이 상승하면, 과다 주문을 열고, STC가 판매 신호를 발송하면, MA가 하락하는 경향이 있다면, ATR이 하락하면, 공백을 열는다.

우위 분석

  1. 이 전략은 트렌드와 반향점을 판단하는 여러 지표를 통합적으로 사용함으로써 거래 신호의 정확성을 높였습니다.

  2. STC 지표는 반전 신호를 포착하여 거래가 틀리지 않도록 한다. MA 지표는 불안정한 반전 신호를 필터링하여 주요 추세에 따라가는 것을 보장한다.

  3. ATR 지표는 시장의 변동에 따라 스톱로스 스톱 포지션을 설정하여 큰 손실을 피합니다. 그리고 ATR을 트렌드를 판단하는 보조 신호로 사용합니다.

  4. 다중 지표 조합은 강력한 트렌드 추적 능력을 형성할 수 있으며, 역사 회귀는 안정적인 수익성을 가지고 있다.

위험 분석

  1. STC 지표는 시간이 지연되어 가격 반전의 최적의 시점을 놓칠 수 있다.

  2. MA 지표는 가격이 급격히 변할 때, 위치가 지연되어 잘못된 신호를 일으킬 수 있다.

  3. ATR 스톱은 초출력될 수 있으며, ATR 배수를 적절히 완화하거나, 큰 트렌드에서 일시적으로 종료되어야 한다.

  4. 다중 지표 조합은 승률을 높였음에도 불구하고 중지 손실을 유발할 기회를 증가시킵니다. 불필요한 중지 손실을 줄이기 위해 파라미터를 적절하게 조정해야합니다.

최적화 방향

  1. STC 변수를 조정하여 더 빠르게 반응하는 변수 조합을 찾습니다.

  2. MA 사이클 파라미터를 최적화하여 트렌드를 더 잘 추적할 수 있도록

  3. 다른 ATR 배수의 변수가 전략에 미치는 영향을 테스트합니다.

  4. 다른 STC를 사용해 더 잘 맞는 STC를 찾으십시오.

  5. 기계 학습 알고리즘을 추가하여 여러 매개 변수를 자동으로 최적화합니다.

  6. 대주기 경향에 대한 판단을 높이고 대주기의 다른 단계를 구분합니다.

요약하다

STC MA ATR 전략은 3가지 지표를 종합적으로 사용하여 트렌드 반전점을 포착하고, 안정적인 트렌드 추적 거래를 구현한다. 지표 조합은 가짜 신호를 필터링하고, 손실을 막는 위험을 제어하며, 강한 적합성과 안정성을 가지고 있다. 매개 변수 최적화 및 알고리즘을 도입함으로써 전략의 성능을 더욱 강화할 수 있다. 이 전략은 전체적으로 신뢰할 수 있는 적절한 전략 선택이다.

전략 소스 코드
/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 4h
basePeriod: 15m
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/
// © Romedius

//@version=5
strategy("My Strategy", overlay=true, margin_long=100, margin_short=100)

// STC
EEEEEE=input(12,"Length",group="STC")
BBBB=input(26,"FastLength",group="STC")
BBBBB=input(50,"SlowLength",group="STC")

AAAA(BBB, BBBB, BBBBB) =>
    fastMA = ta.ema(BBB, BBBB)
    slowMA = ta.ema(BBB, BBBBB)
    AAAA = fastMA - slowMA
    AAAA
    
AAAAA(EEEEEE, BBBB, BBBBB) => 
    //AAA=input(0.5)
    var AAA = 0.5
    var CCCCC = 0.0
    var DDD = 0.0
    var DDDDDD = 0.0
    var EEEEE = 0.0
    BBBBBB = AAAA(close,BBBB,BBBBB)     
    CCC = ta.lowest(BBBBBB, EEEEEE)
    CCCC = ta.highest(BBBBBB, EEEEEE) - CCC    
    CCCCC := (CCCC > 0 ? ((BBBBBB - CCC) / CCCC) * 100 : nz(CCCCC[1])) 
    DDD := (na(DDD[1]) ? CCCCC : DDD[1] + (AAA * (CCCCC - DDD[1]))) 
    DDDD = ta.lowest(DDD, EEEEEE) 
    DDDDD = ta.highest(DDD, EEEEEE) - DDDD     
    DDDDDD := (DDDDD > 0 ? ((DDD - DDDD) / DDDDD) * 100 : nz(DDDDDD[1])) 
    EEEEE := (na(EEEEE[1]) ? DDDDDD : EEEEE[1] + (AAA * (DDDDDD - EEEEE[1])))
    EEEEE

mAAAAA = AAAAA(EEEEEE,BBBB,BBBBB)
stc = mAAAAA > mAAAAA[1] ? true : false
stc_sig = stc == true and stc[1] == false ? 1 : stc == false and stc[1] == true ? -1 : 0
stc_long = stc_sig == 1
stc_short = stc_sig == -1
// STC end

// ATR stops
nATRPeriod = input(5,group="ATR Stops")
nATRMultip = input(3.5,group="ATR Stops")

xATR = ta.atr(nATRPeriod)
nLoss = nATRMultip * xATR

xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) : close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

pos = 0
pos := close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)

atr_sig = pos == -1 ? false : true
// ATR stops end

// ma
ma_len = input(200, title="MA Length", group="Moving Average")
ma = ta.sma(close, 200)
ma_sig = close < ma ? false : true
// ma end

// strategy entries
tp_mult = input(2, title="Take Profit ATR Multiplier", group="Strategy")
sl_mult = input(1, title="Stop Loss ATR Multiplier", group="Strategy")
early_stop = input(true, title="Close position when ATR changes color")

atr_stop = if close < xATRTrailingStop
    close - (close - xATRTrailingStop) * sl_mult
else
    close + (xATRTrailingStop - close) * sl_mult

longCondition = atr_sig == true and stc_sig == 1 and ma_sig == true
shortCondition = atr_sig == false and stc_sig == -1 and ma_sig == false

if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", limit=close + xATR * tp_mult, stop=atr_stop)
else if atr_sig == false and early_stop
    strategy.close("Long")

if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", limit=close - xATR * tp_mult, stop=atr_stop)
else if atr_sig == true and early_stop
    strategy.close("Short")
    
// plot stuff
atr_color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(atr_stop, title="ATR Stop", color=atr_color)

ma_color = ma_sig ? color.green : color.red
plot(ma, title="Moving Average", color=ma_color)

stc_color = stc_long ? color.green : color.red
plotshape(stc_long, style=shape.triangleup, color=stc_color, title="STC Long Signal", size=size.tiny)
plotshape(stc_short, style=shape.triangledown, color=stc_color, title="STC Short Signal", size=size.tiny)
// plot stuff end