Стратегия отслеживания тенденций перемещения скользящего среднего

Автор:Чао Чжан, Дата: 2024-01-29 16:52:46
Тэги:

img

Обзор

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

Логика стратегии

Эта стратегия сначала выбирает тип скользящей средней, включая EMA, SMA, RMA, WMA и VWMA. Затем она устанавливает период обратного отсчета для скользящей средней, обычно от 10 до 250 бар. Различные комбинации типа скользящей средней и периода обратного отсчета могут давать очень разные результаты для разных пар монет.

Конкретная логика торговли:

  1. Расчет скользящего среднего показателя открытой и закрытой цены;
  2. Сравните скользящие средние значения между ценой закрытия и ценой открытия;
  3. Ввести длинную позицию, если скользящая средняя цена закрытия пересекает скользящую среднюю цену открытия;
  4. Закрыть длинную позицию, если скользящая средняя цена закрытия превышает скользящую среднюю цену открытия.

Вход в позицию считает ее признаком движения цены вверх, а выход - движение цены вниз.

Анализ преимуществ

Основными преимуществами этой стратегии являются:

  1. гибкие параметры, которые могут быть оптимизированы для различных пар монет для повышения специфичности;
  2. Простая логика, которую легко понять и реализовать;
  3. Очень высокая доходность, достижимая для некоторых монетных пар, в целом хорошая стабильность;
  4. Высокая настраиваемость при отображении различных показателей.

Анализ рисков

Эта стратегия также сопряжена с некоторыми рисками:

  1. Для некоторых монетных пар и параметров доходность и стабильность могут быть низкими;
  2. Не может хорошо реагировать на краткосрочные колебания цен, плохая производительность для монет с высокой волатильностью;
  3. Выбор скользящего среднего периода отсчета недостаточно научный, несколько субъективный.

Решения и оптимизация:

  1. Использовать более длительные временные рамки, такие как 12H, 1D, чтобы уменьшить ненужные сделки и улучшить стабильность;
  2. Добавление функций оптимизации параметров для автоматического тестирования различных комбинаций параметров на лучшие параметры;
  3. Добавьте адаптивный выбор скользящей средней обратной связи, чтобы система автоматически решала оптимальный период.

Заключение

В общем, это простая стратегия, использующая движущиеся средние показатели для определения ценовой тенденции и точек перегиба. Она может достичь очень хороших результатов путем корректировки параметров, и является эффективной стратегией отслеживания тренда, которая стоит дальнейшего улучшения и применения. Но следует отметить, что управление рисками, выбирать подходящие пары монет и параметры для максимизации его полезности.


/*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)

Больше