Стратегия ценового прорыва полос Боллинджера


Дата создания: 2023-11-06 11:43:14 Последнее изменение: 2023-11-06 11:43:14
Копировать: 0 Количество просмотров: 701
1
Подписаться
1617
Подписчики

Стратегия ценового прорыва полос Боллинджера

Обзор

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

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

Стратегия включает в себя следующие компоненты:

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

  2. Stoch, который определяет, находятся ли акции в состоянии перекупа и перепродажи. K-линия и D-линия могут определять, есть ли взлом вверх и взлом вниз.

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

Условия покупки: цены находятся на пониженной трассе через линию Блинна, показатель Stoch показывает перепродажу ((K<20, D<20), быстро движущаяся средняя линия нарушает медленно движущуюся среднюю линию.

Условия продажи: продажа по цене ниже, или прибыль после убытка.

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

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

  1. В сочетании с линией Бринна и индексом Стоха, можно купить акции, когда они находятся в заметно низких точках, снижая риск.

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

  3. Применение двойного условного суждения повышает стабильность и надежность стратегии.

  4. Стойкость к убыткам позволяет избежать крупных потерь.

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

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

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

  3. В условиях волатильности может возникнуть ложный торговый сигнал.

  4. Необходимо своевременно остановить убытки и контролировать риски.

  5. Необходимо обратить внимание на силу прорыва, чтобы предотвратить откат.

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

  1. Оптимизируйте фондовые пулы, выбирая наиболее волатильные и тенденциозные акции

  2. Оптимизация параметров буринной линии, корректировка цикла промежуточных колебаний, оптимизация точки покупки и продажи.

  3. Оптимизация параметров Стоха, адаптация K- и D-линейных циклов, повышение надежности показателей.

  4. Повышение объемов сделок позволит избежать резкого падения цен.

  5. Добавление стратегий по удержанию убытков, таких как отслеживание убытков, перемещение убытков и т. д., чтобы контролировать риск потери.

  6. Оценка добавления других технических показателей, таких как MACD, KDJ и т.д., для повышения стабильности стратегии.

  7. Тестирование различных периодов хранения позиций для оптимизации прибыли и снятия процента.

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

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

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

//@version=3
strategy("Bollinger e Tendência", overlay=true)

//MÉDIAS 
periodolenta = 14
periodosimples = 47
periodome = 7

psimples = input(title="Período da média simples", defval=periodosimples)
pexp = input(title="Período da média exponencial", defval=periodome)
pexplenta = input(title="Período da média exp lenta", defval=periodolenta)
msimples = sma(close, psimples)
mexp = ema(close, pexp)
mexplenta = ema(close, pexplenta)

plot(msimples, linewidth=2, color=yellow)
plot(mexp, linewidth=5, color=white)
plot(mexplenta, linewidth=2, color=orange)

//BOLLANGER
length = input(21, minval=2)
src = input(close, title="Source")
mult = input(1.5, minval=0.001, maxval=50)
basis = sma(src, length)
dev = mult * stdev(src, length)
upperBol = basis + dev
lowerBol = basis - dev

p1 = plot(upperBol, title="Upper", color=blue, linewidth=3)
p2 = plot(lowerBol, title="Lower", color=blue, linewidth=3)
fill(p1, p2, color = purple, transp=90)

//BBW (altura do Bollanger)
basis2 = sma(close, 21)
bbw = (upperBol-lowerBol)/basis2


//STOCH E FORÇA
source = close
lengthRSI = input(11, minval=2), lengthStoch = input(7, minval=2)
smoothK = input(3,minval=3), smoothD = input(4,minval=3)
OverSold = input(20), OverBought = input(80)
rsi1 = rsi(source, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
hline(OverSold,color=blue)
hline(OverBought,color=blue)



// Cor das Tendências (Verde ou Vermelho)
// Baseado no código: "Pivot Daily Price Color" (by Rimko)
pivot = (high + low + close ) / 3.0 
dtime_pivot = request.security(syminfo.tickerid, 'D', pivot[1]) 
pv = dtime_pivot ? dtime_pivot : na
pe = ema(close,periodome)
col = sma(close,1)>pv?green:red
col2 = sma(close,1)>pe?green:red
offs_daily = 0 
pp=plot(pv, title="Daily Pivot",style=linebr, color=black,linewidth=2) 
p=plot(sma(close,1), transp=100, editable=false)
pema = plot(pe, title="EMA",style=line, color=black,linewidth=2, transp = 50)
fill(p,pema,color=col2,title="EMA to price color", transp = 50)
fill(pp,p,color=col, title="Privot to price color", transp = 90) 


//*************************************************************************************************************************************************
// Candles (identificação):
// Baseado no código: "Candlesticks Pattern Identified" (by Repo32)
trend= input(5, minval=1, title="Trend in Bars")

DojiSize = input(0.05, minval=0.01, title="Doji size")
data=(abs(open - close) <= (high - low) * DojiSize)
//plotchar(data, title="Doji", color=white)
plotshape(data, title="Doji", color=white, style=shape.cross)
 //text='Doji'

data6=(close[1] > open[1] and open > close and open <= close[1] and open[1] <= close and open - close < close[1] - open[1] and open[trend] < open)
plotshape(data6, title= "Bearish Harami", color=red, style=shape.triangledown)
//, text="Harami\nde Baixa"

data8=(close[1] > open[1] and open > close and open >= close[1] and open[1] >= close and open - close > close[1] - open[1] and open[trend] < open)
plotshape(data8,  title= "Bearish Engulfing", color=red, style=shape.triangledown)
//, text="Engolfo\nde Baixa"

data13=(open[1]<close[1] and open<=open[1] and close<=open and open[trend] < open)
plotshape(data13, title= "Bearish Kicker", color=red, style=shape.triangledown)
//, text="Kicker\nde Baixa"

data14=(((high-low>4*(open-close))and((close-low)/(.001+high-low)>=0.75)and((open-low)/(.001+high-low)>=0.75))and open[trend] < open and high[1] < open and high[2] < open)
plotshape(data14,  title= "Hanging Man", location=location.belowbar, color=red, style=shape.triangledown)
//, text="Enforcado"

data7=(open[1] > close[1] and close > open and close <= open[1] and close[1] <= open and close - open < open[1] - close[1] and open[trend] > open)
plotshape(data7,  title= "Bullish Harami", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Mulher\nGrávida"

data9=(open[1] > close[1] and close > open and close >= open[1] and close[1] >= open and close - open > open[1] - close[1] and open[trend] > open)
plotshape(data9, title= "Bullish Engulfing", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Engolfo\nde Alta"

//uppercandle = highest(10)[1]
data10=(close[1] < open[1] and  open < low[1] and close > close[1] + ((open[1] - close[1])/2) and close < open[1] and open[trend] > open)
plotshape(data10, title= "Piercing Line", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Piercing"

lowercandle = lowest(10)[1]
data11=(low == open and  open < lowercandle and open < close and close > ((high[1] - low[1]) / 2) + low[1] and open[trend] > open)
plotshape(data11, title= "Bullish Belt", location=location.belowbar, color=lime, style=shape.triangleup)
//, text="Contenção\nde Alta"

data12=(open[1]>close[1] and open>=open[1] and close>open and open[trend] > open)
plotshape(data12, title= "Bullish Kicker", location=location.belowbar, color=lime, style=shape.triangleup)//, text="Kicker\nde Alta"


data5=(((high - low)>3*(open -close)) and  ((close - low)/(.001 + high - low) > 0.6) and ((open - low)/(.001 + high - low) > 0.6))
plotshape(data5, title= "Hammer", location=location.belowbar, color=white, style=shape.diamond)

data5b=(((high - low)>3*(open -close)) and  ((high - close)/(.001 + high - low) > 0.6) and ((high - open)/(.001 + high - low) > 0.6))
plotshape(data5b, title= "Inverted Hammer", location=location.belowbar, color=white, style=shape.diamond)
//, text="Martelo\nInvertido"

data2=(close[2] > open[2] and min(open[1], close[1]) > close[2] and open < min(open[1], close[1]) and close < open )
//plotshape(data2, title= "Evening Star", location=location.belowbar, color=red, style=shape.arrowdown, text="Estrela\nda Tarde")
plotchar(data2, title="Evening Star", color=white)

data3=(close[2] < open[2] and max(open[1], close[1]) < close[2] and open > max(open[1], close[1]) and close > open )
//plotshape(data3,  title= "Morning Star", location=location.belowbar, color=lime, style=shape.arrowup, text="Estrela\nda Manhã")
plotchar(data3, title="Morning Star", color=white, location=location.belowbar)

data4=(open[1] < close[1] and open > close[1] and high - max(open, close) >= abs(open - close) * 3 and min(close, open) - low <= abs(open - close))
//plotshape(data4, title= "Shooting Star", color=red, style=shape.arrowdown, text="Estrela\nCadente")
plotchar(data4, title="Shooting Star", color=white)



//**********************************************************************************************************



// Ações:

momento = strategy.position_size[0] > strategy.position_size[1]
valorcompra = valuewhen(momento, open, 0)
valorbbw = input(title="Altura Máxima do Bollinger", defval=10)

alerta = crossunder(close, lowerBol)
alertcondition(alerta, title='Abaixo da Banda Baixa', message='Fechou abaixo da banda baixa...!')

//data7 data9 data10 data11 data12

compra =  crossover(close, lowerBol) and ((k<=20) and (d<=20)) and (mexp>mexp[1])
//compra = (data7 or data9 or data10 or data11 or data12) and (msimples>msimples[1]) and ((k<=20) and (d<=20)) and (bbw<valorbbw/1000)
//compra =  (open<close) and (crossover (close, lowerBol)) and ((k<=20) and (d<=20)) and (bbw<valorbbw/1000) and (msimples>msimples[1])

venda = crossover(close, upperBol)
//(close >= (valorcompra + (valorcompra * 0.025))) 

strategy.entry ("Compra", strategy.long, when=compra)
strategy.entry ("Venda", strategy.short, when=venda)


//plotshape(series=compra, title="Compra", style=shape.triangleup, location=location.belowbar, color=green, text="COMPRA", size=size.small)
//plotshape(series=venda, title="Venda", style=shape.triangledown, location=location.abovebar, color=red, text="VENDA", size=size.small)