이중 이동 평균 크로스오버 스칼퍼 전략

저자:차오장, 날짜: 2023-10-30 11:19:48
태그:

img

전반적인 설명

이중 이동 평균 크로스오버는 가격과 이동 평균 사이의 크로스오버 신호를 입력 및 출구 신호로 사용하여 단기 트렌드 움직임을 포착하는 간단하고 효과적인 스칼핑 전략입니다.

전략 논리

이 전략은 서로 다른 기간의 두 개의 이동 평균을 사용합니다. 단기 MA 라인과 장기 MA 라인을 사용합니다. 짧은 기간 MA가 아래에서 더 긴 기간 MA를 넘을 때 구매 신호를 생성합니다. 짧은 기간 MA가 위에서 더 긴 MA를 넘을 때 판매 신호가 생성됩니다.

전략은 먼저 변수 장도를 정의하여 더 긴 MA 라인의 기간을 50로 지정합니다. 그 다음 을 종료 가격으로 정의하고 길이 50의 MA 값을 계산하고 ma 변수에서 저장합니다. 가격이 ma 값보다 높는지 확인하기 위해 더 나아가 b초를 정의합니다. 예라면, bcount은 1으로 증가합니다. 그렇지 않으면 0으로 재설정됩니다. b초확인바르스를 번 연속적으로 (디폴트 2) 트리거하면 구매 신호가 생성됩니다. 가격이 ma 이하로 떨어지면 판매 신호가 유사하게 생성됩니다.

일부 유효하지 않은 신호를 필터링하기 위해 현재와 이전 바 사이의 가격 관계를 검사하는 clc, clc0clc1와 같은 추가 필터가 추가됩니다. 이러한 조건이 충족되면만 거래 신호가 생성됩니다.

마지막으로, 기존 포지션은 가격이 MA 라인을 역으로 넘으면 종료됩니다.

장점

  • 간단한 논리, 이해하기 쉽고 실행하기 쉽습니다.
  • MA 시스템을 사용하여 단기 동향을 효과적으로 포착합니다.
  • 추가 필터는 유효하지 않은 신호의 간섭을 줄입니다.
  • 고정 스톱 로스 메커니즘은 단일 거래에서 손실을 제어합니다.

위험성

  • 다양한 시장에서 윙사 (whipssaws) 에 취약하여 추가 비용으로 이어집니다.
  • MA 기간과 같은 고정 매개 변수들은 모든 시장 조건에 맞지 않을 수 있습니다.
  • 고정 스톱 손실은 스톱 레벨을 넘어 강한 트렌드 움직임에서 일찍 종료 될 수 있습니다.

위험은 변동성, 후속 중지 또는 비율 중지 등을 기반으로 동적 MA 기간을 사용하여 완화 할 수 있습니다.

개선

이 전략은 여러 가지 방법으로 개선될 수 있습니다.

  1. 변동성을 기반으로 MA 매개 변수를 동적으로 최적화합니다.

  2. 신호 품질을 향상시키기 위해 볼륨 스파이크 같은 추가 필터를 추가합니다.

  3. 조기 중단을 줄이기 위해 부동 또는 비율로 멈추는 것을 사용하십시오.

  4. MACD, RSI 같은 다른 지표와 결합하여 다조건 검증을 위해

  5. 트레이드당 손실을 제어하기 위해 동적 포지션 사이징과 같은 자동화된 리스크 관리를 추가합니다.

  6. 더 정확한 신호 생성 모델을 위해 기계 학습을 사용하세요.

결론

이중 MA 크로스오버 전략은 단기 거래에 효과적인 시스템이다. 미세한 조정 매개 변수, 위험 관리 및 다른 도구와 결합하면 수익성을 더욱 향상시킬 수 있다. 전반적으로 작은 내일 움직임을 스칼핑하기 위해 이해하기 쉽고 구현하기 쉽습니다.


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

//@version=4
strategy("MovingAvg Cross", overlay=true)
length = input(50)
confirmBars = input(2)
price = close

ma = sma(price, length)

bcond = price > ma

bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0

clc=close[0]>close[1]
clc0=close[0]>open[0]
clc1=close[1]>open[1]

if clc and clc0 and clc1 and (bcount == confirmBars)
    strategy.entry("buy", strategy.long)


scond = price < ma
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0

csc=close[0]<close[1]
csc0=close[0]<open[0]
csc1=close[1]<open[1]

if csc and csc0 and csc1 and (scount == confirmBars)
    strategy.entry("sell", strategy.short)

strategy.close("buy", when=scond)
strategy.close("sell",when=bcond)
    
plot(ma, color=color.red)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)


더 많은