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

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

img

Обзор

Эта стратегия основана на двойной системе пересечения движущейся средней тенденции. Она сочетает в себе быструю простую движущуюся среднюю (SMA) и медленную взвешенную движущуюся среднюю (VWMA) и генерирует торговые сигналы, когда две линии пересекают друг друга.

Когда быстрая SMA пересекает медленную VWMA, генерируется сигнал покупки. Когда быстрая SMA пересекает медленную VWMA, генерируется сигнал продажи. Стратегия также использует механизм стоп-лосса для контроля рисков.

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

Основная логика этой стратегии заключается в двойной системе перекрестного использования скользящей средней, которая использует следующие технические показатели:

  1. Простая скользящая средняя (SMA): арифметическая средняя цена закрытия за последние n дней, отражающая последнюю среднюю цену.
  2. Взвешенная скользящая средняя (VWMA): средневзвешенная средняя цена закрытия за последние n дней, придавая более высокие весы более поздним ценам, быстрее реагируя на изменения цен.

Когда краткосрочные и долгосрочные тенденции выстраиваются в одном направлении, быстрое пересечение SMA выше медленной VWMA генерирует сигналы покупки, а пересечение ниже генерирует сигналы продажи.

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

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

  1. Быстро реагирует на изменения рыночных тенденций
  2. Хороший контроль за загрузкой с эффективными механизмами остановки потерь
  3. Простой и интуитивный, легко понимаемый и реализуемый
  4. Оптимизируемые параметры в различных рыночных условиях

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

  1. Стратегии двойного MA, как правило, дают ложные сигналы на бычьих рынках
  2. Неправильная настройка параметров может привести к потерям
  3. Временные взрывы могут привести к потерям.

Управление рисками:

  1. Использовать индикаторы фильтрации тенденций для подтверждения
  2. Оптимизировать параметры
  3. Принять стратегию стоп-лосса для разумного контроля одиночных потерь

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

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

  1. Включите другие индикаторы, такие как RSI, полосы Боллинджера, чтобы повысить точность сигнала
  2. Оптимизировать длину скользящих средних по циклам
  3. Комбинировать показатели объема, торговля в местах с значительными потоками капитала
  4. Корректировать параметры на основе результатов обратных испытаний, чтобы найти оптимальный
  5. Использование динамического стоп-лосса, корректировка стопов на основе волатильности рынка

Заключение

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


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-28 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", overlay=true, initial_capital=10000, currency='USD')

strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", overlay=true)

// Credit goes to this developer for the "Date Range Code"
// https://www.tradingview.com/script/62hUcP6O-How-To-Set-Backtest-Date-Range/

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = close, title = "Simple MA Source")
maFastLength   = input(defval = 6, title = "Simple MA Length", minval = 1)
// long ma
maSlowSource   = input(defval = high, title = "VW MA Source")
maSlowLength   = input(defval = 7, title = "VW MA Period", minval = 1)


// === SERIES SETUP ===
// a couple of ma's...
maFast = sma(maFastSource, maFastLength)
maSlow = vwma(maSlowSource, maSlowLength)


// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = color.green, linewidth = 2, style = plot.style_line, transp = 30)
slow = plot(maSlow, title = "Slow MA", color = color.red, linewidth = 2, style = plot.style_line, transp = 30)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === LOGIC ===
enterLong = crossover(maFast, maSlow)
exitLong = crossover(maSlow, maFast)
//enterLong = crossover(maSlow, maFast)
//exitLong = crossover(maFast, maSlow)

// Entry //
strategy.entry(id="Long Entry", long=true, when=window() and enterLong)
strategy.entry(id="Short Entry", long=false, when=window() and exitLong)

// === FILL ====
fill(fast, slow, color = maFast > maSlow ? color.green : color.red)

// === MRSI ===
//
//

basis = rsi(close, input(50))

ma1 = ema(basis, input(2))
ma2 = ema(basis, input(27))

oversold = input(32.6)
overbought = input(63)

//plot(ma1, title="RSI EMA1", color=blue)
//plot(ma2, title="RSI EMA2", color=yellow)

obhist = ma1 >= overbought ? ma1 : overbought
oshist = ma1 <= oversold ? ma1 : oversold

//plot(obhist, title="Overbought Highligth", style=columns, color=color.maroon, histbase=overbought)
//plot(oshist, title="Oversold Highligth", style=columns, color=color.yellow, histbase=oversold)

//i1 = hline(oversold, title="Oversold Level", color=white)
//i2 = hline(overbought, title="Overbought Level", color=white)

//fill(i1, i2, color=olive, transp=100)

// === LOGIC ===
enterLongMrsi = crossover(ma1, oversold)
exitLongMrsi = crossover(ma1, overbought)

// Entry //
strategy.entry(id="MRSI Long Entry", long=true, when=window() and enterLongMrsi)
strategy.entry(id="MRSI Short Entry", long=false, when=window() and exitLongMrsi)

//hline(50, title="50 Level", color=white)

Больше