Стратегия пересечения скользящей средней является очень классической и широко используемой стратегией технического анализа. Основная идея этой стратегии состоит в том, чтобы использовать пересечение между скользящими средними различных периодов в качестве торговых сигналов. Когда краткосрочная скользящая средняя пересекает выше долгосрочной скользящей средней снизу, генерируется сигнал покупки. Когда краткосрочная скользящая средняя пересекает ниже долгосрочной скользящей средней сверху, генерируется сигнал продажи.
Эта стратегия использует ввод для установки типа (SMA, EMA, WMA, RMA) и периода скользящей средней, а также временного диапазона обратного тестирования.
Различные типы скользящих средних вычисляются в вариантной функции.
Когда цена закрытия пересекает ма, генерируется сигнал покупки. Когда цена закрытия пересекает ма, генерируется сигнал продажи.
Для установки стоп-лосса рассчитывается 14-периодный средний истинный диапазон atr.
Конкретная логика входа и выхода выглядит следующим образом:
Длинный вход: близкий пересекается над ma и в пределах временного диапазона обратного теста, точка остановки потери - точка входа близка
Длинный выход: закрытие перекрестков ниже ma минус 2 раза atr для выхода стоп-лосса или максимальная цена превышает точку входа закрытие плюс 2 раза atr для выхода take profit
Короткий вход: закрытие перекресток ниже ma и в пределах временного диапазона обратного теста, точка остановки потери - точка входа близка
Краткий выход: закрытие перекрестков выше ma плюс 2 раза atr для выхода стоп-лосса или закрытие с минимальной ценой ниже точки входа минус 2 раза atr для выхода с прибылью.
Для устранения рисков можно оптимизировать следующие аспекты:
Эта стратегия может быть оптимизирована в следующих аспектах:
Стратегия кроссовера скользящей средней является очень типичной и широко используемой стратегией технического анализа. Основная идея стратегии проста и проста в реализации, подходит для различных рынков, и является одной из стратегий квантовой торговли начального уровня. Однако стратегия также имеет некоторые проблемы, такие как генерация частых сигналов и склонность к остановке потерь. При надлежащей оптимизации производительность может быть значительно улучшена. В целом стратегия кроссовера скользящей средней обеспечивает очень хорошую основу для разработки стратегии и является краеугольным камнем количественного обучения стратегии торговли.
/*backtest start: 2023-10-03 00:00:00 end: 2023-11-02 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("MA Cross Strategy", overlay=true,commission_value = 0.1) type = input(defval = "WMA", title = "MA Type: ", options=["RMA", "SMA", "EMA", "WMA"]) length = input(28) source = close // === INPUT BACKTEST RANGE === FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2000, title = "From Year", minval = 2000) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(9999, 1, 1, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" variant(type, src, len) => v1 = sma(src, len) // Simple v2 = ema(src, len) // Exponential v5 = wma(src, len) // Weighted v7 = rma(src, len) // Smoothed type=="EMA"?v2 : type=="WMA"?v5 : type=="RMA"?v7 : v1 ma = variant(type,source, length) atr = security(syminfo.tickerid, "D", atr(14)) range = valuewhen(cross(close,ma), (atr*2), na) ep = valuewhen(cross(close,ma), close, na) plot(ma,color=ma>ma[1]?color.blue:color.red,transp=0,linewidth=1) plot(ep,color=#2196f3,transp=100,trackprice=true, offset=-9999) plot(ep+range,color=#2196f3,transp=100,trackprice=true, offset=-9999) plot(ep-range,color=#2196f3,transp=100,trackprice=true, offset=-9999) strategy.entry("Long Entry", true, when = crossover(close,ma) and window() , stop = ep ) strategy.exit("Long Exit", "Long Entry", stop = ep-range) strategy.exit("Long Exit", "Long Entry", when = high > ep+range ,stop = ep[1] ) strategy.entry("Short Entry", false, when = crossunder(close,ma) and window() , stop = ep ) strategy.exit("Short Exit", "Short Entry", stop = ep+range) strategy.exit("Short Exit", "Short Entry", when = low < ep-range ,stop = ep[1] )