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

Автор:Чао Чжан, Дата: 2023-09-18 17:35:37
Тэги:

Обзор

Стратегия пересечения скользящей средней - это стратегия, основанная на пересечении скользящей средней в качестве торговых сигналов.

Принцип стратегии

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

  1. Вычислить два скользящих средних, один быстрый и один медленный, можно выбрать SMA или EMA.

  2. Длинная позиция, когда быстрая линия пересекается над медленной линией, близкая позиция, когда быстрая линия пересекается ниже медленной линии.

  3. Можно выбрать ценовой прорыв или скользящий средний кроссовер в качестве торговых сигналов.

  4. Может установить временной период для исполнения стратегии.

  5. Можно только идти длинный на бычьем рынке и только идти короткий на медвежьем рынке.

  6. Оптимизировать параметры скользящей средней через обратное тестирование для разных периодов.

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

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

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

  1. Простые принципы, простые в реализации, ясные торговые сигналы.

  2. Может эффективно отслеживать тенденции и своевременно отслеживать торговые возможности.

  3. Может объединять различные параметры MA для различных рыночных условий.

  4. Могут выбирать только длинные или только короткие, чтобы избежать неопределенных обратных операций.

  5. Может установить стратегию времени выполнения, чтобы избежать определенных периодов.

  6. Может постоянно улучшать стратегию посредством оптимизации параметров.

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

Основные риски этой стратегии:

  1. Склонны к ложным сигналам, избегайте слишком частой торговли.

  2. Производительность зависит от параметров MA, неправильный выбор может привести к потерям.

  3. Есть определенная задержка, избегайте преждевременного входа и задержки выхода.

  4. Не подходит для рыночных условий с ограниченным диапазоном.

  5. Крышки MA имеют некоторую случайность, не могут полностью избежать потерь.

Риски можно снизить путем подтверждения объема, оптимизации параметров или использования с другими показателями.

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

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Добавьте фильтр наклона типа % ((Линия - ShortMa) /ShortMa) / ((Линия - LongMa) /LongMa).

  2. Оптимизируйте периоды скользящей средней, тестируйте различные комбинации.

  3. Добавьте такие индикаторы, как MACD или RSI для многократного подтверждения.

  4. Установите стоп-лосс для ограничения потерь на одной сделке.

  5. Различить трендовые и диапазоны рынков для условного использования.

  6. Испытайте различные периоды хранения, чтобы найти оптимальную схему.

Резюме

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


/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 10m
basePeriod: 1m
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/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time = true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)

Больше