이중 이동 평균 반전 전략


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

이중 이동 평균 반전 전략

개요

이 전략은 주로 이중 이동 평균을 구매 및 판매 신호로 사용하여 트렌드 반전 시 수익을 얻습니다. 단기 이동 평균 위에 장기 이동 평균을 통과 할 때 더 많이하고 단기 이동 평균 아래에 장기 이동 평균을 통과 할 때 공백을 취하는 것은 일반적인 추적 중지 전략입니다.

전략 원칙

이 전략은 먼저 두 개의 이동 평균을 설정하고, 더 짧은 20 일 평균, 더 긴 60 일 평균. 그리고 짧은 평균과 긴 평균의 교차 상황을 판단하여 입시를 결정한다.

구체적으로, 단기평균선 위에 장기평균선을 뚫을 때, 현재 상승 추세에 있다는 것을 의미하며, 이 때 더 많이 한다. 단기평균선 아래에 장기평균선을 뚫을 때, 현재 하향 추세에 있다는 것을 의미하며, 이 때 공백한다.

더 많은 코카이드를 한 후의 손실은 추적 중지입니다. 최고 가격과 최저 가격에 따라 트레일링 스톱, 최대 이익을 잠금 할 수 있습니다.

코드의 주요 논리는 다음과 같습니다.

  1. 20일 EMA와 60일 EMA 계산
  2. 20일 EMA를 60일 EMA로 바꾸고, 더 늘려라
  3. 20일 EMA가 60일 EMA를 통과하는지 판단하고, 그렇지 않으면 비어
  4. 최대 3%의 가격으로 포지션에 들어가면
  5. 코스피 입장에 들어가면 최소 가격의 3%를 스톱 라인으로 사용한다
  6. 포지션을 보유할 때 계속적으로 스피드 라인을 조정합니다.

우위 분석

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

  1. 이 아이디어는 간단하고 이해하기 쉽고, 실행하기 쉽습니다.
  2. 이중 평행선을 사용하여 가짜 돌파구를 효과적으로 필터링 할 수 있습니다.
  3. 추적 스톱로스를 사용하면 최대 수익을 고정할 수 있습니다.
  4. 트렌드가 바뀌면 신호를 잡을 수 있다.
  5. 철수 통제가 잘 되고, 비교적 안정적이다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 동향이 명확하지 않을 때, 이중 평균선은 자주 교차할 수 있으며, 이로 인해 자주 거래 손실이 발생할 수 있다.
  2. 스포드 레인지의 설정이 잘못되면 스포드 레인지가 너무 느슨하거나 너무 급진적으로 될 수 있다.
  3. 매개 변수가 설정되면 주기 길이가 잘못되면 중요한 신호 포인트를 놓칠 수 있다.
  4. 거래비용이 높기 때문에 수익률이 떨어지기도 합니다.

위험은 다음과 같은 방법으로 최적화할 수 있습니다.

  1. 트렌드가 보이지 않는 곳에서는 필터링 시스템을 적용하여 맹목적인 거래를 피하십시오.
  2. 스포드 범위를 테스트하여 최적화하고, 적절한 스포드 범위를 설정한다.
  3. 역측정과 변수조정으로 최적의 변수를 찾아 설정한다.
  4. 적당히 줄여 거래비용을 줄여라.

더 나은 생각

이 전략은 다음의 몇 가지 측면에서 더 개선될 수 있습니다.

  1. 다른 지표 필터링을 추가하여 복합 조건 입시 메커니즘을 형성하고 가짜 돌파구를 피하십시오. 예를 들어 RSI 지표 판단에 추가 할 수 있습니다.

  2. 이동 평균선의 주기 변수를 최적화하여 최적의 변수 조합을 찾는다. 단계적 탐색 방식으로 다른 주기 변수를 테스트할 수 있다.

  3. 최적화 스톱 레인지. 역측량 데이터를 통해 최적의 스톱 레인지를 계산할 수 있다. 또한, 동적 스톱 레인지를 설정할 수 있다.

  4. 재입장 메커니즘을 설정한다. 스톱로즈 탈퇴 후, 합리적인 재입장 논리를 설정하여 거래 횟수를 줄일 수 있다.

  5. 트렌드를 판단하는 지표와 결합하여, 트렌드가 보이지 않을 때 거래를 중지하여 유효하지 않은 거래를 피하십시오.

  6. 포지션 관리 메커니즘에 가입하여 시장 상황에 따라 포지션 및 스톱 스레인지를 동적으로 조정하십시오.

요약하다

이중 이동 평균 역전 전략은 전체적으로 간단하고 실용적이며, 쌍평평선으로 트렌드 전환점을 판단하는 일반적인 방법 중 하나입니다. 그러나 약간의 위험이 있지만, 파라미터 설정과 스톱 로즈 범위를 최적화 테스트하고 다른 필터링 지표와 함께 사용해야 합니다. 전략의 최대 효과를 발휘하려면 전략의 효율성을 극대화해야합니다.

전략 소스 코드
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
needdb = input(true, defval = true, title = "Double Body")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

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

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2
candle = high - low

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)