Количественная торговая стратегия, основанная на пересечении взвешенных скользящих средних


Дата создания: 2023-12-06 12:05:01 Последнее изменение: 2023-12-06 12:05:01
Копировать: 0 Количество просмотров: 380
1
Подписаться
1222
Подписчики

Количественная торговая стратегия, основанная на пересечении взвешенных скользящих средних

Обзор

Эта стратегия называетсяКружающаяся стратегия количественного перемещения средних весов(Weighted Quantitative Moving Average Crossover Strategy), основной идеей которой является объединение различных показателей, таких как цена, объем торгов, для разработки быстрой и медленной линий, а также для подачи сигналов покупки и продажи при их возникновении.

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

Основным показателем этой стратегии является количественная скользящая средняя, QMA. QMA измеряет направление тенденции, рассчитывая весовую среднюю цену за определенный период времени. Она отличается от обычной скользящей средней тем, что в ней вес цены (вес = вес)*Таким образом, цены на более поздние сроки имеют больший вес и могут быстрее реагировать на изменения рынка.

В частности, в этой стратегии построены быстрая QMA-линия и медленная QMA-линия. Параметр быстрой линии установлен на 25 дней, а параметр медленной линии - на 29 дней. Сигнал покупки возникает, когда быстрая линия пересекает медленную линию снизу; сигнал продажи возникает, когда быстрая линия пересекает медленную линию сверху.

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

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

  1. Быстрее реагировать на рынок, чтобы вовремя использовать короткие линии
  2. Устойчивость, объединяющая многомерность цен и объемов торгов
  3. Гибкая настройка параметров, адаптируемая к различным рыночным условиям

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

Однако есть и другие риски:

  1. Частые операции на коротких линиях способствуют увеличению стоимости и скольжения.
  2. PARAMETERS чрезмерная оптимизация, которая может привести к корректировке
  3. Индекс может снизиться при недостаточном объеме торгов

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

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

Однако есть еще много возможностей для оптимизации этой стратегии:

  1. Динамическая корректировка параметров QMA, позволяющая ему самостоятельно адаптироваться к колебаниям рынка
  2. Фильтрация возможностей для входа на рынок по таким показателям, как волатильность и объем торгов
  3. Увеличение стратегии по сдерживанию убытков и борьба с единичными потерями

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Brad VWMACD Strategy 2233", overlay=false, max_bars_back=500,default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent, commission_value=0.18, default_qty_value=100)

// === INPUT BACKTEST RANGE === 
FromMonth = input(defval = 9, 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"

// === INPUT SMA === 
//fastMA    = input(defval = 16, type = integer, title = "FastMA", minval = 1 )
//slowMA    = input(defval = 23, type = integer, title = "SlowMA", minval = 1)

fastMA    = input(defval = 25, title = "FastMA", minval = 1 )
slowMA    = input(defval = 29,  title = "SlowMA", minval = 1)

Long_period = slowMA
Short_period = fastMA
Smoothing_period = input(9, minval=1)
xLongMAVolPrice = ema(volume * close, Long_period) 
xLongMAVol = ema(volume, Long_period) 
xResLong = (xLongMAVolPrice * Long_period) / (xLongMAVol * Long_period)
xShortMAVolPrice = ema(volume * close, Short_period) 
xShortMAVol = ema(volume, Short_period) 
xResShort = (xShortMAVolPrice * Short_period) / (xShortMAVol * Short_period)
xVMACD = xResShort - xResLong
xVMACDSignal = ema(xVMACD, Smoothing_period)
nRes = xVMACD - xVMACDSignal
//plot(nRes*20+slowMA, color=blue, style = line )
//plot(3000, color=red, style = line )


// === SERIES SETUP ===

buy  = crossover( xVMACD,xVMACDSignal)     // buy when fastMA crosses over slowMA
sell = crossunder( xVMACD,xVMACDSignal)  // sell when fastMA crosses under slowMA


// === SERIES SETUP === 

//buy  = crossover(vwma(close, fastMA),7+vwma(close, slowMA))     // buy when fastMA crosses over slowMA
//sell = crossunder(vwma(close, fastMA),vwma(close, slowMA)-7)    // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                // sell long when "within window of time" AND crossunder         

// === EXECUTION ===
strategy.entry("S", strategy.short, when = window() and sell)  // buy long when "within window of time" AND crossover
strategy.close("S", when = window() and buy)                // sell long when "within window of time" AND crossunder         

plotshape(window() and buy, style=shape.triangleup, color=green, text="up")
plotshape(window() and sell, style=shape.triangledown, color=red, text="down")
plot(xVMACD*100, title = 'FastMA', color = orange, linewidth = 2, style = line)  // plot FastMA
plot(xVMACDSignal*100, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA