이 전략은 다른 동전 쌍과 함께 잘 작동하는 간단한 이동 평균 기반 전략이다. 이동 평균 오픈 가격과 종료 가격을 그래프화하고 두 라인이 서로 교차했는지 여부에 따라 긴 포지션을 입력하거나 종료하기로 결정합니다. 아이디어는 평균 종료 가격이 증가 할 때 포지션을 입력하여 가격의 상승 동력을 나타낼 수 있습니다. 평균 종료 가격이 감소 할 때 포지션을 종료하여 하락 동력을 나타낼 수 있습니다. 이것은 투기적이지만 때로는 가격 행동을 매우 잘 예측할 수 있습니다.
이 전략은 먼저 EMA, SMA, RMA, WMA 및 VWMA를 포함한 이동 평균의 유형을 선택합니다. 그런 다음 이동 평균의 룩백 기간을 설정합니다. 일반적으로 10 ~ 250 바 사이입니다. 이동 평균 유형과 룩백 기간의 다른 조합은 다른 동전 쌍에서 매우 다른 결과를 얻을 수 있습니다.
구체적인 거래 논리는 다음과 같습니다.
포지션에 진입하면 상승 가격 움직임의 신호로 간주되며 종료하면 하락 가격 움직임으로 간주됩니다.
이 전략의 주요 장점은 다음과 같습니다.
이 전략에는 몇 가지 위험도 있습니다.
솔루션과 최적화:
요약하자면, 이것은 가격 추세와 굴곡점을 결정하기 위해 이동 평균 지표를 사용하는 간단한 전략입니다. 매개 변수를 조정함으로써 매우 좋은 결과를 얻을 수 있으며, 추가 개선 및 적용 가치가있는 효과적인 트렌드 추적 전략입니다. 그러나 위험 관리는 주목해야하며, 적절한 동전 쌍과 매개 변수를 선택하여 유용성을 극대화해야합니다.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //Author @divonn1994 initial_balance = 100 strategy(title='Close v Open Moving Averages Strategy', shorttitle = 'Close v Open', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance) //Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading---------------------------------------------------------------- bars = input.int(66, "Moving average length (number of bars)", minval=1, group='Strategy') //66 bars and VWMA for BTCUSD on 12 Hours.. 35 bars and VWMA for BTCUSD on 1 Day strategy = input.string("VWMA", "Moving Average type", options = ["EMA", "SMA", "RMA", "WMA", "VWMA"], group='Strategy') redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display') greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display') maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display') startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy') startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy') startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy') endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy') endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy') endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy') //Strategy Calculations----------------------------------------------------------------------------------------------------------------------------------------------------------------------- inDateRange = true maMomentum = switch strategy "EMA" => (ta.ema(close, bars) > ta.ema(open, bars)) ? 1 : -1 "SMA" => (ta.sma(close, bars) > ta.sma(open, bars)) ? 1 : -1 "RMA" => (ta.rma(close, bars) > ta.rma(open, bars)) ? 1 : -1 "WMA" => (ta.wma(close, bars) > ta.wma(open, bars)) ? 1 : -1 "VWMA" => (ta.vwma(close, bars) > ta.vwma(open, bars)) ? 1 : -1 => runtime.error("No matching MA type found.") float(na) openMA = switch strategy "EMA" => ta.ema(open, bars) "SMA" => ta.sma(open, bars) "RMA" => ta.rma(open, bars) "WMA" => ta.wma(open, bars) "VWMA" => ta.vwma(open, bars) => runtime.error("No matching MA type found.") float(na) closeMA = switch strategy "EMA" => ta.ema(close, bars) "SMA" => ta.sma(close, bars) "RMA" => ta.rma(close, bars) "WMA" => ta.wma(close, bars) "VWMA" => ta.vwma(close, bars) => runtime.error("No matching MA type found.") float(na) //Enter or Exit Positions-------------------------------------------------------------------------------------------------------------------------------------------------------------------- if ta.crossover(maMomentum, 0) if inDateRange strategy.entry('long', strategy.long, comment='long') if ta.crossunder(maMomentum, 0) if inDateRange strategy.close('long') //Plot Strategy Behavior--------------------------------------------------------------------------------------------------------------------------------------------------------------------- plot(series = maOn == "On" ? openMA : na, title = "Open moving Average", color = color.new(color.purple,0), linewidth=3, offset=1) plot(series = maOn == "On" ? closeMA : na, title = "Close Moving Average", color = color.new(color.white,0), linewidth=2, offset=1) bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)