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

저자:차오장, 날짜: 2023-11-22 16:10:21
태그:

img

전반적인 설명

이것은 움직이는 평균 지표에 기반한 간단한 수치적 거래 전략이다. 그것은 엔트리 및 출구 신호를 결정하기 위해 빠르고 느린 움직이는 평균의 황금 십자가와 죽음의 십자가를 사용합니다. 빠른 MA가 아래에서 느린 MA보다 높을 때 구매 신호가 생성됩니다. 빠른 MA가 위에서 느린 MA보다 낮을 때 판매 신호가 생성됩니다.

전략 논리

이 전략은 주로 이동 평균의 트렌드 추적 능력을 활용합니다. 빠른 MA는 작은 매개 변수를 가지고 있으며 가격 변화에 신속하게 반응 할 수 있으며 느린 MA는 더 큰 매개 변수를 가지고 있으며 장기 트렌드를 나타냅니다. 느린 MA 위에 빠른 MA가 넘어가면 단기 움직임의 반전과 상승 추세의 시작을 신호합니다. 느린 MA 아래에 빠른 MA가 넘어가면 하락 추세로 반전되는 것을 신호합니다. 이러한 신호를 캡처함으로써 우리는 추진력과 함께 거래 할 수 있습니다.

특히, 이 전략은 5일 (빠른) 및 34일 (슬로우) 이중 이동 평균을 정의한다. 이 두 MA를 매일 계산하고 빠른 MA가 느린 MA보다 높거나 낮을 수 있는지 확인한다. 금색 십자가가 발생하면 길게 간다. 죽음의 십자가가 발생하면 지위를 종료한다.

이점 분석

이것은 간단하고 이해하기 쉬운 전략으로 양자 거래 초보자에게 적합합니다. 복잡한 전략에 비해 구현하기가 훨씬 쉽습니다.

이중 MA 전략은 시장 소음을 효과적으로 필터링하고 주요 트렌드를 포착 할 수 있습니다. MA 일 매개 변수를 조정함으로써 다른 시간 프레임에서 가격 변동에 적응 할 수 있습니다.

또한 스톱 로스 메커니즘이 내장되어 있습니다. 가격이 방향이 뒤집어지기 시작하고 MA의 죽음의 십자가가 발생하면 위험을 제어하기 위해 적시에 포지션을 종료합니다.

위험 분석

이중 MA 전략은 실패한 스톱 손실이나 곡선 적응 실패와 같은 위험을 가지고 있습니다. 주요 문제는 다음과 같습니다.

  1. MA 는 지연 효과 를 가지고 있으며, 트렌드가 이미 반전 된 후에야 신호 를 생성 할 수 있습니다. 수익성 있는 거래는 손실로 변할 수 있습니다.

  2. 다양한 시장에서 많은 잘못된 신호가 발생할 수 있으며 불필요한 거래, 증가한 비용 및 미끄러짐을 유발합니다.

  3. 그것은 근본 분석을 결합하지 않고 기술 지표에만 의존합니다. 시장 움직임을 주도하는 사건 중에 성능이 좋지 않을 수 있습니다.

  4. 포지션 크기와 리스크 관리를 고려하지 않습니다. 한 블랙 스완 이벤트가 전략을 폭발시킬 수 있습니다.

최적화 방향

강점을 더 잘 활용하고 위험을 줄이기 위해 다음과 같은 방법으로 최적화를 할 수 있습니다.

  1. MACD와 같은 트렌드 지표와 KDJ와 같은 변동성 지표를 추가하여 보다 엄격한 입시 규칙을 설정하고 잘못된 신호를 필터링합니다.

  2. 적절한 스톱 로스 메커니즘을 포함합니다. 예를 들어, 가격이 황금 십자 후 특정 비율로 떨어지거나 가격이 새로운 최고 / 최저에서 설정된 범위에서 떨어지면 종료하십시오.

  3. 빠른 및 느린 MA 일 조합을 최적화하여 다른 시간 프레임에서 가격 변동에 적응합니다. 매개 변수 최적화는 최상의 매개 변수를 찾을 수 있습니다.

  4. 전체 시장 체제를 결정하고 다양한 시장에서 과잉 거래를 피하기 위해 광범위한 시장 지표를 참조하십시오.

  5. 트렌드 신호의 신뢰성을 확인하기 위해 거래량 변경을 포함합니다. 예를 들어 신호가 시작되면 강한 볼륨이 필요합니다.

결론

이중 이동 평균 크로스오버 전략은 매우 전형적인 양적 거래 전략이다. 단순성, 직관성 및 구현 용이성과 같은 장점이 있다. 지속적인 테스트와 매개 변수 조정으로 괜찮은 결과를 얻을 수 있다. 그러나 뒤떨어진 신호 식별 및 잘못된 신호와 같은 문제가 존재한다. 안정적인 수익 창출 전략이 되기 위해 추가 필터와 위험 관리 메커니즘을 통합해야 한다.


/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
// This strategy is a modification to the "Bill Williams, Awesome Oscillator
// (AO) Backtest" strategy (Copyright by HPotter v1.0 29/12/2016)
//
// This version of the strategy by Midnight Mouse. 10/4/2018
//
// DESCRIPTION
//
// This indicator plots the oscillator as a column where periods fit for buying
// are marked as green, and periods fit for selling as orange/brown. If the
// current value of AO (Awesome Oscillator) is > the previous, the period is
// deemed fit for buying and the indicator is marked green. If the AO values is
// not over the previous, the period is deemed fit for selling and the indicator 
// is marked orange/brown.
//
// You can change long to short in the Input Settings
//
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////

strategy("Awesome Oscillator.MMouse_Lager_BCE")

// === SETTINGS ===

// Strategy start date
FromMonth   = input(defval = 1,    title = "From Month", minval = 1)
FromDay     = input(defval = 1,    title = "From Day",   minval = 1)
FromYear    = input(defval = 2017, title = "From Year",  minval = 2014)

// Strategy settings
nLengthSlow = input(34, minval=1,  title="Length Slow")
nLengthFast = input(5,  minval=1,  title="Length Fast")
allowShorts = input(false,         title="Include Short Trades")
reverse     = input(false,         title="Trade reverse")


// === BODY ===

// Use Heikin-Ashi candles for the buy/sell signal
ha_t        = heikinashi(syminfo.tickerid)
ha_high     = security(ha_t, timeframe.period, high)
ha_low      = security(ha_t, timeframe.period, low)
length      = input( 14 )
price       = open
vrsi        = rsi(price, length)

// Calc (H+L)/2 for each length
xSMA1_hl2   = sma((ha_high + ha_low)/2, nLengthFast)
xSMA2_hl2   = sma((ha_high + ha_low)/2, nLengthSlow)

// Get SMA difference (Fast - Slow)
xSMA1_SMA2  = xSMA1_hl2 - xSMA2_hl2

// Derive the color of the column
cClr = xSMA1_SMA2 > xSMA1_SMA2[1] ? #93c47d : #ad5e1d

// Determine the position to take (Long vs. Short)
pos = iff(xSMA1_SMA2 > xSMA1_SMA2[1],  1, iff(xSMA1_SMA2 < xSMA1_SMA2[1], -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos))

// Only apply strategy from the start date
if (time >= timestamp(FromYear, FromMonth, FromDay, 00, 00))
    if (possig == 1)
        // Market is currently fit for a Long position
        strategy.entry("Long", strategy.long)

    if (possig == -1)
        // Market is currently fit for a Short position
        if(allowShorts)
            // Shorts are allowed. Record a Short position
            strategy.entry("Short", strategy.short)	   	    
        else
            // Shorts are not allowed. Closec the Long position.
            strategy.close("Long")

// Define the candle colors
//barcolor(possig == -1 ? red : 
//         possig ==  1 ? green : 
//         blue )

// Plot the oscillator
plot(xSMA1_SMA2, style=columns, linewidth=1, color=cClr)

더 많은