Тенденционная стратегия торговли, основанная на Золотом кресте

Автор:Чао Чжан, Дата: 2023-11-23 14:07:11
Тэги:

img

Обзор

Золотая перекрестная стратегия торговли - это средне- и долгосрочная стратегия отслеживания тренда. Она определяет направление тренда цен на акции путем расчета индикатора SR и индикатора сигнала SR и реализует операции отслеживания тренда путем рисования канала тренда с помощью алгоритмов нейронной сети. Когда индикатор SR пересекает сигнал SR, генерируется сигнал покупки. Когда индикатор SR пересекает сигнал SR, генерируется сигнал продажи. Эта стратегия также использует адаптивный метод фильтрации линейной регрессии для оптимизации кривой канала, которая эффективно подавляет ложные сигналы.

Принципы

Основными показателями этой стратегии являются индикатор SR и индикатор сигнала SR. Индикатор SR представляет собой вторичный синтез скользящей средней WMA и скользящей средней SMA с периодом 8. Индикатор сигнала SR является индикатором SR, рассчитанным с периодом 20.

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

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

Преимущества

  • Использование технологии билинеарного синтеза для устранения влияния колебаний цен и точного определения направления тренда;
  • Адаптивные алгоритмы каналов оптимизируют время входа и выхода и избегают ложных прорывов;
  • В кривых каналов применяется технология адаптивной линейной регрессионной фильтрации для предотвращения искажений от крайних;
  • Позиции Stop Loss и Take Profit динамически меняются с каналом, автоматически отслеживая тенденции к прибыли.

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

Основными рисками этой стратегии отслеживания тенденций являются:

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

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

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

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

  1. оптимизировать параметры индикатора SR и индикатора сигнала для улучшения стабильности перекрестных сигналов;

  2. Оптимизировать период цикла адаптивного канала для сглаживания кривой канала;

  3. Добавление других показателей фильтра для предотвращения неисправностей, таких как показатели энергии, показатели волатильности и т.д.;

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

Резюме

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


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

//@version=4
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

strategy(title = " Strategy PyramiCover",
         shorttitle = "S-PC",
         overlay = true,
         precision = 8,
         calc_on_order_fills = true,
         calc_on_every_tick = true,
         backtest_fill_limits_assumption = 0,
         default_qty_type = strategy.fixed,
         default_qty_value = 2,
         initial_capital = 10000,
         pyramiding=50,
         currency = currency.USD,
         linktoseries = true)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool)

FromMonth         = input(defval = 1, title = "Month", minval = 1)
FromDay           = input(defval = 1, title = "Day", minval = 1)
FromYear          = input(defval = 2014, title = "Year", minval = 2014)

backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool)
ToMonth           = input(defval = 31, title = "Month", minval = 1)
ToDay             = input(defval = 12, title = "Day", minval = 1)
ToYear            = input(defval = 9999, title = "Year", minval = 2014)

backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

per = input(14,title="🔹 Length")
//
up = 0.0
nup= 0.0
lowl = 0.0
nin = 0.0
//
srl=wma(close,8)
srr = sma(close,8)
sr = 2*srl - srr
//
srsl=wma(close,20)
srsr= sma(close,20)
srsignal = 2*srsl - srsr
//
if sr>srsignal
    up := highest(sr,round(150))
    nup :=highest(srsignal,round(20))
else
    up := highest(srsignal,round(150))
    nup := highest(sr,round(20))
//
if sr<srsignal
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
else
    lowl := lowest(sr,round(150))
    nin := lowest(srsignal,round(20))
//reg alexgrover
f_reg(src,length)=>
    x = bar_index
    y = src
    x_ = sma(x, length)
    y_ = sma(y, length)
    mx = stdev(x, length)
    my = stdev(y, length)
    c = correlation(x, y, length)
    slope = c * (my / mx)
    inter = y_ - slope * x_
    reg = x * slope + inter
    reg
//
up_=f_reg(up,per)
lowl_=f_reg(lowl,per)
nup_=f_reg(nup,per)
nin_=f_reg(nin,per)
//
plot(sr, title='SR', color=color.green, linewidth=2, style=plot.style_line,transp=0)
plot(srsignal, title='SR-Signal', color=color.red, linewidth=2, style=plot.style_line,transp=0)
plot(up_, title='Upper limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
plot(lowl_, title='Lower limit', color=color.blue, linewidth=3, style=plot.style_line,transp=0)
a=plot(nup_, title='Neuronal Upper', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
b=plot(nin_, title='Neuronal Lower', color=color.gray, linewidth=1, style=plot.style_line,transp=0)
fill(a, b, color=color.gray)
plotshape(crossunder(sr,nup_)? sr+atr(20):na, title="Sell", text="🐻", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.black,transp=0)
plotshape(crossover(sr,nin_)? sr-atr(20):na, title="Buy", text="🐂", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.black,transp=0)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

if backTestPeriod()

    strategy.entry("Buy", true, 1, when = crossover(sr,nin_)) 
    strategy.entry("Short", false, 1, when = crossunder(sr,nup_))

Больше