
Это количественная торговая стратегия, разработанная на основе LazyBear. Она включает в себя блокчейн, кальцинированные каналы и динамические индикаторы, чтобы достичь высокой выигрышной динамической сделки с использованием комбинации различных технических показателей.
Центральным показателем этой стратегии является индикатор динамического выдавливания LazyBear. Этот показатель определяет, была ли буринская лента выдавлена кальцинированным кальцинированным кальцинированным кальцинированным кальцинированным кальцинированным кальцином.
В частности, эта стратегия рассчитывает сначала 21-циклическую полосу Бринна с протяженностью в 2 раза большей, чем стандартная разница между ценами. В то же время рассчитывается 20-циклическая калькуляционная полоса с протяженностью в 1,5 раза большей, чем колебание цены.
На выезде, когда цвет динамического индикатора становится серым, сглаживая позиции, что означает конец экстремального состояния, тренд может быть перевернут.
Эта стратегия включает в себя Брин-пояса, Калькинские каналы и динамические показатели, которые, оценивая их взаимосвязь, позволяют повысить точность принятия торговых решений и снизить вероятность ошибочных сделок.
Движущаяся стратегия выдавливания может захватить ключевые точки рыночного взрыва, которые часто являются поворотными точками, когда рынок делает важные направленные решения, и если они верны, то последующие движения будут относительно длинными, поэтому потенциальный прибыль от стратегии велика.
По сравнению с случайными прорывными сделками, выбранные входные точки в стратегии находятся в точках сжатия Брин-Бенда и Калькинского канала и имеют высокий уровень успешности сделок, судя по интегрированным показателям.
Настройка параметров цикличности и пропускной способности в Бринской и Калькинской каналах оказывает большое влияние на результаты торговли. Неправильная настройка параметров может привести к ошибочному суждению. Для этого необходимо найти оптимальные параметры с помощью большого количества обратных измерений.
Любая сделка с прорывом сопряжена с риском неудачи, и, когда цена прорывает точку, выбранную этой стратегией, возможен еще один отказ, что приводит к убыткам. Это требует строгого сдерживания убытков.
Когда вытеснение заканчивается, стратегия устраняет все позиции. Однако иногда ценовая тенденция может продолжаться, что создает риск раннего выхода из стратегии. Это требует оптимизации логики выхода из игры.
Для улучшения эффективности стратегии можно использовать большое количество данных обратной пробной ошибки, чтобы найти лучшие параметры циклов и полосы пропускания в лентах Бринга и Калькина.
Можно установить движущийся или волатильный стоп, чтобы быстро остановить его при обратном движении цены и контролировать максимальное отступление стратегии.
Когда стратегия выходит из позиции, можно установить определенные условия повторного входа, если тенденция продолжится, можно снова войти в поле.
Можно попытаться объединить больше различных типов показателей, таких как другие показатели волатильности, показатели загруженности и т. д., чтобы создать комбинированную стратегию с интеграцией показателей для повышения точности принятия решений.
Стратегия включает в себя пояса Брин, кальцинированные каналы и динамические показатели, и, судя по взаимосвязи этих показателей, выбирает точки прорыва с высокой вероятностью успеха. Есть место для оптимизации в нескольких аспектах, таких как оптимизация параметров, стратегия остановки убытков, условия повторного входа в игру и интеграция комплексных показателей, которые могут еще больше повысить эффективность стратегии.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//All credits to LazyBear. All I did was turn it into a strategy!
strategy(title = "SQZMOM STRAT", overlay=false)
// --- GENERAL INPUTS ---
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromYear = input(defval = 2020, title = "From Year", minval = 2012)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
FromDay = 1
ToDay = 1
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true
get_round(value, precision) => round(value * (pow(10, precision))) / pow(10, precision)
trade_leverage = input(1, title = "Trade - Leverage", step = 0.25)
trade_risk = input(100, title = "Trade - Risk Percent", type = input.float, step = 0.1, minval = 0.1, maxval = 100)
tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH"])
// --- SQZMOM CODE
length = input(21, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool)
// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev
// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC
sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = (sqzOn == false) and (sqzOff == false)
val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)
bcolor = color.gray
if (val > 0 and val > nz(val[1]))
bcolor := color.green
if (val < 0 and val < nz(val[1]))
bcolor := color.red
scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)
// --- VWMA CODE ---
useVWMA = input(false, title = "Use VWMA to selectively long/short?", type = input.bool)
lengthVWMA=input(42, title = "VWMA Length", step = 1, minval = 1)
useCV=input(false, type=input.bool, title="Use Cumulative Volume for VWMA?")
nbfs = useCV ? cum(volume) : sum(volume, lengthVWMA)
medianSrc=close
calc_evwma(price, lengthVWMA, nb_floating_shares) => data = (nz(close[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares)
m=calc_evwma(medianSrc, lengthVWMA, nbfs)
// ---STRATEGY---
if ((tradeType == "LONG" or tradeType == "BOTH") and (m>0 or useVWMA == false))
longCondition = (val > 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1)
if (longCondition)
contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4)
strategy.entry("LONG", strategy.long, qty = contracts, when = window())
if((tradeType == "SHORT" or tradeType == "BOTH") and (m<0 or useVWMA == false))
shortCondition = (val < 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1)
if (shortCondition)
contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4)
strategy.entry("SHORT", strategy.short, qty = contracts, when = window())
if (bcolor == color.gray)
strategy.close("LONG")
strategy.close("SHORT")