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


Дата создания: 2023-12-11 15:10:02 Последнее изменение: 2023-12-11 15:10:02
Копировать: 0 Количество просмотров: 689
1
Подписаться
1621
Подписчики

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

Обзор

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

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

  1. Расчет 200-циклической и 30-циклической ЭМА, 200 ЭМА, больше 30 ЭМА, рассматривается как длиннолинейная тенденция вверх, в противном случае рассматривается как длиннолинейная тенденция вниз.

  2. После определения направления тренда, рассчитывается базовая линия, верхняя и нижняя полосы. Основая линия использует конфигурируемые периоды (например, 8 циклов) SMA, а полоса использует наиболее разные конфигурируемые кратные значения наивысшей и наименьшей цены того же периода (например, 1,3 и 1,1).

  3. При длинной линии вверх, когда цена снизу вверх прорывается вниз, рассматривается как точка покупки; при длинной линии вниз, когда цена снизу вниз прорывается вверх, рассматривается как точка продажи.

  4. Для фильтрации ложного прорыва проверяется, не меньше ли скорости изменения предыдущей K-линии при прорыве (например, 3%), а также проверяется, не больше ли расстояние между верхней и нижней полосами буринской ленты (например, 2,2%).

  5. После открытия позиции устанавливается конфигурируемый стоп (например, 3%) и стоп (например, 10%), чтобы блокировать прибыль.

Стратегические преимущества

  1. Двойная EMA оценивает основную тенденцию, избегая беспорядочного открытия позиций, когда основная тенденция неизвестна.

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

  3. Механизм проверки переменной скорости и минимальной полосы пропускания эффективно фильтрует ложные прорывы.

  4. Стоп-стоп имеет разумную настройку, риск блокировки прибыли контролируется.

Стратегический риск

  1. Двойные EMA не могут точно определить переломный момент, и могут упустить возможность поворота тренда.

  2. Неправильная настройка параметров пояса Брин может привести к ложному сигналу.

  3. Фиксированный стоп-стартер не может адаптироваться к рыночным колебаниям.

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

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

  2. Применение метода динамической корректировки параметров пояса Бринна.

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

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

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

Исходный код стратегии
/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2039, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop

strategy("Custom Band Strategy", overlay=true)
source = close //종가 기준

//추세 조건 설정
emaLong = ema(source, input(200, minval=0))
emaShort = ema(source, input(30, minval=0))
trend = if emaShort>=emaLong
    1
else
    -1
    
plot(emaLong, color=red, transp=0)
plot(emaShort, color=blue, transp=0)


//BB 계산(default 14/3.2)
length = input(8, minval=1)

basis = sma(source, length)
plot(basis, color=green, transp=0)
max=highest(abs(source-basis), length)

factor1 = input(1.3, minval=0.5)
factor2 = input(1.1, minval=0.5)

upper = if trend==1
    basis + max*factor1
else
    basis + max*factor2
lower = if trend==-1
    basis - max*factor1
else
    basis - max*factor2

plot1 = plot(upper)
plot2 = plot(lower)
fill(plot1, plot2, transp=80, color=green)

//밴드 이탈 후 재진입 조건 설정
cross_over = (low<=lower and close>=lower) or crossover(close,lower)
cross_under = (high>=upper and close<=upper) or crossunder(close,upper)

//변동율 계산
maxCandle=highest(abs(open-close), length)
    
roc = abs(open-close)/open*100
changerate = input(3, minval=0.0)

//수익률 계산
value = abs(strategy.position_size)*strategy.position_avg_price
roe = strategy.openprofit/value * 100
expRoeL = (upper-lower)/lower*100
expRoeS = (upper-lower)/upper*100
exp = input(2.2, minval=0.0)

target = input(10, minval=0.0)
stop = input(-3, minval=-10.0)

strategy.close_all(when=roc>=changerate and testPeriod())
strategy.close_all(when=roe>=target and testPeriod())
strategy.close_all(when=roe<=stop and testPeriod())

plotchar(crossover(close,lower) and crossunder(close,upper),color=blue, transp=0, text="cross")
plotchar(roc>=changerate,color=red, transp=0, text="roc")
plotchar(roe>=target,color=blue, transp=0, text="target")
plotchar(roe<=stop,color=green, transp=0, text="stop")

minroe = input(2, minval=0.0)

strategy.close_all(when=cross_under and roe>minroe and testPeriod())
strategy.entry("BBandLE", strategy.long, stop=source, oca_name="BollingerBands",  comment="BBandLE", when=(cross_over) and trend==1 and roc<changerate and expRoeL>exp and source>emaLong and strategy.position_size==0 and testPeriod()) //trend==1 and 
//else
strategy.close_all(when=cross_over and roe>minroe and testPeriod())
strategy.entry("BBandSE", strategy.short, stop=source, oca_name="BollingerBands",  comment="BBandSE", when=(cross_under) and trend==-1 and roc<changerate and expRoeS>exp and source<emaLong and strategy.position_size==0 and testPeriod()) //trend==-1 and