가격 이동 평균 교차 전략


생성 날짜: 2023-11-27 16:52:19 마지막으로 수정됨: 2023-11-27 16:52:19
복사: 1 클릭수: 680
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

가격 이동 평균 교차 전략

개요

이 전략은 본질적으로 평행선 교차 전략이다. 가격의 이동 평균을 계산하여 특정 긴 단기 이동 평균을 설정하여, 단기 이동 평균이 아래에서 장기 이동 평균을 통과할 때 더 많이 하고, 단기 이동 평균이 위에서 아래에서 장기 이동 평균을 통과할 때 공백을 한다.

전략 원칙

가격 평균 경로 전략의 핵심 아이디어는: 가격의 이동 평균은 가격 변화의 경향을 효과적으로 반영할 수 있다. 전략은 두 개의 다른 주기 이동 평균을 설정하고, 특정 거래 논리를 통해, 시장 추세의 변화를 판단하여 거래 신호를 생성한다.

이 전략은 더 긴 기간의 평균선과 더 짧은 기간의 평균선을 계산한다. 긴 선은 주로 큰 트렌드를 판단하고, 짧은 선은 큰 트렌드 과정에서 중단기적인 변동을 잡기 위해 사용된다. 전략의 거래 신호는 주로 짧은 선과 긴 선의 교차에서 비롯된다: 짧은 선의 긴 선을 통과하는 것은 다중 신호이며, 짧은 선의 긴 선의 긴 선을 통과하는 것은 공백 신호이다.

구체적으로, 이 전략은 SMA, EMA, VWMA 등 7가지의 다른 유형의 이동 평균을 사용한다. 사용자는 이동 평균의 유형을 선택할 수 있다. 이동 평균의 길이는 또한 유연하게 설정할 수 있다. 이 전략은 또한 거래 시간 제한과 포지션 관리 메커니즘을 제공한다. 이러한 설정을 통해 사용자는 다양한 품종과 시장 환경에 맞게 전략의 매개 변수를 유연하게 조정할 수 있다.

우위 분석

가격 평균 경로 전략의 주요 장점은 다음과 같습니다.

  1. 전략 논리는 명확하고 간단하며, 이해하기 쉽고 구현하기 쉬우며, 초보자 학습에 적합하다.

  2. 전략의 원리는 튼튼하며, 충분히 검증된 일률 거래 법칙에 기반하며, 시장 실무 테스트를 거쳤습니다.

  3. 전략 파라미터는 유연하게 조정할 수 있으며, 사용자는 시장에 대한 자신의 판단과 선호도에 따라 적절한 파라미터를 선택할 수 있다.

  4. 이 전략은 손실 부서의 보유 기간을 줄이고 불필요한 역대출을 방지할 수 있는 위험 제어 메커니즘을 갖는다.

  5. 전략에는 여러 종류의 평균이 포함되어 있으며, 사용자는 자신의 거래 유형에 가장 적합한 이동 평균 유형을 선택할 수 있습니다.

  6. 주요 휴일 시장의 비정상적인 변동을 피하기 위해 특정 거래 시간대에 거래 논리를 시작하는 전략을 지원합니다.

위험 분석

가격 평균 경로 전략에는 여러 장점이 있지만 실제 거래에는 위험도 있습니다. 다음과 같은 두 가지 측면에서 나타납니다.

  1. 대부분의 이동 평균이 지연되어 있기 때문에, 교차 신호는 가격 반전이 완료된 후반에 나타날 수 있으며, 쉽게 막힐 수 있다.

  2. 매개 변수 설정이 잘못되면 교차 신호가 너무 자주 발생하여 거래 활동이 너무 높게 거래 비용이 더 많이 발생합니다.

위와 같은 위험은 다음과 같은 방법으로 제어 및 대응할 수 있습니다.

  1. 단편적 손실 위험을 조절하기 위해 적당한 스톱 손실을 설정합니다.

  2. 필터링 조건을 추가하고 거래 빈도를 낮추고 과도한 거래를 방지하십시오. 예를 들어 가격 채널 또는 가격 변동량 조건을 설정하십시오.

  3. 이동 평균의 파라미터를 최적화하고, 자신의 거래 종류와 주기에 가장 적합한 파라미터 조합을 선택한다. 다양한 시장 조건에서 전략의 안정성을 테스트한다.

최적화 방향

이 가격평균 크로스 전략에는 다음의 몇 가지 측면에서 더 많은 최적화가 가능합니다.

  1. 과잉 거래 상황에서 보호 장치를 추가하십시오. 예를 들어, 가격의 급격한 변동이있을 때 거래를 중단하고 시장의 이상성을 피하십시오.

  2. 더 많은 필터링 조건과 조합 거래 신호를 추가하여 신호의 품질과 안정성을 향상시킵니다. 예를 들어, 다른 기술 지표와 결합하여 트렌드를 식별하는 강력한 교차.

  3. 동적인 파라미터 시스템을 사용한다. 시장 조건과 품종 특성에 따라 이동 평균 길이, 거래 스위치 등의 핵심 파라미터를 자동으로 조정한다. 고정된 수치를 사용하는 대신.

  4. 복합 다중 품종 배당과 같은 고급 전략에 이 평균선 교차 신호를 적용한다. 다른 정보와 조합하여 깊이 전략 최적화를 한다.

이러한 제안은 전략의 적용 환경을 넓히고, 거래 효과를 높이고, 위험과 수익을 더 잘 통합할 수 있다.

요약하다

이 글은 Noro’s CrossMA 간단한 평행선 교차 전략에 대한 자세한 코드 해독과 해독을 수행합니다. 우리는 전략의 아이디어, 원리 구조, 주요 장점 및 가능한 개선 방향을 분석합니다. 이 전략은 전체적으로 논리적으로 명확하고, 실용적으로 간단하며, 여러 거래 환경에 적응할 수 있도록 변수를 조정할 수 있습니다.

전략 소스 코드
/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type")
src = input(close, defval = close, title = "MA Source")
len = input(30, defval = 30, minval = 1, title = "MA length")
off = input(00, defval = 00, minval = 0, title = "MA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
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")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama = 0.0
kama := nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

sma_1 = sma(src, len)
ema_1 = ema(src, len)
vwma_1 = vwma(src, len)
ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0
ma = ma2[off]

macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend == 1 and trend[1] == -1
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if trend == -1 and trend[1] == 1
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if size > 0 and needshort == false and trend == -1
    strategy.close_all()
if size < 0 and needlong == false and trend == 1
    strategy.close_all()
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")