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


Дата создания: 2023-12-25 17:01:28 Последнее изменение: 2023-12-25 17:01:28
Копировать: 0 Количество просмотров: 564
1
Подписаться
1623
Подписчики

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

Обзор

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

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

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

Если линейная регрессия гистограмма положительная (), а бар - красная K-линия (), а объект K-линии больше, чем 13 среднего объекта из 30 прошлых K-линий, то такой комбинированный сигнал делает больше; наоборот, если линейная регрессия гистограмма отрицательная, то бар - зеленая K-линия, а объект также более крупный, то пустой.

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

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

  • Используйте комбинацию из нескольких показателей, чтобы эффективно отфильтровать ложные сигналы.
  • Компрессия - это возможный поворотный момент, повышающий эффективность стратегии.
  • Фильтрация сущностей позволяет избежать мистификации ложными прорывами в малых диапазонах
  • Легко получить лучшие результаты с помощью оптимизации параметров

Анализ стратегических рисков

  • Линейная регрессия может привести к ошибочным сигналам, которые могут привести к убыткам.
  • В результате сжатия, по оценкам Бринбета и KC-канала, результат был не лучшим.
  • Фильтрационные условия слишком жесткие, возможно, мы пропустим лучшие точки входа
  • Возможен большой отход, требующий определенного уровня выдержки.

Снижение риска может быть достигнуто путем корректировки параметров показателя и оптимизации условий фильтрации.

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

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

  1. Попробуйте различные комбинации и длины параметров, чтобы найти оптимальный параметр
  2. Увеличение или уменьшение условий фильтрации, чтобы найти оптимальный уровень фильтрации
  3. Автоматическое поиск оптимальных параметров с использованием методов машинного обучения
  4. Тестирование эффективности в конкретных породах, с корректировкой параметров в зависимости от разных сортов
  5. Увеличение стратегии стоп-лосса для контроля одиночных потерь

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

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

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

//Noro
//2017

//@version=2
strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, 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")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend background")
fromyear = input(1900, defval = 1900, 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")

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray 

trend = val > 0 ? 1 : val < 0 ? -1 : 0

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//EMA Body
body = abs(close - open)
emabody = ema(body, 30) / 3

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false)
dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false)

if up
    strategy.entry("Long", strategy.long)

if dn
    strategy.entry("Short", strategy.short)