이중 이동평균 파업 전략

저자:차오장, 날짜: 2024-01-24 14:49:29
태그:

img

전반적인 설명

이중 이동 평균 브레이크아웃 전략 (Dual Moving Average Breakout Strategy) 은 빠른 이동 평균과 느린 이동 평균을 기반으로 하는 양적 거래 전략이다. 거래 신호로 서로 다른 기간을 가진 두 개의 기하급수적인 이동 평균 (EMA) 을 사용합니다. 빠른 EMA가 느린 EMA를 넘을 때 구매 신호가 생성됩니다. 빠른 EMA가 느린 EMA를 넘을 때 판매 신호가 생성됩니다.

전략 논리

이 전략의 핵심 논리는 빠른 이동 평균과 느린 이동 평균을 사용하여 거래 신호를 형성하는 것입니다. 전략은 빠른 EMA 기간을 12 일, 느린 EMA 기간을 26 일로 정의합니다. 계산 방법은 다음과 같습니다.

  1. 2일 기간의 가격 배열의 지수 이동 평균 AP를 계산합니다.
  2. 빠른 이동 평균을 계산합니다. 12일 기간으로 AP를 기반으로 빠른
  3. 느린 이동 평균을 계산합니다. 26일 기간으로 AP를 기반으로 느린
  4. 빠른 이동 평균과 느린 이동 평균을 비교합니다.
    1. 빠른 것이 느린 것을 넘으면 상승 신호입니다.
    2. 느린 아래로 빠르게 넘어가면 하향 신호입니다.
  5. 가격과 이동 평균 관계를 결합한 특정 거래 신호를 결정합니다.
    1. 상승 신호: 빠른> 느린 && AP> 빠른
    2. 하향 신호: 빠르다<슬로우 && AP<빠르다

빠른 이동 평균과 느린 이동 평균의 교차를 사용하여 시장 추세를 결정하고 거래 신호를 생성하는 것은 전형적인 이중 이동 평균 전략입니다.

이점 분석

이중 이동평균 파업 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 전략 논리는 간단하고 명확하며 이해하기 쉽고 실행하기 쉽습니다.
  2. 이동 평균 기간은 다른 시장 환경에 적응하도록 조정할 수 있습니다.
  3. 긴 포지션과 짧은 포지션 모두 더 높은 수익을 얻을 수 있도록
  4. 더 정확한 거래 신호는 가격과 이동 평균을 결합하여 생성 할 수 있습니다.
  5. 이동 평균의 후진 특징은 시장 소음을 효과적으로 필터링 할 수 있습니다.

위험 분석

이중 이동평균 파업 전략은 또한 몇 가지 위험을 가지고 있습니다:

  1. 시장이 범위에 묶여있을 때 더 많은 잘못된 신호가 발생할 수 있습니다.
  2. 이중 이동 평균 전략은 구조적 시장 변화를 무시하여 곡선 적응을 일으킬 수 있습니다.
  3. 기술 지표에만 의존하는 것은 손실 위험이있는 가짜 파업에 취약합니다.

해결책:

  1. 현재 시장 조건에 더 잘 적응하기 위해 이동 평균 기간을 최적화
  2. 가짜 파장을 피하기 위해 부피와 같은 다른 지표로 신호를 확인합니다.
  3. 이윤/손실 비율을 통제하고 위험을 줄이기 위한 트렌드를 따르는 전략을 채택

최적화 방향

이중 이동평균 파업 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 시장 변화에 적응하기 위해 더 적합한 이동 평균 기간 조합을 찾아
  2. 유효성을 보장하기 위해 신호 필터링을 위해 볼륨과 같은 지표를 추가합니다.
  3. 동향을 파악하고 매개 변수를 조정하기 위해 시장 구조 지표를 포함
  4. 시장 변화에 따라 기간을 자동으로 조정할 수 있는 동적 이동 평균을 채택
  5. 리스크를 효과적으로 통제하고 자본을 보호하기 위한 스톱 로스 전략을 도입

결론

이중 이동 평균 브레이크아웃 전략은 간단하고 실용적인 양적 거래 전략입니다. 그것은 쉬운 논리 및 구현과 같은 장점을 가지고 있으며 시장 적응성 문제도 있습니다. 우리는 매개 변수 최적화, 신호 필터링, 위험 통제 등을 통해 안정적인 수익성있는 거래 시스템을 만들 수 있습니다. 전반적으로 이중 이동 평균 전략은 양적 거래자에게 심도있는 연구와 응용을 가치가있는 훌륭한 전략 프로토 타입입니다.


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("CDC Action Zone V.2", overlay=true)

// CDC ActionZone V2 29 Sep 2016
// CDC ActionZone is based on a simple 2MA and is most suitable for use with medium volatility market
// 11 Nov 2016 : Ported to Trading View with minor UI enhancement
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"])
src = input(title="Data Array",type=input.source,defval=ohlc4)
prd1=input(title="Short MA period", type=input.integer,defval=12)
prd2=input(title="Long MA period",type=input.integer,defval=26)
AP = ema(src,2)
Fast = ema(AP,prd1)
Slow = ema(AP,prd2)


Bullish = Fast>Slow
Bearish = Fast<Slow

Green = Bullish and AP>Fast
Red = Bearish and AP<Fast
Yellow = Bullish and AP<Fast
Blue = Bearish and AP>Fast

Buy = Bullish and Bearish[1]
Sell = Bearish and Bullish[1]


alertcondition(Buy,"Buy Signal","Buy")
alertcondition(Sell,"Sell Signal","Sell")


//Plot

l1=plot(Fast,"Fast", linewidth=1,color=color.red)
l2=plot(Slow,"Slow", linewidth=2,color=color.blue)
bcolor = Green ? color.lime : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
fill(l1,l2,bcolor)

// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2000, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 1921)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"


if LSB == "Long only" and Buy and window()
    strategy.entry("L",true)
if LSB == "Long only" and Sell and window()
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Buy and window()
    strategy.entry("L",true)
if LSB == "Both" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Sell and window()
    strategy.entry("S",false)
if LSB == "Short only" and Buy and window()
    strategy.close("S",qty_percent=100,comment="TP Short")

더 많은