이중 이동 평균 역전 거래 전략은 단기 및 장기 두 가지 다른 기간의 간단한 이동 평균을 계산하여 거래 신호를 생성합니다. 단기 이동 평균이 긴 기간 이동 평균을 넘어서면 긴 기간 이동 평균을 넘어서면 짧은 기간 이동 평균이 긴 기간 이동 평균을 넘어서면 짧습니다. 이 전략은 트렌드 다음 전략 범주에 속합니다.
이 전략은 입력 매개 변수를 통해 서로 다른 기간 길이를 가진 두 가지 간단한 이동 평균을 설정하며, 짧은 기간 MA는 빠른 라인과 긴 기간 MA는 느린 라인으로 지칭됩니다. 빠른 라인은 가격 변화에 더 빨리 반응하고 단기 트렌드를 캡처하고 느린 라인은 가격 변화에 더 느리게 반응하고 단기 시장 소음을 필터하여 주요 트렌드를 캡처합니다. 빠른 라인이 느린 라인의 위를 넘을 때 상승 추세가 강화되고 긴 포지션을 취하고 있음을 나타냅니다. 빠른 라인이 느린 라인의 아래에 넘을 때 하락 추세가 강화되고 짧은 포지션을 취한다는 것을 나타냅니다.
구체적으로, 전략은 두 MAs를 sma ((() 함수를 사용하여 계산하여 xSMA (슬로우 라인) 및 패스트 라인) 에 결과를 부여합니다. MAs는 클로즈 가격에 따라 계산됩니다. 클로즈 가격이 xSMA를 넘을 때 긴 포지션을 취합니다. 클로즈 가격이 xSMA를 넘을 때 짧은 포지션을 취합니다. 전략은 또한 거래 시간 범위 한계를 설정하여 지정된 시간 범위 내에서만 거래 신호가 생성됩니다.
수익을 취하고 손실을 멈추는 지점은 각 거래에 설정되며, 가격이 수익을 취하거나 손실을 멈추는 수준에 도달하면 즉시 수익이 취하거나 손실을 멈추게됩니다. 한편, 전략은 바를 사용하여 바에 대한 가격 대 MA 관계를 그래프화합니다. 바는 긴 위치 중 녹색, 짧은 위치 중 빨간색, 평평한 경우 파란색입니다.
위험은 MA 매개 변수를 조정하고, 수익/손실 전략을 최적화하고, 시간 제한을 제거하거나 더 합리적인 거래 기간을 설정함으로써 감소 할 수 있습니다. 너무 많은 잘못된 신호를 피하기 위해 필터 조건으로 다른 지표도 포함될 수 있습니다.
이중 이동 평균 역전 거래 전략은 전반적으로 간단하고 실용적인 트렌드 다음 전략입니다. 트렌드 방향을 식별하기 위해 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)