이동 평균 크로스오버 거래 전략

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

img

전반적인 설명

이 전략은 거래에 이동 평균의 교차 원칙에 기반합니다. 두 개의 이동 평균을 사용하여 단기 이동 평균이 아래에서 장기 이동 평균을 넘을 때 구매 신호를 생성합니다. 가격이 다른 이동 평균보다 낮을 때 판매 신호가 생성됩니다. 이 전략은 트렌딩 시장에 적합하며 소음 거래를 효과적으로 필터링하고 주요 트렌드를 포착 할 수 있습니다.

전략 논리

이 전략은 사용자가 사용자 지정할 수 있는 단기 및 장기 이동 평균 기간, 출구 이동 평균 기간 및 이동 평균 계산 방법을 사용합니다.

단기 이동 평균이 아래로부터의 장기 이동 평균을 넘을 때 구매 신호가 생성됩니다. 이것은 단기 트렌드가 상승 추세로 전환되어 구매 할 수 있음을 나타냅니다.

닫기 가격이 출구 이동 평균 이하로 떨어지면 판매 신호가 생성됩니다. 이것은 트렌드 반전을 나타냅니다. 그래서 우리는 입장을 종료해야합니다.

따라서 전략의 거래 신호는 단기 및 장기 이동 평균의 교차와 종료 가격과 출구 이동 평균 사이의 관계에서 나옵니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 간단하고 쉽게 실행할 수 있습니다.

  2. 사용자 정의 가능한 매개 변수는 다른 시장 조건에 맞습니다.

  3. 이동평균은 소음을 필터링하고 주요 추세를 파악합니다.

  4. 추세, 지원/저항과 같은 다른 기술 지표를 추가로 최적화 할 수 있습니다.

  5. 통제 가능한 리스크/상금 비율, 스톱 로스 메커니즘

위험 분석

위험은 다음과 같습니다.

  1. 트렌드가 아닌 통합 시장에서 잘못된 신호에 취약합니다.

  2. 부적절한 매개 변수 설정으로 인해 트렌드가 누락되거나 유효하지 않은 거래가 너무 많을 수 있습니다.

  3. 잘못된 스톱 로스 투입이 손실을 증가시킬 수 있습니다.

  4. 실패한 탈출은 손실을 초래할 수 있습니다.

  5. 매개 변수들은 시장 변화에 맞춰 적시에 조정되어야 합니다.

솔루션은 매개 변수를 최적화하고, 다른 필터를 통합하고, 스톱을 조정하고, 거래 전에 트렌드 확인을 기다립니다.

최적화 방향

이 전략은 다음과 같이 개선될 수 있습니다.

  1. 트렌드 결정 메커니즘을 개발하고 트렌드 확인 후만 거래합니다.

  2. 부피나 변동성 같은 필터를 필터 신호에 추가합니다.

  3. 이동 평균 기간의 동적 최적화

  4. 트레일링 스톱을 사용하도록 스톱 손실 메커니즘을 최적화합니다.

  5. 지원/저항 및 다른 지표를 포함하여 신호를 더 확인합니다.

  6. 다른 제품과 시간 프레임에 따라 매개 변수를 조정합니다.

결론

전체적으로이 이동 평균 크로스오버 전략은 단순하고 실용적인 트렌드 다음 시스템입니다. 매개 변수를 조정하여 시장 조건에 조정하고 트렌드 시장의 주요 트렌드 방향을 잡을 수 있습니다. 그러나 트렌드 잘못된 식별과 같은 위험이 주목되어야하며 변화하는 시장에 적응하기 위해 지속적인 최적화가 필요합니다. 일반적으로이 전략은 좋은 생존력을 가지고 있습니다.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TwoChiefs

//@version=4
strategy("John EMA Crossover Strategy", overlay=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

//CREATE USER-INPUT VARIABLES

periodShort = input(13, minval=1, title="Enter Period for Short Moving Average")
smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodLong = input(48, minval=1, title="Enter Period for Long Moving Average")
smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])

periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average")
smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"])


src1 = close
pivot = (high + low + close) / 3

//MA CALCULATION FUNCTION
ma(smoothing, src, length) => 
    if smoothing == "RMA"
        rma(src, length)
    else
        if smoothing == "SMA"
            sma(src, length)
        else 
            if smoothing == "EMA"
                ema(src, length)
            else 
                if smoothing == "WMA"
                    wma(src, length)
				else
					if smoothing == "VWMA"
						vwma(src, length)
					else
						if smoothing == "SMMA"
							na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length
						
						else
							if smoothing == "HullMA"
								wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))




//ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE
shortMA=ma(smoothingShort, pivot, periodShort)
longMA=ma(smoothingLong, pivot, periodLong)
exitMA=ma(smoothingExit, pivot, periodExit)

//PLOT THOSE VARIABLES
plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average")
plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average")
plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average")



//BUY STRATEGY
buy = crossover(shortMA,longMA) ? true : na
exit = crossunder(close,exitMA) ? true : na


strategy.entry("long",true,when=buy and time_cond)
strategy.close("long",when=exit and time_cond)


if (not time_cond)
    strategy.close_all()


더 많은