SMA와 EMA를 기반으로 한 양적 거래 전략

저자:차오장, 날짜: 2023-12-12 12:31:25
태그:

img

I. 전략 개요

이 전략은 SMA와 EMA를 기반으로 한 양적 거래 전략 (Quantitative Trading Strategy Based on SMA and EMA) 이라고 불립니다. 주요 아이디어는 다른 매개 변수와 함께 SMA 라인과 EMA 라인을 결합하여 거래 신호를 구성하는 것입니다.

II. 전략 원칙

  1. 마감 가격과 EMA20의 SMA9, SMA50, SMA180를 계산합니다.

  2. 닫는 가격과 지원 수프와 저항 수프 사이의 관계를 기반으로 구매 및 판매 신호를 결정합니다. 수프를 통해 닫을 때 구매 신호를 생성하고 수프를 통해 닫을 때 판매 신호를 생성합니다.

  3. 시그널 트리거를 구매할 때, 긴 포지션 전략을 실행하고, 시그널 트리거를 판매할 때, 긴 포지션을 닫습니다.

  4. 시그널 트리거를 팔 때, 쇼트 포지션 전략을 실행; 시그널 트리거를 구매할 때, 쇼트 포지션을 닫습니다.

III. 이점 분석

  1. 여러 이동 평균을 결합하여 거래 신호를 형성하면 정확성과 안정성이 향상됩니다.

  2. 동적 지지와 저항을 계산하면 거래 신호가 더 신뢰할 수 있습니다.

  3. 고, 중, 낮은 변동성 이동평균을 채택하면 장기적인 추세와 단기적인 돌파구를 모두 고려하여 전략의 수익성을 향상시킵니다.

  4. 긴 포지션과 짧은 포지션을 지원하면 트렌딩 시장과 옆 시장에서 이익을 얻을 수 있습니다.

IV. 위험 분석

  1. SMA는 구매 및 판매 신호를 지연시키고 전략 성과에 영향을 줄 수 있는 지연 효과를 가지고 있습니다.

  2. 손해를 막는 메커니즘이 없으면 손실이 커질 수 있습니다.

  3. 백트테스팅 데이터가 충분하지 않아 시장에 따라 매개 변수를 조정해야 합니다.

  4. 기술적인 지표에 의존하고 블랙 스완의 현상을 감당할 수 없습니다.

해결책:

  1. SMA 기간을 적절히 조정하세요.
  2. 합리적인 스톱 로스를 설정해
  3. 백테스팅을 위한 샘플 크기를 늘리고 매개 변수를 조정합니다.
  4. 위험 관리 메커니즘을 개선

V. 최적화

  1. 단일 손실을 통제하기 위해 변동성 기반의 스톱 손실을 추가합니다.

  2. 트렌드 판단과 신호 생성에 도움이 되는 기계 학습 모델을 추가합니다.

  3. 주요 가격 분석을 추가하여 지원 및 저항 정확도를 향상시킵니다.

  4. 더 나은 매개 변수를 찾기 위해 다른 매개 변수 조합을 테스트합니다.

VI. 요약

이 전략은 SMA와 EMA의 기술적 지표를 결합하여 거래 신호를 구성하고, 완전한 구매 및 판매 논리를 형성하기 위해 동적 지원 및 저항을 계산합니다. 이점은 유연한 매개 변수, 양방향 거래, 다른 시장에 적응 할 수 있지만, 지연 및 불충분한 스톱 손실과 같은 문제에도 직면합니다. 안정성과 수익성을 향상시키기 위해 스톱 손실, 추세 판단, 주요 가격 분석과 같은 측면에서 미래 최적화가 가능합니다.

]


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-11 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="StrategySMA 9/50/180 | EMA 20 | BUY/SELL", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//SMA and EMA code
smaInput1 = input(9, title="SMA1")
smaInput2 = input(50, title="SMA2")
smaInput3 = input(180, title="SMA3")
emaInput1 = input(20, title="EMA1")
sma1 = sma(close, smaInput1)
sma2 = sma(close, smaInput2)
sma3 = sma(close, smaInput3)
EMA1 = ema(close, emaInput1)
plot(sma1, color= color.red , title="SMA1")
plot(sma2, color = color.blue, title="SMA2")
plot(sma3, color= color.white, title="SMA3")
plot(EMA1, color = color.yellow, title="EMA1")

no=input(3,title="BUY/SELL Swing")
Barcolor=input(false,title="BUY/SELL Bar Color")
Bgcolor=input(false,title="BUY/SELL Background Color")
res=highest(high,no)
sup=lowest(low,no)
avd=iff(close>res[1],1,iff(close<sup[1],-1,0))
avn=valuewhen(avd!=0,avd,0)
tsl=iff(avn==1,sup,res)

// Buy/sell signals
BuySignal = crossover(close, tsl)
SellSignal = crossunder(close, tsl)

// Enter long position
strategy.entry("Buy", strategy.long, when=BuySignal)

// Exit long position
strategy.exit("Sell", "Buy", when=SellSignal)

// Enter short position
strategy.entry("Sell", strategy.short, when=SellSignal)

// Exit short position
strategy.exit("Buy", "Sell", when=BuySignal)

colr = close>=tsl ? color.green : close<=tsl ? color.red : na
plot(tsl, color=colr)


더 많은