이중 이동 평균 전략은 일반적으로 사용되는 단기 거래 전략이다. 그것은 다른 기간의 이동 평균을 계산하여 시장 트렌드 방향을 판단하고 거래를 입력하는 데 사용합니다. 짧은 기간 이동 평균이 긴 기간 이동 평균을 넘으면 길게 가십시오. 짧은 기간 이동 평균이 긴 기간 이동 평균을 넘으면 짧게 가십시오.
이 전략의 핵심 논리는 다음과 같습니다.
다른 기간의 두 개의 이동 평균을 계산합니다. 하나는 긴 기간 MA, 다른 하나는 짧은 기간 MA입니다. 여기서 개시 가격과 종료 가격 MA가 사용됩니다.
짧은 기간 MA가 긴 기간 MA를 넘었는지 판단합니다. 짧은 기간 MA가 긴 기간 MA를 넘으면 시장의 상승 추세를 나타냅니다. 우리는 긴 기간 MA를 넘으면 하락 추세를 나타냅니다.
트렌드 방향에 따라 거래를 입력하십시오. 구체적으로, 짧은 기간 MA가 긴 기간 MA를 넘을 때, 길게 가십시오. 짧은 기간 MA가 긴 기간 MA를 넘을 때, 짧게 가십시오.
실제 시장 조건에 따라 스톱 로스를 설정하고 수익을 취합니다.
이 전략은 단기적 추세를 파악하기 위해 MAs의 추세 판단 능력을 활용하여 단기적 추세와 장기적 추세 사이의 관계를 결정합니다. 논리는 간단하고 명확하며, 추세 지속과 역전 사이의 리듬 전환을 판단하고 이를 기반으로 거래를하는 MA 교차를 사용합니다.
이중 MA 전략은 다음과 같은 장점을 가지고 있습니다.
이 논리는 간단하고 이해하기 쉽고 실행하기 쉽습니다.
진입과 출입 기준이 명확합니다.
MA 기간은 다른 시장 환경에 적응하도록 조정할 수 있습니다.
트렌드와 평균 반전을 모두 파악하여 중장기 움직임을 통해 이익을 얻을 수 있습니다.
위험을 통제하기 위해 스톱 로스 로직이 있습니다.
또한 이중 MA 전략에는 몇 가지 위험이 있습니다.
스톱 로즈는 범위 시장에서 자주 실행될 수 있습니다.
변동성 시장에서 MA 신호가 너무 자주 발생하여 포지션을 유지하는 것이 어려울 수 있습니다.
MAs 자체는 지연을 가지고 있으며 단기적 역전 기회를 놓칠 수 있습니다.
MA 기간은 전략의 효과를 위해 최적화되어야 합니다.
MA 크로스에는 약간의 지연이 있어, 지연된 입력으로 인해
이 전략을 개선 할 수있는 몇 가지 방법:
역 테스트를 통해 다른 시장 조건에 대한 MA 기간을 최적화합니다.
다른 지표를 필터로 추가하여 범위 시장에서 휘프사를 피할 수 있습니다. MACD, KD가 고려 될 수 있습니다.
트렌드 강도 지표를 추가하여 명확한 트렌드가 없을 때 거래를 피합니다. EMA 및 유사한 지표를 테스트합니다.
부피 지표를 고려하여 격차 방향을 판단하십시오.
주요 지지/저항 수준 근처에서 스톱 손실을 최적화합니다.
이중 MA 전략은 트렌드를 결정하기 위해 MA 교차를 기반으로 한 간단한 단기 전략이다. 장점은 단순함과 사용 편리함이다. 단점은 시장의 범위에 의해 윙싱 될 수 있으며 지연을 가지고 있다는 것입니다. 복잡한 시장 환경에 더 견고하게 만들기 위해 매개 변수 조정, 필터 등을 추가하여 최적화 할 수 있습니다.
/*backtest start: 2022-10-26 00:00:00 end: 2023-11-01 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("GetTrendStrategy timing", overlay=true) tim=input('370') ////////////////////////////////////////////////////////////////////// // Component Code Start testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(10, "Backtest Start Month") testStartDay = input(25, "Backtest Start Day") testStartHour = input(7, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0) testStopYear = input(2017, "Backtest Stop Year") testStopMonth = input(10, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testStopHour = input(13, "Backtest stop Hour") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStartHour,0) testPeriod() => true // Component Code Stop ////////////////////////////////////////////////////////////////////// out1 = request.security(syminfo.tickerid, tim, open) out2 = request.security(syminfo.tickerid, tim, close) plot(out1,color=red) plot(out2,color=green) longCondition = crossover(request.security(syminfo.tickerid, tim, close),request.security(syminfo.tickerid, tim, open)) if testPeriod() if (longCondition) strategy.entry("long", strategy.long) shortCondition = crossunder(request.security(syminfo.tickerid, tim, close),request.security(syminfo.tickerid, tim, open)) if testPeriod() if (shortCondition) strategy.entry("short", strategy.short)