Стратегия использует множество технических показателей для оценки ценовых тенденций и подачи сигналов о покупке и продаже.
Эта стратегия основана на определении ценовых тенденций на основе следующих технических показателей:
Супертенденциальный индикатор ((SuperTrend): в зависимости от ATR рассчитывается верхняя и нижняя полосы, цена пробивает верхнюю полосу, пробивает нижнюю полосу;
Простая скользящая средняя ((SMA): цена выше по SMA, ниже по SMA;
Показатель динамики (Momentum): ценовая динамика положительная, положительная, отрицательная, отрицательная;
MACD: DIFF с лихвой вверх и лихвой вниз от линии DEA;
“Булл и Беар” (Bull and Bear): “Булл и Беар” (Bull and Bear): “Булл и Беар” (Bull and Bear): “Булл и Беар” (Bull and Bear): “Булл и Беар” (Bull and Bear): “Булл и Беар” (Bull and Bear): “Булл и Беар” (Bull and Bear): “Булл и Беар”
RSI: RSI выше 30 и ниже 70.
Ячеиная линия: N последовательных ячеиных линий, N последовательных ячеиных линий;
CCI: CCI больше 100 плюс, меньше 100 минус;
DMI: DMI-поливоны больше, чем пустые, и пустые, наоборот;
Рыночные волны: оценка того, что цены на рынке слишком высоки, а низкие волны пусты;
Случайный индикатор: на случайном индикаторе проделывайте 20 линий больше, а на нижнем проделывайте 80 линий.
Результаты вычислений этих индикаторов дают 1 или -1 балл в зависимости от направления вверх или вниз. Если суммировать все баллы индикаторов, то получается суммарное количество баллов.
Наибольшим преимуществом такой многоиндикаторной комбинации является высокая надежность. Благодаря комплексному использованию нескольких индикаторов для определения направления тенденции, можно эффективно уменьшить ложные сигналы, что делает сигнал более надежным. По сравнению с одним индикатором, эта комбинация стратегий имеет лучшую надежность и стабильность.
Еще одним преимуществом является гибкость и настраиваемость стратегии. Настройки типов и параметров индикаторов могут быть скорректированы в зависимости от различных рынков, что делает стратегию более адаптированной к различным ситуациям.
Однако есть некоторые риски, о которых следует помнить:
Если выбранная индикаторная корреляция слишком высока, возникает риск дублирования сигналов. Это требует комбинации индикаторов с низкой корреляцией в зависимости от различных рыночных условий.
Если количество индикаторов слишком большое, время вычисления слишком длинное, это может повлиять на своевременность передачи сигнала. Нужно взвесить связь между количеством индикаторов и своевременностью.
Неправильная настройка параметров индикатора также может повлиять на эффективность стратегии, требуя полной обратной связи для поиска оптимальных параметров.
В зависимости от рыночной фазы, эффективность индикаторов может варьироваться. Необходимо постоянно проверять их эффективность с помощью прокрутки.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизируйте количество и разновидности индикаторов, чтобы выбрать оптимальную комбинацию.
Оптимизация параметров каждого индикатора;
Изменение весового соотношения индикаторов, повышение веса ключевых индикаторов;
Добавление фильтров условий, таких как всплеск объемов торгов, для предотвращения ложных прорывов;
Применение метода портфеля моделей для автоматического поиска оптимального портфеля стратегий с помощью алгоритмов машинного обучения.
В целом, эта многоиндикаторная комбинационная стратегия использует преимущества различных индикаторов, объединяет направление тренда, может уменьшить ложные сигналы и повысить надежность сигнала. Благодаря оптимизации выбора индикаторов, параметров, распределения веса и т. Д., можно постоянно повышать стабильность стратегии.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Super indicator ", overlay=true, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)
/////////////// Time Frame ///////////////
_0 = input(false, "════════ Test Period ═══════")
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() =>true
hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol1 = (volume / hilow)
spreadvol = (openclose * vol1)
VPT = spreadvol + cum(spreadvol)
window_len = 28
v_len = 14
price_spread = stdev(high-low, window_len)
vp = spreadvol + cum(spreadvol)
smooth = sma(vp, v_len)
v_spread = stdev(vp - smooth, window_len)
shadow = (vp - smooth) / v_spread * price_spread
out1 = shadow > 0 ? high + shadow : low + shadow
//plot(out, style=line,linewidth=3, color=color)
len=5
vpt=ema(out1,len)
// INPUTS //
st_mult =3
st_period = 7
// CALCULATIONS //
up_lev = vpt - (st_mult * atr(st_period))
dn_lev = vpt + (st_mult * atr(st_period))
up_trend = 0.0
up_trend := close[1] > up_trend[1] ? max(up_lev, up_trend[1]) : up_lev
down_trend = 0.0
down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev
// Calculate trend var
trend10 = 0
trend10 := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend10[1], 1)
// Calculate SuperTrend Line
st_line = trend10 ==1 ? up_trend : down_trend
//
src = input(close, title="Source")
//sma
sma20 = sma(src, 20)
smapoint = 0
smapoint := src > sma20 ? smapoint + 1 : smapoint - 1
//AO
ao = sma(hl2,5) - sma(hl2,34)
aopoint = ao > 0 ? 1 : ao < 0 ? -1 : 0
//momentum
mom = src - src[14]
mompoint = mom > 0 ? 1 : mom < 0 ? -1 : 0
//MACD
fast_ma = ema(src, 12)
slow_ma = ema(src, 26)
macd = fast_ma - slow_ma
signal = ema(macd, 9)
hist = macd - signal
histpoint = hist > hist[1] ? 3 : -3
//Bull bear
Length = 30
r1=iff(close[1]<open,max(open-close[1],high-low),high-low)
r2=iff(close[1]>open,max(close[1]-open,high-low),high-low)
bull=iff(close==open,iff(high-close==close-low,iff(close[1]>open,max(high-open,close-low),r1),iff(high-close>close-low,iff(close[1]<open, max(high-close[1],close-low), high-open),r1)),iff(close<open,iff(close[1]<open,max(high-close[1],close-low), max(high-open,close-low)),r1))
bear=iff(close==open,iff(high-close==close-low,iff(close[1]<open,max(open-low,high-close),r2),iff(high-close>close-low,r2,iff(close[1]>open,max(close[1]-low,high-close), open-low))),iff(close<open,r2,iff(close[1]>open,max(close[1]-low,high-close),max(open-low,high-close))))
colors=iff(sma(bull-bear,Length)>0, color.green, color.red)
// barcolor(colors)
bbpoint = sma(bull-bear,Length)>0 ? 1 : -1
//UO
length7 = 7,
length14 = 14,
length28 = 28
average(bp, tr_, length) => sum(bp, length) / sum(tr_, length)
high_ = max(high, src[1])
low_ = min(low, src[1])
bp = src - low_
tr_ = high_ - low_
avg7 = average(bp, tr_, length7)
avg14 = average(bp, tr_, length14)
avg28 = average(bp, tr_, length28)
uoout = 100 * (4*avg7 + 2*avg14 + avg28)/7
uopoint = uoout > 70 ? 1 : uoout < 30 ? -1 : 0
//IC
conversionPeriods = 9
basePeriods = 26
laggingSpan2Periods = 52
displacement = 26
donchian(len) => avg(lowest(len), highest(len))
baseLine = donchian(basePeriods)
icpoint = src > baseLine ? 1 : -1
//HMA
hullma = wma(2*wma(src, 9/2)-wma(src, 21), round(sqrt(21)))
hmapoint = src > hullma ? 2 : -2
//
//
trendDetectionLength =4
float trend = na
float wave = na
float vol = na
mov = close>close[1] ? 1 : close<close[1] ? -1 : 0
trend := (mov != 0) and (mov != mov[1]) ? mov : nz(trend[1])
isTrending = rising(close, trendDetectionLength) or falling(close, trendDetectionLength)
wave := (trend != nz(wave[1])) and isTrending ? trend : nz(wave[1])
vol := wave == wave[1] ? (nz(vol[1])+volume) : volume
up1 = wave == 1 ? vol : 0
dn1 = wave == 1 ? 0 : vol
Weis= up1 > dn1 ? 2 : -2
//
roclen =20
ccilen =21
dilen = 5
dirmov(len) =>
up = change(high)
down = -change(low)
truerange = rma(tr, len)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
[plus, minus]
f_draw_infopanel(_x, _y, _line, _text, _color)=>
_rep_text = ""
for _l = 0 to _line
_rep_text := _rep_text + "\n"
_rep_text := _rep_text + _text
var label _la = na
label.delete(_la)
_la := label.new(
x=_x, y=_y,
text=_rep_text, xloc=xloc.bar_time, yloc=yloc.price,
color=color.black, style=label.style_labelup, textcolor=_color, size=size.normal)
TD = 0
TS = 0
TD := close > close[4] ? nz(TD[1]) + 1 : 0
TS := close < close[4] ? nz(TS[1]) + 1 : 0
TDUp = TD - valuewhen(TD < TD[1], TD , 1 )
TDDn = TS - valuewhen(TS < TS[1], TS , 1 )
td = TDUp > 0 ? 2 : TDDn > 0 ? -2 : 0
roc = roc(close, roclen)
Roc=roc > 0 ? 1 : -1
cci = cci(close, ccilen)
CCI=cci > 0? 2 : -2
[plus, minus] = dirmov(dilen)
dmi = plus - minus
DMI= dmi >= 0? 2 : -2
//
STT=trend10 == 1 ? 1 : -1
//
periods = 2
smooth1 = 14
price = close
fn(src, length) =>
MA_s= 0.0
MA_s:=(src + nz(MA_s[1] * (length-1)))/length
MA_s
r11 = ema( price, periods )
r22 = iff( price > r11, price - r11, 0 )
r3 = iff( price < r11, r11 - price, 0 )
r4 = fn( r22, smooth1 )
r5 = fn( r3, smooth1 )
rr = iff( r5 == 0, 100, 100 - ( 100 / ( 1 + ( r4 / r5 ) ) ) )
length = 20,fast = 7,slow = 13
//
src10 = rr
er = abs(change(src,length))/sum(abs(change(src10)),length)
dev = er*stdev(src10*2,fast) + (1-er)*stdev(src10*2,slow)
a = 0.
a := bar_index < 9 ? src10 : src10 > a[1] + dev ? src10 : src10 < a[1] - dev ? src10 : a[1]
//
rsi=fixnan(a > a[1] ? 3 : a < a[1] ?-3 : na)
//
totalpoints =rsi+td+STT+Roc+DMI+ CCI+Weis+smapoint + aopoint + mompoint + histpoint + bbpoint + icpoint + hmapoint
//
piz=input(1)
tt=sma(totalpoints,piz)
//
zero=0
down = crossunder(tt, 0)
up = crossover(tt, -0)
//Alerts
/////// Alerts /////
alertcondition(down,title="sell")
alertcondition(up,title="buy")
//
/////////////// Strategy ///////////////
long = up
short = down
strategy.entry("Long", strategy.long, when = long)
strategy.entry("Short", strategy.short, when = short)