
Эта стратегия определяет направление тенденции рынка, рассчитывая индикаторные движущиеся средние ((EMA) за два различных цикла, и, при условии определения направления тенденции, в сочетании с самостоятельным адаптацией Бруна, чтобы обнаружить возможности перекупа и перепродажи, реализует торговлю, следующую за тенденцией.
Расчет 200-циклической и 30-циклической ЭМА, 200 ЭМА, больше 30 ЭМА, рассматривается как длиннолинейная тенденция вверх, в противном случае рассматривается как длиннолинейная тенденция вниз.
После определения направления тренда, рассчитывается базовая линия, верхняя и нижняя полосы. Основая линия использует конфигурируемые периоды (например, 8 циклов) SMA, а полоса использует наиболее разные конфигурируемые кратные значения наивысшей и наименьшей цены того же периода (например, 1,3 и 1,1).
При длинной линии вверх, когда цена снизу вверх прорывается вниз, рассматривается как точка покупки; при длинной линии вниз, когда цена снизу вниз прорывается вверх, рассматривается как точка продажи.
Для фильтрации ложного прорыва проверяется, не меньше ли скорости изменения предыдущей K-линии при прорыве (например, 3%), а также проверяется, не больше ли расстояние между верхней и нижней полосами буринской ленты (например, 2,2%).
После открытия позиции устанавливается конфигурируемый стоп (например, 3%) и стоп (например, 10%), чтобы блокировать прибыль.
Двойная EMA оценивает основную тенденцию, избегая беспорядочного открытия позиций, когда основная тенденция неизвестна.
Установка открытых точек в адаптивной бринговой полосе, автоматическая корректировка параметров полосы пропускания в соответствии с тенденцией, дальнейшая блокировка тенденции.
Механизм проверки переменной скорости и минимальной полосы пропускания эффективно фильтрует ложные прорывы.
Стоп-стоп имеет разумную настройку, риск блокировки прибыли контролируется.
Двойные EMA не могут точно определить переломный момент, и могут упустить возможность поворота тренда.
Неправильная настройка параметров пояса Брин может привести к ложному сигналу.
Фиксированный стоп-стартер не может адаптироваться к рыночным колебаниям.
В сочетании с другими показателями оценивается тенденция и определяются основные точки перехода.
Применение метода динамической корректировки параметров пояса Бринна.
Установка условного одностопного стоп-убытка, корректировка стоп-линии в зависимости от конкретных условий.
Эта стратегия использует комплексный метод двойного ЭМА для определения основных тенденций и обнаружения возможностей бурин-пояса, что позволяет осуществлять торговлю по тренду. Преимущество стратегии заключается в рациональном установлении условий для открытия позиций и остановки потерь, что позволяет эффективно блокировать прибыль от тренда. В то же время существует определенный риск, такой как неспособность определить поворотную точку и неправильная настройка параметров бурин-пояса. Все эти проблемы имеют место для дальнейшей оптимизации, что позволяет стратегии лучше понять прибыль от тренда.
/*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