이동평균 크로스오버에 기초한 전략을 따르는 경향

저자:차오장, 날짜: 2024-02-23 12:21:40
태그:

img

전반적인 설명

이 전략은 다른 매개 변수 설정을 가진 두 개의 이동 평균을 계산하고 트레이딩 후 트렌드를 구현하기 위해 크로스오버 상황을 비교하여 가격 트렌드 방향을 결정합니다. 빠른 이동 평균이 아래에서 느린 이동 평균을 뚫을 때 상승 신호로 판단됩니다. 빠른 이동 평균이 위에서 느린 이동 평균을 뚫을 때 하락 신호로 판단됩니다. 이 전략은 매개 변수를 조정함으로써 다른 주기의 트렌드를 판단 할 수 있습니다.

전략 원칙

이 전략은 비교를 위해 서로 다른 매개 변수 설정을 가진 두 개의 이동 평균 세트를 사용합니다. 첫 번째 이동 평균 매개 변수는 len1과 type1에 의해 설정되며 두 번째 이동 평균 매개 변수는 len2와 type2에 의해 설정됩니다. 여기서 len1과 len2는 각각 두 이동 평균의 사이클 길이를 나타내며 type1과 type2는 이동 평균의 알고리즘 유형을 나타냅니다.

빠른 이동 평균이 느린 이동 평균을 넘어서 황금 십자가를 형성하면 상승 신호로 판단됩니다. 빠른 이동 평균이 느린 이동 평균을 넘어서 죽은 십자가를 형성하면 하향 신호로 판단됩니다.

크로스오버 신호의 방향에 따라 긴 또는 짧은 포지션이 실행됩니다. 올림 신호가 발생하면, 만약 니드롱 매개 변수가 사실이라면, 롱 포지션이 퀄리티 default_qty_value 또는 퀄리티 %_of_equity로 열립니다. 하락 신호가 발생하면, 만약 니드 쇼트 매개 변수가 사실이라면, 퀄리티 default_qty_value 또는 퀄리티 %_of_equity로 짧은 포지션이 열립니다.

장점

  1. 시장 조건에 유연하게 적응하기 위해 7 가지 다른 유형의 이동 평균의 조합을 지원합니다.
  2. 장기 및 중단기 트렌드를 판단하기 위해 두 이동 평균의 매개 변수를 사용자 정의합니다.
  3. 단순하고 명확한 신호 판단 규칙, 이해하기 쉽고 실행하기 쉬운
  4. 긴 포지션과 짧은 포지션을 지원하고 트렌드 추적 거래를 수행 할 수 있습니다.

위험 과 해결책

  1. 이동 평균은 지연 속성을 가지고 있으며 가격 반전 지점을 놓칠 수 있습니다.
    솔루션: 이동 평균 주기를 적절하게 단축하거나 다른 지표와 함께 사용

  2. 높은 변동성 및 빈번한 반전 시장을 위해 적합하지 않습니다.
    솔루션: 변동 시장에서 거래를 피하기 위해 필터링 조건을 추가합니다.

  3. 잘못된 신호의 위험도 있습니다
    솔루션: 신호 신뢰성을 향상시키기 위해 다른 필터링 지표를 추가합니다.

최적화 방향

  1. 이동 평균의 사이클 조합을 최적화하고 전략 수익에 대한 긴 및 짧은 사이클 매개 변수의 영향을 테스트
  2. 최적의 이동 평균 알고리즘을 찾기 위해 다양한 유형의 이동 평균의 성능을 테스트하십시오.
  3. 신호 품질을 향상시키기 위해 거래 부피 변수 또는 결합을 위한 볼링거 밴드를 추가합니다.
  4. 고정 포지션 %_of_equity 접근법을 개선하기 위해 포지션 관리 전략을 최적화

요약

이 전략은 두 개의 이동 평균의 크로스오버를 비교하여 가격 트렌드를 판단하고, 트렌드를 캡처하고 수익을 창출하기 위해 대응하는 긴 및 짧은 거래를 수행합니다. 이점은 신호 규칙이 간단하고 명확하고 매개 변수가 조정 가능하며 적용 가능성이 강하며 다양한 시장 환경에 최적화 및 조정 할 수 있다는 것입니다. 이동 평균과 불규칙한 시장의 후진 위험을 방지하는 데주의를 기울여 신호 품질을 향상시키기 위해 필터링을위한 다른 지표를 추가하여 감소 할 수 있습니다.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's MAs Cross Tests v1.0", shorttitle = "MAs Cross tests 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

needlong = input(true, "long")
needshort = input(true, "short")

len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length")
type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type")
src2 = input(close, defval = close, title = "Fast MA Source")

len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length")
type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type")
src1 = input(close, defval = close, title = "Slow MA Source")

col = input(false, defval = false, title = "Color of bar")

o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel") 

//DEMA 1
dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1)

//TEMA 1
xEMA1 = ema(src1, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA 1
xvnoise = abs(src1 - src1[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src1 - src1[len1])
nnoise = sum(xvnoise, len1)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama1 = nz(kama1[1]) + nsmooth * (src1 - nz(kama1[1]))

//PriceChannel 1
lasthigh1 = highest(src1, len1)
lastlow1 = lowest(src1, len1)
center1 = (lasthigh1 + lastlow1) / 2

//DEMA 2
dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2)

//TEMA 2
xEMA12 = ema(src2, len2)
xEMA22 = ema(xEMA12, len2)
xEMA32 = ema(xEMA22, len2)
tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32

//KAMA 2
xvnoise2 = abs(src2 - src2[1])
nfastend2 = 0.20
nslowend2 = 0.05
nsignal2 = abs(src2 - src2[len2])
nnoise2 = sum(xvnoise2, len2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) 
kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1]))

//PriceChannel 2
lasthigh2 = highest(src2, len2)
lastlow2 = lowest(src2, len2)
center2 = (lasthigh2 + lastlow2) / 2

//MAs
ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0
ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0
plot(ma1, color = blue, linewidth = 3, transp = 0)
plot(ma2, color = red, linewidth = 3, transp = 0)

//Signals
trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1]
up = trend == 1 and ((close < open and close[1] < open[1]) or col == false)
dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false)

if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

더 많은