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

Автор:Чао Чжан, Дата: 2024-01-03 16:22:18
Тэги:

img

Обзор

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

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

Стратегия использует две скользящие средние, 20-периодную простую скользящую среднюю и 30-периодную простую скользящую среднюю. Когда 20-периодный MA пересекает 30-периодный MA, генерируется сигнал покупки. Когда 20-периодный MA пересекает 30-периодный MA, запускается сигнал продажи.

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

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

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

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

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

К основным рискам этой стратегии относятся:

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

Решения:

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

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

Основные аспекты оптимизации стратегии:

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

Заключение

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


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
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)

Больше