Стратегия перекрестного использования быстрых и медленных скользящих средних

Автор:Чао Чжан, Дата: 2024-02-27 16:06:30
Тэги:

img

Обзор

Стратегия быстрого и медленного скользящего среднего кроссовера - это простая стратегия, основанная на скользящем среднем. Она использует два скользящих средних, один быстрый и один медленный. Когда быстрое скользящее среднее пересекает верх медленного скользящего среднего снизу, оно длинно, что указывает на то, что цены могут подняться. Когда быстрое скользящее среднее пересекает нижнее медленного скользящего среднего сверху, оно выходит из своей позиции, что указывает на то, что цены могут упасть. Это может служить индикатором для прогнозирования будущих ценовых действий.

Принципы

Стратегия использует два скользящих средних, один быстрый и один медленный. В частности, длины по умолчанию составляют 25 периодов для быстрого скользящего среднего и 62 периода для медленного. Стратегия позволяет выбирать различные типы скользящих средних, включая SMA, EMA, WMA, RMA и VWMA.

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

Используя перекресток быстрых и медленных скользящих средних для определения тенденции и направления цены, и принимая соответствующие длинные или закрытые позиции, можно реализовать прибыль.

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

Стратегия имеет следующие преимущества:

  1. Идея проста и легко понять и реализовать
  2. Гибкие параметры с настраиваемыми периодами и типами скользящих средних
  3. Достоверный показатель, точно определяющий ценовые тенденции с использованием скользящей средней перекрестности
  4. Автоматизация реализована, уменьшая влияние психологических факторов без ручного суждения
  5. Применяется для нескольких продуктов, может широко использоваться для индексов, форекс, криптовалют и т.д.
  6. Легко оптимизировать, параметры могут быть настроены, чтобы найти лучшие конфигурации
  7. Сильная расширяемость, может быть объединена с другими показателями или стратегиями

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

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

Стратегия также сопряжена с некоторыми потенциальными рисками:

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

Для контроля и смягчения этих рисков могут быть приняты следующие методы:

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

Руководство по оптимизации

К основным направлениям оптимизации стратегии относятся:

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

  2. Выбор типов скользящих средних: предоставлено несколько типов и можно проверить, какой из них лучше всего подходит для конкретных продуктов

  3. Комбинация с другими показателями или стратегиями: можно попробовать комбинировать с показателями волатильности, показателями объема цен или стратегиями тенденционного отслеживания для улучшения эффективности

  4. Адаптивная оптимизация параметров: позволяет автоматически корректировать периоды скользящих средних на основе волатильности рынка и ликвидности для повышения стабильности

  5. Помощь модели ИИ: используйте алгоритмы машинного обучения для анализа большого количества данных и автоматического поиска оптимальных правил торговли

Благодаря этим методам оптимизации можно ожидать дальнейшего улучшения рентабельности и стабильности стратегии.

Резюме

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


/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Fast v Slow Moving Averages Strategy', shorttitle = 'Fast v Slow', 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----------------------------------------------------------------

fastBars = input.int(25, "Fast moving average length", minval=1)
slowBars = input.int(62, "Slow moving average length", minval=1)
strategy = input.string("EMA", "MA type", options = ["EMA", "VWMA", "SMA", "RMA", "WMA"])

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, fastBars) >= ta.ema(close, slowBars)) ? 1 : -1
    "SMA" => (ta.sma(close, fastBars) >= ta.sma(close, slowBars)) ? 1 : -1
    "RMA" => (ta.rma(close, fastBars) >= ta.rma(close, slowBars)) ? 1 : -1
    "WMA" => (ta.wma(close, fastBars) >= ta.wma(close, slowBars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, fastBars) >= ta.vwma(close, slowBars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

fastMA = switch strategy
    "EMA" => ta.ema(close, fastBars)
    "SMA" => ta.sma(close, fastBars)
    "RMA" => ta.rma(close, fastBars)
    "WMA" => ta.wma(close, fastBars)
    "VWMA" => ta.vwma(close, fastBars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
slowMA = switch strategy
    "EMA" => ta.ema(close, slowBars)
    "SMA" => ta.sma(close, slowBars)
    "RMA" => ta.rma(close, slowBars)
    "WMA" => ta.wma(close, slowBars)
    "VWMA" => ta.vwma(close, slowBars)
    =>
        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" ? fastMA : na, title = "Fast Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
plot(series = maOn == "On" ? slowMA : na, title = "Slow Moving Average", color = color.new(color.purple,0), linewidth=3, 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)

Больше