Стратегия отслеживания тренда сетки Болинджера Фибоначчи

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

img

Обзор

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

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

  1. Используйте среднюю линию полос Боллинджера и верхние и нижние рельсы, построенные из линий ATR и 4 линий Фибоначчи, для построения полос ценовых волн.

  2. Быстрая линия EMA и медленная линия SMA образуют двойную скользящую среднюю для определения общего направления тренда.

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

  4. Установка условий остановки потерь: выход из текущих направленных позиций при появлении большой реверсионной строки.

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

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

  2. Схема Bollinger ATR устанавливает несколько цен открытия, чтобы увеличить вероятность успешного открытия позиций.

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

  4. Условия стоп-лосса в режиме реального времени облегчают быстрые стоп-лосы и уменьшают ретрассовку прибыли.

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

  1. Ошибки в оценке тенденций на мегауровне могут привести к противоположным потерям.

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

  3. Условия стоп-лосса более субъективны, и критерии признания могут отличаться у разных трейдеров.

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

  1. Добавить индикатор APO для вспомогательного анализа двойных скользящих средних тенденций.

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

  3. Уменьшить амплитуду остановки потери и добавить ИНШЕЙ способ настройки условий остановки потери для уменьшения ошибок.

Резюме

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


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Aayonga

//@version=5
strategy("fib trend grid@Aa", overlay=true,initial_capital=2000, default_qty_type=strategy.fixed, default_qty_value=1)

//回测时间
useDateFilter=input.bool(true,title = "启用回测时间范围限定(backtest)", group = "回测范围(backtest)")
backtesStarDate=input(timestamp("1 Jan 2015"),title = "开始时间(Start)", group = "回测范围(backtest)")
backtestEndDate=input(timestamp("1 Jan 2040"),title = "结束时间(finish)",group = "回测范围(backtest)")
inTradeWindow=true


//入场位 entry
bolllen=input.int(defval=20,minval=1,title="布林长度,(boll length)",group = "入场位(entry)")
sma=ta.sma(close,bolllen)
avg=ta.atr(bolllen)
fib1=input(defval=1.236,title="Fib 1",group = "入场位(entry)")
fib2=input(defval=2.382,title="Fib 2",group = "入场位(entry)")
fib3=input(defval=3.618,title="fib 3",group = "入场位(entry)")
fib4=input(defval=4.236,title="Fib 4",group = "入场位(entry)")
r1=avg*fib1
r2=avg*fib2
r3=avg*fib3
r4=avg*fib4
top4=sma+r4
top3=sma+r3
top2=sma+r2
top1=sma+r1
bott1=sma-r1
bott2=sma-r2
bott3=sma-r3
bott4=sma-r4



//趋势 trend

t4=plot(top4,title="卖 (sell)4",color=color.rgb(244, 9, 9))
t3=plot(top3,title = "卖(sell) 3",color=color.rgb(211, 8, 8))
t2=plot(top2,title="卖 (sell)2",color=color.rgb(146, 13, 13))
t1=plot(top1,title="卖(sell) 1",color=color.rgb(100, 3, 3))

b1=plot(bott1,title="买(buy)1",color=color.rgb(4, 81, 40))
b2=plot(bott2,title="买(buy)2",color=color.rgb(15, 117, 46))
b3=plot(bott3,title = "买(buy)3",color =color.rgb(8, 176, 42) )
b4=plot(bott4,title="买(buy)4",color=color.rgb(15, 226, 103))
plot(sma,style=plot.style_cross,title="SMA",color=color.rgb(47, 16, 225))

//趋势
LengthF=input(defval = 25,title = "快线长度(fastlength)")
LengthS=input(defval=200,title = "慢线长度(slowlength)")
emaF=ta.ema(close,LengthF)
smaS=ta.sma(close,LengthS)
longTrend=emaF>smaS
longb=ta.crossover(emaF,smaS)
bgcolor(longb ? color.new(color.green,40):na,title = "多头强势(bull trend)")
shortTrend=smaS>emaF
shortb=ta.crossunder(emaF,smaS)
bgcolor(shortb ? color.new(#951313, 40):na,title = "空头强势(bear trend)")

//pinbar
bullPinBar = ((close > open) and ((open - low) > 0.6* (high - low))) or ((close < open) and ((close - low) > 0.9 * (high - low)))
//plotshape(bullPinBar  , text ="pinbar", textcolor=color.rgb(9, 168, 144),location=location.belowbar, color=color.rgb(29, 103, 67), size=size.tiny)
bearPinBar = ((close > open) and ((high - close) > 0.7 * (high - low))) or ((close < open) and ((high - open) > 0.7 * (high - low)))
//plotshape(bearPinBar  , text ="pinbar", textcolor=color.rgb(219, 12, 12),location=location.abovebar, color=color.rgb(146, 7, 7), size=size.tiny)

buy1=ta.crossunder(close,bott1) and longTrend and close>ta.ema(close,100)
buy2=ta.crossunder(close,bott2) and longTrend and close>ta.ema(close,80)
buy3=ta.crossunder(close,bott3) and longTrend and close>ta.ema(close,80)
buy4=ta.crossunder(close,bott4) and longTrend and close>ta.ema(close,80)
buyclose=bearPinBar or ta.crossunder(close,smaS)




if buy2 or buy3 or buy4 or buy1 and inTradeWindow
    strategy.order("多(buy)",strategy.long)

if buyclose  and inTradeWindow
    strategy.close("多(buy)")

sell1=ta.crossover(close,top1) and shortTrend and close<ta.ema(close,200)
sell2=ta.crossover(close,top2) and shortTrend and close<ta.ema(close,200)
sell3=ta.crossover(close,top3) and shortTrend and close<ta.ema(close,200)
sell4=ta.crossover(close,top4) and shortTrend and close<ta.ema(close,200)
sellclose=bullPinBar or ta.crossover(close,ta.sma(close,220))

if  sell1 or sell2 or sell3 or sell4 and inTradeWindow
    strategy.order("空(sell)",strategy.short)

if sellclose  and inTradeWindow
    strategy.close("空(sell)")
     

Больше