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


Дата создания: 2023-09-18 17:35:37 Последнее изменение: 2023-09-18 17:35:37
Копировать: 0 Количество просмотров: 688
1
Подписаться
1617
Подписчики

Обзор

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

Стратегический принцип

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

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

  2. Если вы проходите медленную линию на быстрой линии, делайте больше; если вы проходите медленную линию на быстрой линии, делайте равновесие.

  3. В качестве торгового сигнала можно выбрать прорыв средней линии или пересечение средней линии.

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

  5. На рынке с большим количеством точек можно сделать только больше, на рынке с пустым точкой - только пусто.

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

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

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

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

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

  2. Это позволяет эффективно отслеживать тенденции и своевременно ловить возможности для покупки и продажи.

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

  4. Вы можете выбрать только больше или только пусто, чтобы избежать неопределенной обратной операции.

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

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

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

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

  1. Необходимо избегать слишком частых сделок, так как они могут создавать ложные сигналы.

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

  3. Некоторые задержки должны предотвратить преждевременный вход и поздний выход.

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

  5. Сравнительная линия имеет некоторую случайность и не может полностью избежать убытков.

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

Направление оптимизации

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

  1. Добавить /% ((Line - ShortMa) /ShortMa) / ((Line - 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)