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

Автор:Чао Чжан, Дата: 2023-11-22 10:07:19
Тэги:

img

Обзор

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

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

  1. Установка краткосрочного скользящего среднего периода shortma (7 дней по умолчанию) и долгосрочного скользящего среднего периода longma (77 дней по умолчанию)
  2. Когда короткий MA пересекает длинный MA, он определяется как сигнал покупки и рекордный бар с момента покупки. Длинный MA подразумевает начало восходящего тренда. Когда короткий MA пересекает длинный MA, он определяется как сигнал продажи и рекордный бар с момента продажи. Длинный MA подразумевает, что восходящий тренд закончился.
  3. Сравните значения барсинта. Чем больше барсинтов с момента пересечения короткого MA вниз, тем дольше сохраняется восходящий тренд. Чем больше барсинтов с момента пересечения короткого MA вверх, тем сильнее сигнал обратного движения.
  4. Когда barsince для сигнала продажи больше barsince для сигнала покупки, сигнал покупки запускается.
  5. По сути, это двойная стратегия обратного движения МА, использующая перекрестные обратные движения быстрых и медленных МА для обнаружения точек обратного движения тренда.

Преимущества

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

Риски

  1. Стратегии двойного MA, как правило, производят более частые торговые сигналы
  2. Плохая настройка параметров MA может пропустить более длительные тенденции
  3. Стоп-лосс при нарушении долгосрочных МР может быть отдаленным, что приводит к увеличению выводов
  4. Не может эффективно фильтровать катушки и колебания

Руководство по улучшению

  1. Добавить другие показатели, чтобы избежать сбоев на различных рынках
  2. Добавление механизмов остановки потерь
  3. Оптимизировать комбинации параметров MA
  4. Динамическая настройка параметров MA на основе рыночного цикла

Резюме

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


/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Up Down", "Up Down", precision = 6, pyramiding = 1, default_qty_type = strategy.percent_of_equity, default_qty_value = 99, commission_type = strategy.commission.percent, commission_value = 0.0, initial_capital = 1000, overlay = true)

buy = close > open and open > close[1]
sell = close < open and open < close[1]

longma = input(77,"Long MA Input")
shortma = input(7,"Short MA Input")
long = sma(close,longma)
short = sma(close, shortma)
mabuy = crossover(short,long) or buy and short > long
masell = crossunder(short,long) or sell and short > long

num_bars_buy = barssince(mabuy)
num_bars_sell = barssince(masell)
//plot(num_bars_buy, color = teal)
//plot(num_bars_sell, color = orange)

xbuy = crossover(num_bars_sell, num_bars_buy)
xsell = crossunder(num_bars_sell, num_bars_buy)
plotshape(xbuy,"Buy Up Arrow", shape.triangleup, location.belowbar, white, size = size.tiny)
plotshape(xsell,"Sell Down Arrow", shape.triangledown, location.abovebar, white, size = size.tiny)
plot(long,"Long MA", fuchsia, 2)

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(7, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

if testPeriod()
    strategy.entry("buy", true, when = xbuy, limit = close)
    strategy.close("buy", when = xsell)


Больше