
Спектральная стратегия - это стратегия отслеживания тенденций, основанная на ценовых каналах. Она использует быстрые и медленные тончинские каналы для определения направления тенденции и совершает покупки и продажи в низкие и высокие моменты, когда она меняется. Преимущество этой стратегии заключается в том, что она может автоматически отслеживать тенденции, своевременно останавливать убытки и открывать обратную позицию при изменении тенденции.
Сначала стратегия определяет циклы быстрых каналов как 20 K-линий, а медленных каналов - как 50 K-линий. Быстрые каналы используются для установления цены стоп-лосса, а медленные каналы - для определения направления тенденции и времени входа.
Стратегия начинается с вычисления максимальной и минимальной цены на быстром канале, а средняя линия является линией остановки. Одновременно вычисляются максимальная и минимальная цены на медленном канале, а верхняя и нижняя стороны каналов являются входными линиями.
Когда цена прорывает медленный канал, делайте больше; когда цена прорывает медленный канал, делайте пустоту. После входа, остановка убытков устанавливается на средней линии быстрого канала.
Таким образом, медленный канал определяет направление большого тренда, а быстрый канал следит за небольшим диапазоном, чтобы преодолеть остановку. Когда большая тенденция переворачивается, цена сначала преодолевает остановку быстрого канала, чтобы достичь остановки.
Автоматическое отслеживание тренда, своевременная остановка. Используя двухканальную структуру, можно автоматически отслеживать тренд, быстро останавливаясь при обратном тренде.
Открытие позиции с обратным отклонением имеет определенный эффект фильтрации тренда. Открытие позиции только тогда, когда цена пересекает границу канала, позволяет устранить некоторые не трендовые ложные прорывы.
Контролируемый риск. Стоп-лост близок, можно контролировать одиночные потери.
Большое отступление. Стратегия отслеживания трендов. Отступление может быть большим, требует психологической подготовки.
Стоп-точка слишком близка. Быстрый цикл прохождения короткий, стоп-дистанция близка, легко поддается обману. Быстрый цикл прохождения может быть соответствующим образом расширен.
Слишком большое количество сделок. Двухканальная структура приводит к большему количеству точек купли-продажи и требует разумного контроля позиций.
Добавление условий для фильтрации открытия позиции. В условия для открытия позиции можно добавить такие показатели, как волатильность, фильтрация прорывов с небольшой тенденцией.
Оптимизируйте параметры цикла канала. Можно найти оптимальную комбинацию параметров канала более систематическим способом.
Сочетание нескольких временных циклов принятия решений. Можно определить большие тенденции в более высоких временных циклах, в более низких циклах конкретные сделки.
Динамическая коррекция стоп-распада. Стоп-распада может быть динамически скорректирована в зависимости от степени волатильности рынка.
В целом, стратегия спектрального возраста является более стандартной стратегией отслеживания тенденций. Она использует ценовые каналы для определения направления тенденции и устанавливает остановки для контроля риска. Эта стратегия имеет определенные преимущества, но также существует проблема с отступлением и остановкой.
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2020
//@version=4
strategy("Noro's RiskTurtle Strategy", shorttitle = "RiskTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
risk = input(2, minval = 0.1, maxval = 99, title = "Risk size, %")
fast = input(20, minval = 1, title = "Fast channel (for stop-loss)")
slow = input(50, minval = 1, title = "Slow channel (for entries)")
showof = input(true, defval = true, title = "Show offset")
showll = input(true, defval = true, title = "Show lines")
showdd = input(true, defval = true, title = "Show label (drawdown)")
showbg = input(true, defval = true, title = "Show background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Donchian price channel fast
hf = highest(high, fast)
lf = lowest(low, fast)
center = (hf + lf) / 2
//Donchian price chennal slow
hs = highest(high, slow)
ls = lowest(low, slow)
//Lines
colorpc = showll ? color.blue : na
colorsl = showll ? color.red : na
offset = showof ? 1 : 0
plot(hs, offset = offset, color = colorpc, title = "Slow channel high")
plot(ls, offset = offset, color = colorpc, title = "Slow channel low")
plot(center, offset = offset, color = colorsl, title = "Fast channel stop-loss")
//Background
size = strategy.position_size
colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(colorbg, transp = 70)
//Var
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true
//Lot size
risksize = -1 * risk
risklong = ((center / hs) - 1) * 100
coeflong = abs(risksize / risklong)
lotlong = (strategy.equity / close) * coeflong
riskshort = ((center / ls) - 1) * 100
coefshort = abs(risksize / riskshort)
lotshort = (strategy.equity / close) * coefshort
//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and hs > 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and ls > 0 and truetime)
strategy.exit("LongExit", "Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("Long")
strategy.cancel("Short")
if showdd
//Drawdown
max = 0.0
max := max(strategy.equity, nz(max[1]))
dd = (strategy.equity / max - 1) * 100
min = 100.0
min := min(dd, nz(min[1]))
//Max loss size
equity := strategy.position_size == 0 ? strategy.equity : equity[1]
loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
maxloss := min(nz(maxloss[1]), loss)
//Label
min := round(min * 100) / 100
maxloss := round(maxloss * 100) / 100
labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
var label la = na
label.delete(la)
tc = min > -100 ? color.white : color.red
osx = timenow + round(change(time)*10)
osy = highest(100)
// la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)