이중 이동 평균 역전 거래 전략

저자:차오장, 날짜: 2023-10-16 15:50:35
태그:

img

전반적인 설명

이중 이동 평균 역전 거래 전략은 단기 및 장기 두 가지 다른 기간의 간단한 이동 평균을 계산하여 거래 신호를 생성합니다. 단기 이동 평균이 긴 기간 이동 평균을 넘어서면 긴 기간 이동 평균을 넘어서면 짧은 기간 이동 평균이 긴 기간 이동 평균을 넘어서면 짧습니다. 이 전략은 트렌드 다음 전략 범주에 속합니다.

전략 논리

이 전략은 입력 매개 변수를 통해 서로 다른 기간 길이를 가진 두 가지 간단한 이동 평균을 설정하며, 짧은 기간 MA는 빠른 라인과 긴 기간 MA는 느린 라인으로 지칭됩니다. 빠른 라인은 가격 변화에 더 빨리 반응하고 단기 트렌드를 캡처하고 느린 라인은 가격 변화에 더 느리게 반응하고 단기 시장 소음을 필터하여 주요 트렌드를 캡처합니다. 빠른 라인이 느린 라인의 위를 넘을 때 상승 추세가 강화되고 긴 포지션을 취하고 있음을 나타냅니다. 빠른 라인이 느린 라인의 아래에 넘을 때 하락 추세가 강화되고 짧은 포지션을 취한다는 것을 나타냅니다.

구체적으로, 전략은 두 MAs를 sma ((() 함수를 사용하여 계산하여 xSMA (슬로우 라인) 및 패스트 라인) 에 결과를 부여합니다. MAs는 클로즈 가격에 따라 계산됩니다. 클로즈 가격이 xSMA를 넘을 때 긴 포지션을 취합니다. 클로즈 가격이 xSMA를 넘을 때 짧은 포지션을 취합니다. 전략은 또한 거래 시간 범위 한계를 설정하여 지정된 시간 범위 내에서만 거래 신호가 생성됩니다.

수익을 취하고 손실을 멈추는 지점은 각 거래에 설정되며, 가격이 수익을 취하거나 손실을 멈추는 수준에 도달하면 즉시 수익이 취하거나 손실을 멈추게됩니다. 한편, 전략은 바를 사용하여 바에 대한 가격 대 MA 관계를 그래프화합니다. 바는 긴 위치 중 녹색, 짧은 위치 중 빨간색, 평평한 경우 파란색입니다.

이점 분석

  • 듀얼 MA 시스템을 사용하면 동향을 효과적으로 추적하고 단기 시장 소음으로 오해되는 것을 피할 수 있습니다.
  • 빠른 MA와 느린 MA를 결합하면 거래 신호 품질을 향상시킬 수 있습니다.
  • 각 거래에 대한 수익 및 스톱 손실 포인트 제어 위험
  • 거래 시간 범위의 제한은 주요 이벤트에 대한 거대한 변동을 피합니다.
  • 바에 상거래 신호를 표시하는 것은 시각적 보조를 만들고 직관성을 향상시킵니다.

위험 분석

  • 이중 MA 시스템은 더 많은 잘못된 신호를 생성하는 경향이 있으며 거래 빈도와 비용을 증가시킵니다.
  • MA 매개 변수 는 합리적으로 설정 해야 합니다. 그렇지 않으면 평형 효과 가 약화 되거나 너무 많은 기회를 놓칠 수 있습니다.
  • MA 시스템은 지연을 가지고 있으며 트렌드 전환점을 놓칠 수 있습니다.
  • 일정한 취득/손실 중지가 너무 무작위일 수 있고 동적으로 조정할 수 없습니다.
  • 거래 시간 범위를 제한하면 다른 기간에서의 기회를 놓칠 수 있습니다.

위험은 MA 매개 변수를 조정하고, 수익/손실 전략을 최적화하고, 시간 제한을 제거하거나 더 합리적인 거래 기간을 설정함으로써 감소 할 수 있습니다. 너무 많은 잘못된 신호를 피하기 위해 필터 조건으로 다른 지표도 포함될 수 있습니다.

최적화 방향

  • 최적의 매개 변수를 찾기 위해 다양한 MA 기간 조합을 테스트합니다.
  • 동적 트레일링 스톱 로스/이익을 고려합니다. 예를 들어 ATR을 기반으로 합니다.
  • 필터 신호로 MACD, KD 등과 같은 다른 지표를 포함
  • 더 많은 기회를 잡기 위해 거래 시간 범위를 최적화
  • MAs 주변에서 탈출 신호를 찾고, 탈출 전략과 결합
  • 동적인 출구 메커니즘을 구축하고, 가격이 범위에 들어갈 때 적극적으로 중단

요약

이중 이동 평균 역전 거래 전략은 전반적으로 간단하고 실용적인 트렌드 다음 전략입니다. 트렌드 방향을 식별하기 위해 MAs의 평형 효과를 최대한 활용하고 트렌드 신호를 생성하기 위해 빠른 / 느린 MAs를 사용합니다. 전략은 명확한 논리로 구현하기 쉽고 초보자도 이해할 수 있습니다. 그러나 과도한 잘못된 신호와 지연 문제를 발생시킬 수 있습니다. 전략을 더 견고하게 만들기 위해 매개 변수 최적화, 보조 지표 등을 추가하여 개선이 가능합니다. 올바르게 사용되면이 전략은 안정적인 수익을 창출 할 수 있으며 포괄적 인 테스트 및 최적화에 가치가 있습니다.


/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
basePeriod: 15m
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/
// © HPotter
//  Simple SMA strategy
//
// WARNING:
//      - For purpose educate only
//      - This script to change bars colors
//@version=4
timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0

strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
timeframe = input(title="Time Frame", defval="15")
timerange = input(title="Time Range", defval="2300-0800")
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
         iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
         iff(reverse and pos == 1, -1,
           iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1 and timeinrange(timeframe, timerange))
    strategy.entry("Long", strategy.long)
if (possig == -1 and timeinrange(timeframe, timerange))
    strategy.entry("Short", strategy.short)
if (timeinrange(timeframe, timerange) == 0) 
    strategy.close_all()

if (UseTPSL)    
    strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
    strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
    strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
    strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0  and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)

더 많은