클래식 이동 평균 교차 전략


생성 날짜: 2023-11-07 15:48:41 마지막으로 수정됨: 2023-11-07 15:48:41
복사: 0 클릭수: 723
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

클래식 이동 평균 교차 전략

개요

이동 평균 교차 전략은 매우 고전적인 기술 분석 전략이다. 그것은 다양한 주기의 이동 평균을 계산하고, 그들의 교차 상황을 관찰함으로써 시장의 흐름을 판단하여, 낮은 가격과 높은 가격의 판매를 달성하는 목적을 달성한다. 이 전략은 중장선 거래에 적용되며, 시장 소음을 효과적으로 필터링하여, 트렌드를 식별할 수 있다.

원칙

이 전략은 주로 10일 간단한 이동 평균 SMA와 10일 삼각형 이동 평균 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 위에 긴 주기 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")