Это простая стратегия, основанная на скользящей средней, которая хорошо работает с различными парами монет. Она графизирует скользящую среднюю цену открытия и цену закрытия и решает, ввести длинную позицию или выйти из нее, основываясь на том, пересекают ли две линии друг друга. Идея заключается в том, что она входит в позицию, когда средняя цена закрытия растет, что может указывать на подъем цен. Затем она выходит из позиции, когда средняя цена закрытия снижается, что может указывать на падение импульса. Это спекулятивно, но иногда она может очень хорошо предсказать ценовое движение.
Эта стратегия сначала выбирает тип скользящей средней, включая 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)