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

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

img

Обзор

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

Принцип стратегии

Стратегия принимает торговые решения в основном на основе следующих показателей оценки:

  1. Ценовой канал: рассчитывает самые высокие и самые низкие цены последних 30 свечей для определения диапазона канала. Цена закрытия выше средней точки канала считается быстрой. Цена закрытия ниже средней точки канала считается медвежьей.

  2. Быстрый RSI: рассчитывает значение RSI последних 2 свечей. RSI ниже 25 считается перепроданным, а RSI выше 75 считается перекупленным.

  3. Линия Инь-Ян: Вычислить размер сущности последних 2 свечей. Две красные свечи предполагают медвежий сигнал, а две зеленые свечи предполагают бычий сигнал.

  4. Условие прекращения потерь: принудительная ликвидация, когда убытки достигают определенного процента для ограничения потерь.

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

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

Преимущества этой стратегии включают:

  1. Улучшенная точность сигнала путем объединения нескольких индикаторов, что помогает отфильтровать ложные сигналы.

  2. Более быстрые реакции на поворотные моменты благодаря использованию Fast RSI, который более чувствителен, чем обычный RSI.

  3. Высокая надежность в различных продуктах и временных рамках благодаря строгой оптимизации параметров во время бэкстестов.

  4. Автоматический механизм остановки потерь для контроля потенциальных потерь, превышающих ожидания.

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

Некоторые риски этой стратегии:

  1. Неправильное установление параметров ценового канала может вызвать шоки.

  2. Время удержания односторонней позиции может быть слишком длинным во время сильных тенденций, превышая прогнозы.

  3. Неправильное установление точки остановки может увеличить потери. Этот параметр требует осторожной конфигурации - слишком высокий или слишком низкий может быть неблагоприятным.

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

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

Некоторые направления, по которым стратегия может быть еще более оптимизирована:

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

  2. Объедините больше источников данных, таких как новости, чтобы улучшить торговые решения и точность сигналов.

  3. Разработка динамических механизмов размещения позиций на основе рыночных условий для лучшего контроля рисков.

  4. Расширение применения к торговле фьючерсными арбитражами для дальнейшего повышения абсолютной доходности.

Заключение

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


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 100000, title = "capital, %")
uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")
usersi = input(true, defval = true, title = "Use RSI strategy")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period")
showcl = input(true, defval = true, title = "Price Channel")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
src = close

//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
trend = low > center ? 1 : high < center ? -1 : trend[1]
col = showcl ? blue : na
col2 = showcl ? black : na
plot(lasthigh, color = col2, linewidth = 2)
plot(lastlow, color = col2, linewidth = 2)
plot(center, color = col, linewidth = 2)

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1

//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Signals
body = abs(close - open)
abody = sma(body, 10)
up1 = rbars and close > center and uset
dn1 = gbars and close < center and uset
up2 = close <= lastlow and close < open and usect
dn2 = close >= lasthigh and close > open and usect
up3 = fastrsi < 25 and close > center and usersi
dn3 = fastrsi > 75 and close < center and usersi
exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2)
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Trading
if up1 or up2 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Больше