더블 이동 평균 교차 전략


생성 날짜: 2023-11-22 16:10:21 마지막으로 수정됨: 2023-11-22 16:10:21
복사: 0 클릭수: 607
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

더블 이동 평균 교차 전략

개요

이것은 평평선 지표에 기반한 간단한 양적 거래 전략이다. 그것은 빠른 평평선과 느린 평평선을 이용해서 구매와 판매의 시간을 판단한다. 빠른 선이 아래쪽에서 느린 선을 뚫을 때 구매 신호를 생성한다. 빠른 선이 위쪽에서 아래쪽에서 느린 선을 뚫을 때 판매 신호를 생성한다.

전략 원칙

이 전략은 주로 평행선의 트렌드 추적 기능을 기반으로 한다. 빠른 선의 변수가 작아서 가격 변화에 빠르게 반응할 수 있다. 느린 선의 변수가 크면 장기적인 트렌드를 나타낸다. 빠른 선이 아래쪽에서 느린 선을 통과하면 단기적인 움직임이 반전되어 상승 추세로 진입하는 것을 의미하며, 빠른 선이 위쪽에서 느린 선을 통과하면 단기적인 움직임이 반전되어 하향 추세로 진입하는 것을 의미한다. 이러한 신호를 포착함으로써 순차적으로 거래 할 수 있다.

구체적으로, 이 전략은 5일 (빠른 라인) 과 34일 ( 느린 라인) 의 쌍평평선을 정의한다. 매일 이 두 평선의 값을 계산하고, 빠른 라인이 아래쪽에서 느린 라인을 뚫고 있는지 비교한다. 금 포크 신호가 발생하면 더 많이 하고, 사형 포크 신호가 발생하면 평점한다.

우위 분석

이 전략은 이해하기 쉽고 실행하기 쉽다. 다른 복잡한 전략에 비해, 이 전략은 양적 거래에 초보자에게 더 적합하다.

이중평균선 전략은 시장 소음을 효과적으로 필터링하여 주요 트렌드를 포착할 수 있다. 급속도평균선의 일 수 파라미터를 조정하여 다른 주기적인 시장 상황 변화에 적응할 수 있다.

이 전략은 또한 내장된 손해 중지 메커니즘을 가지고 있다. 가격이 반전하기 시작하면, 급속히 평행선에서 사각지대가 발생하면, 적시에 손해를 중지하여 위험을 효과적으로 제어할 수 있다.

위험 분석

쌍평선 전략은 멈출 수 없는 손실, 곡선 적합 실패 등의 위험이 발생할 수 있다. 구체적으로, 다음과 같은 문제가 주로 존재한다:

  1. 평균선에는 지연성이 있으며, 완전한 회전 후에 신호를 발산하는 경우가 발생할 수 있습니다. 이 시점에는 이익이 손실로 바뀌었습니다.

  2. 위기상황에서는 여러번의 잘못된 신호가 발생할 수 있다. 이 경우 불필요한 거래가 너무 많아 거래비용이 증가하고 점유율이 떨어진다.

  3. 이 전략은 근본적인 분석과 결합되지 않은 기술적인 지표에 전적으로 의존한다.

  4. 위치 관리와 위험 통제를 고려하지 않았다.

최적화 방향

이 전략의 장점을 더 잘 활용하고 위험을 줄이기 위해, 다음과 같은 측면에서 최적화할 수 있습니다.

  1. 트렌드 지표와 변동 지표를 결합하여 더 엄격한 입시 조건을 설정하고 가짜 신호를 필터링합니다. 예를 들어 MACD 또는 KDJ 지표입니다.

  2. 적절한 스포드 메커니즘을 추가한다. 금강 뒤의 하락의 일정한 비율은 스포드한다. 또는 새로운 최고 (최저) 지점이 형성된 후의 하락의 일정한 폭은 스포드한다.

  3. 빠른 느린 평균선의 일수 변수 조합을 최적화하여, 다른 주기적 가격 변화에 맞게 조정한다. 최적의 변수를 찾기 위해 변수 조합을 최적화 할 수 있다.

  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)