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


Дата создания: 2024-01-04 15:44:23 Последнее изменение: 2024-01-04 15:44:23
Копировать: 0 Количество просмотров: 526
1
Подписаться
1621
Подписчики

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

Обзор

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

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

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

Код устанавливает высокий уровень Stochastic до 1080, низкий уровень - до 1020, средний уровень Stochastic - в промежутке между ними. Когда Stochastic генерирует сигнал покупки/продажи, код будет оценивать эффективность сигнала на основе показателя OTT. Если цена пересекает среднюю линию OTT вверх, то подается сигнал покупки, а если цена пересекает среднюю линию OTT вниз, то подается сигнал продажи.

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

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

Эта стратегия использует комбинацию показателей Stochastic и OTT, чтобы оптимизировать:

  1. Повышенная точность сигналов. Stochastic определяет перекуп и перепродажу, OTT отвечает за устранение ложных сигналов, вызванных шокирующей ситуацией.
  2. Снижение волатильности стратегии. Ограничение текущих убытков с помощью динамического стоп-лосса, фильтрация многих ложных прорывов.
  3. Stochastic дает основные сигналы, OTT отслеживает тенденции.
  4. Снижение избыточных помех в сигнале. Повышение качества сигнала при одновременном сокращении бесполезного сигнала.
  5. Количественная динамическая остановка убытков устанавливается. Качественная гарантия убытков, дальнейшее снижение волатильности стратегии.
  6. Система сочетает в себе тренд и показатель перекупа и перепродажи. Используйте эти два показателя, чтобы оптимизировать недостатки друг друга.

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

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

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

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

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

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

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

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

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

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

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

  5. Для тестирования комбинации различных индикаторов с OTT. В настоящее время используется комбинация Stochastic и OTT. Для тестирования комбинации MACD, RSI и других индикаторов с OTT.

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//created by: @Anil_Ozeksi
//developer: ANIL ÖZEKŞİ
//author: @kivancozbilgic


strategy(title="Stochastic Optimized Trend Tracker", shorttitle="SOTT", format=format.price, precision=2)
periodK = input(250, title="%K Length", minval=1)
smoothK = input(50, title="%K Smoothing", minval=1)
src1 = input(close, title="Source")
length=input(3, "OTT Period", minval=1)
percent=input(0.618, "OTT Percent", type=input.float, step=0.1, minval=0)
showsupport = input(title="Show Support Line?", type=input.bool, defval=false)
showsignalsc = input(title="Show Stochastic/OTT Crossing Signals?", type=input.bool, defval=false)
Var_Func1(src1,length)=>
    valpha1=2/(length+1)
    vud11=src1>src1[1] ? src1-src1[1] : 0
    vdd11=src1<src1[1] ? src1[1]-src1 : 0
    vUD1=sum(vud11,9)
    vDD1=sum(vdd11,9)
    vCMO1=nz((vUD1-vDD1)/(vUD1+vDD1))
    VAR1=0.0
    VAR1:=nz(valpha1*abs(vCMO1)*src1)+(1-valpha1*abs(vCMO1))*nz(VAR1[1])
VAR1=Var_Func1(src1,length)
k = Var_Func1(stoch(close, high, low, periodK), smoothK)
src=k+1000
Var_Func(src,length)=>
    valpha=2/(length+1)
    vud1=src>src[1] ? src-src[1] : 0
    vdd1=src<src[1] ? src[1]-src : 0
    vUD=sum(vud1,9)
    vDD=sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
h0 = hline(1080, "Upper Band", color=#606060)
h1 = hline(1020, "Lower Band", color=#606060)
fill(h0, h1, color=#9915FF, transp=80, title="Background")
plot(k+1000, title="%K", color=#0094FF)
MAvg=Var_Func(src, length)
fark=MAvg*percent*0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop =  MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT=MAvg>MT ? MT*(200+percent)/200 : MT*(200-percent)/200 
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line")
OTTC = #B800D9 
pALL=plot(nz(OTT[2]), color=OTTC, linewidth=2, title="OTT", transp=0)
alertcondition(cross(src, OTT[2]), title="Price Cross Alert", message="OTT - Price Crossing!")
alertcondition(crossover(src, OTT[2]), title="Price Crossover Alarm", message="PRICE OVER OTT - BUY SIGNAL!")
alertcondition(crossunder(src, OTT[2]), title="Price Crossunder Alarm", message="PRICE UNDER OTT - SELL SIGNAL!")
buySignalc = crossover(src, OTT[2])
plotshape(buySignalc and showsignalsc ? OTT*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallc = crossunder(src, OTT[2])
plotshape(sellSignallc and showsignalsc ? OTT*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

dummy0 = input(true, title = "=Backtest Inputs=")
FromDay    = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth  = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear   = input(defval = 2005, title = "From Year", minval = 2005)
ToDay      = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth    = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear     = input(defval = 9999, title = "To Year", minval = 2006)
Start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
    time >= Start and time <= Finish ? true : false
if buySignalc
    strategy.entry("Long", strategy.long,when=Timerange())
if sellSignallc
    strategy.entry("Short", strategy.short,when=Timerange())