기하급수적인 이동평균의 크로스오버 전략

저자:차오장, 날짜: 2023-10-17 16:55:10
태그:

img

전반적인 설명

이것은 서로 다른 기간에 두 개의 기하급수적인 이동 평균 (EMA) 의 크로스오버에 기초하여 길거나 짧은 자동 거래 전략입니다. 간단한 기술적 인 지표를 사용하여 초보자가 배우고 연습하기에 매우 적합합니다.

원칙

이 전략은 두 개의 EMA를 사용합니다. 하나는 더 큰 시간 프레임에서의 EMA이고 다른 하나는 현재 시간 프레임에서의 EMA입니다. 현재 EMA가 더 큰 EMA를 넘으면 길게됩니다. 현재 EMA가 더 큰 EMA를 넘으면 짧게됩니다.

구체적으로, 전략은 먼저 두 개의 EMA 매개 변수를 정의합니다.

  1. tf - 더 큰 시간 프레임, 기본 매일.
  2. len - EMA 기간 길이는 기본 3.

그 다음 두 개의 EMA를 계산합니다.

  1. ma1 - 일일 시간 프레임에서 3일 EMA
  2. ma2 - 현재 시간 프레임에서 3일 EMA

마지막으로, 그것은 다음을 기반으로 무역에 참여합니다.

  • ma2 > ma1이 길어지면
  • ma2 < ma1이 짧으면

다른 기간의 두 EMA 사이의 교차를 통해 트렌드 방향을 판단함으로써 거래를 자동화합니다.

장점

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 간단한 원리, 이해하기 쉽고 실행하기 쉬운, 초보자에게 매우 적합합니다.
  2. 트렌드를 따라, 트렌드를 따르면 괜찮은 수익을 얻을 수 있습니다.
  3. 가격변화에 더 민감한 EMA를 사용하면 트렌드 반전을 적시에 파악할 수 있습니다.
  4. 서로 다른 기간의 EMA를 결합하면 각각의 강점을 활용하고 시스템 안정성을 향상시킬 수 있습니다.
  5. 너무 많은 매개 변수가 필요하지 않고 테스트하고 최적화하기 쉽고 실시간 거래에 편리합니다.

위험성

이 전략은 또한 몇 가지 위험을 안고 있습니다.

  1. 약한 추세에 따라 능력, 시장의 범위에서 whipssawed 될 수 있습니다.
  2. 이중 EMA 크로스오버에서 뒤쳐져서 기회를 놓칠 수도 있습니다.
  3. 두 개의 EMA 사이의 무질서한 크로스오버를 효과적으로 필터할 수 없습니다.
  4. 단순한 EMA에 의존하고 복잡한 시장에 적응하기 어렵습니다.

스톱 로스를 설정하고 매개 변수를 최적화하고 다른 지표를 추가함으로써 위험을 줄일 수 있습니다.

최적화

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 최적의 조합을 찾기 위해 다른 큰 기간 EMA 매개 변수를 테스트합니다.
  2. 가짜 신호를 피하기 위해 볼륨 필터를 추가합니다.
  3. 트렌드 지표를 포함하여 포지션 크기와 효율성을 높입니다.
  4. 단일 트레이드 손실을 제어하기 위해 적응 스톱 손실을 설정합니다.
  5. 시장 조건에 따라 포지션 크기를 최적화하십시오.
  6. 더 똑똑한 전략을 만들기 위해 기계 학습 모델을 추가합니다.

결론

EMA 크로스오버 전략은 초보자가 배우고 연습하기에 적합한 간단한 지표로 트렌드를 포착합니다. 더 효과적인 양적 거래 전략을 개발하기 위해 더 많은 기술적 지표와 모델을 도입하여 최적화 할 수있는 넓은 공간이 있습니다.


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

//@version=3
strategy("Noro's Singapore Strategy", shorttitle = "Singapore str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
tf = input("D", title = "Big Timeframe")
len = input(3, minval = 1, title = "MA length")
src = input(close, title = "MA Source")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MAs
ma1 = request.security(syminfo.tickerid, tf, sma(src, len))
ma2 = sma(src, len)
plot(ma1, linewidth = 2, color = blue, title = "Big TF MA")
plot(ma2, linewidth = 2, color = red, title = "MA")

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if ma2 > ma1
    strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if ma2 < ma1
    strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

더 많은