이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-11-07 15:48:41
태그:

img

전반적인 설명

이동 평균 크로스오버 전략은 매우 고전적인 기술 분석 전략이다. 이 전략은 낮은 가격으로 구매하고 높은 가격으로 판매하는 목표를 달성하기 위해 다른 기간의 이동 평균을 계산하고 그 크로스오버를 관찰하여 시장의 흐름을 결정한다. 이 전략은 중장기 거래에 적합하며 시장 소음을 효과적으로 필터하고 트렌드를 식별할 수 있다.

원칙

이 전략은 주로 10 일 간 간단한 이동 평균 (SMA) 과 10 일 간 삼각형 이동 평균 (TRIMA) 을 계산합니다. SMA가 TRIMA를 넘을 때, 시장 트렌드가 하락에서 상승으로 변했다는 것을 나타내는 구매 신호가 생성되며, 우리는 구매할 수 있습니다. SMA가 TRIMA를 넘을 때, 시장 트렌드가 상승에서 하락으로 변했다는 것을 나타내는 판매 신호가 생성됩니다.

구체적으로, 전략은 먼저 종료 가격을 입력하고 SMA와 TRIMA를 계산하는 주기의 길이를 정의합니다. SMA의 계산 공식은:

SMA = (P1 + P2 +... + Pn) / n

여기서 Pn는 지난 n 일간의 종료 가격입니다.

TRIMA의 계산 공식은 다음과 같습니다.

TRIMA = (SMA1 + SMA2 + SMA3) / 3

여기서 SMA1, SMA2, SMA3는 각각 지난 n 일 동안의 종료 가격의 SMA입니다.

그래서 TRIMA는 실제로 SMA 위에 계산된 SMA입니다. 이것은 더 나은 평형 효과를 가지고 있습니다. 단기 SMA가 장기 TRIMA를 넘을 때, 그것은 단기 이동 평균의 돌파구를 나타냅니다. 우리는 구매할 수 있습니다. 반대로, SMA가 TRIMA 아래로 넘을 때, 그것은 단기 이동 평균 아래의 붕괴를 나타냅니다. 우리는 판매 할 수 있습니다.

장점

이 전략의 가장 큰 장점은 이동평균의 트렌드 판단 능력을 활용하여 시장 트렌드를 효과적으로 파악하고 단기 시장 소음을 필터링하여 낮은 가격으로 구매하고 높은 가격으로 판매하는 것입니다. 단일 이동평균과 비교하여 SMA와 TRIMA의 조합은 돌파구의 신뢰성을 향상시키고 잘못된 돌파구의 가능성을 줄일 수 있습니다. 또한 이동평균 자체는 좋은 매끄러움을 가지고 있으며, 단일 스톱 손실의 확률을 줄이기 위해 스톱 손실의 역할을 할 수 있습니다. 일반적으로이 전략은 중장기 거래에 매우 적합합니다.

위험성

이 전략의 주요 위험은 이동 평균 자체가 가격 변화에 뒤떨어질 수 있기 때문에 트렌드의 초기 단계를 놓치고 늦게 진입할 수 있습니다. 또한 시장이 명백한 트렌드가 없을 때이 전략은 더 많은 잘못된 돌파구를 만들어 낼 것입니다. 마지막으로 이동 평균 전략은 매개 변수 최적화에 더 의존합니다. 매개 변수가 올바르게 설정되지 않으면 전략에도 큰 영향을 줄 것입니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 과학적으로 가장 좋은 조합을 찾기 위해 이동 평균의 사이클 매개 변수를 최적화하십시오.

  2. 거래량이 낮을 때 잘못된 신호를 피하기 위해 거래량과 같은 필터링 지표를 추가합니다.

  3. MACD와 같은 트렌드 지표를 결합하여 지역 트렌드를 판단하고 통합 시장에서 빈번한 거래를 피하십시오.

  4. 시장이 특정 단계로 진입할 때 주기 매개 변수를 동적으로 조정하기 위해 적응 가능한 이동 평균을 채택합니다.

  5. 복수의 시간 프레임으로 확인합니다. 예를 들어, 일일 및 4시간 라인이 통과할 때만 입국을 고려하는 것 처럼요.

요약

이동평균 크로스오버 전략은 중장기 포지션 거래에 매우 적합한 간단하고 실용적인 기술 분석 전략이다. 트렌드 방향을 효과적으로 파악할 수 있다. 그러나 또한 일정 차질을 가지고 있으며, 잘못된 신호의 확률을 줄이기 위해 트렌드 판단 지표로 필터링 및 최적화되어야 한다. 매개 변수들이 적절하게 최적화되면 자본을 보호하고 더 큰 트렌드 기회를 포착할 수 있다. 전략 아이디어로 연구하고 적용할 가치가 있다.


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

//TMA strategy I came across, uses sma to display entry/exit points for both margin and non margin trading. The buy/sell signals as well as syntax are hidden behind comments if you scroll down.
//Change the commented fields for margin or spot trading!
//@version=3
strategy("MP Rollercoaster Strat", overlay=true)

bgcolor ( color=black, transp=0, title='Blackground', editable=true)

x = input(close, "Red")
n = input(10, "periods")
trima = sma(sma(x,n), n)

kisa=input(5, "Green")
sma = sma(close, kisa)

bull = (sma>trima)
fill(plot(sma, color = green), plot(trima, color=red), bull ? green : red)

//Conditions
buy_signal = crossover(sma,trima)
sell_signal = crossunder(sma,trima)

plotshape(sell_signal, style=shape.triangleup, color = red, text="Short")
plotshape(buy_signal, style=shape.triangledown, color = green, text="Long")
//plotshape(sell_signal, style=shape.triangleup, color = red, text="Sell")
//plotshape(buy_signal, style=shape.triangledown, color = green, text="Buy")

alertcondition(sell_signal, title = 'Short', message = 'e= s= c=position b=long t=market l= | delay=30 | e= s= b=short l= t=market q=0.01')
alertcondition(buy_signal, title = 'Long', message =  'e= s= c=position b=short t=market l= | delay=30 | e= s= b=long l= t=market q=0.01')

//alertcondition(sell_signal, title = 'Sell', message = 'e= s= c=order b=buy | delay=3 | e= b=sell q=99% p=0.70% u=currency')
//alertcondition(buy_signal, title = 'Buy', message =  'e= s= c=order b=sell | delay=30 | e= b=buy q=80 p=0.1% u=currency')

testStartYear = input(2018, "From Year") 
testStartMonth = input(4, "From Month")
testStartDay = input(1, "From Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "To Year")
testStopMonth = input(1, "To Month")
testStopDay = input(1, "To Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

if testPeriod()
    if buy_signal
        strategy.entry("Long", true)
    

    if sell_signal
        strategy.close("Long")

더 많은