Стратегия одностороннего трендового шокового прорыва

Автор:Чао Чжан, Дата: 2024-01-18 14:59:30
Тэги:

img

Обзор

Стратегия одностороннего тренда шока - это стратегия выхода, которая использует ценовые каналы и суждение о тренде.

Логика стратегии

Стратегия рассчитывает верхние и нижние диапазоны ценового канала с использованием самых высоких и самых низких цен за последние N периодов. Затем вычисляется средняя линия цены. Расстояния между ценами и средней линией усредняются для получения диапазонов каналов.

Для обнаружения тренда стратегия проверяет, закрываются ли последние свечи выше (бычьи) или ниже (медвежие) канала. После подтверждения тренда она ждет ценовых шоков вблизи диапазонов и входит в обратном направлении.

Прорывы тела дополняют сигналы входа, когда длина тела превышает кратное средней длине тела.

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

Основными преимуществами этой стратегии являются:

  1. Фильтры ценового канала снижают риски ложного прорыва
  2. Обратные записи получают прибыль от шоков тренда
  3. Прорыв тела улучшает точность входа.
  4. Цель прибыли позволяет активно получать прибыль

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

Существуют также некоторые риски:

  1. Неправильный параметр канала может чрезмерно расширить или сузить канал
  2. Обратные действия против сильных тенденций могут привести к большим потерям
  3. Взрывы тела, как правило, генерируют ложные сигналы на вершинах.
  4. Жесткая цель прибыли может оставить прибыль на столе

Эти проблемы можно решить с помощью настройки параметров, избежания переворотов во время сильных тенденций, оптимизации логики выхода и т. Д.

Возможности для расширения

Некоторые способы улучшения стратегии:

  1. Добавление индикаторов тенденций для подтверждения тенденций
  2. Оптимизируйте параметры выхода тела, чтобы уменьшить ложные сигналы
  3. Дополнительные фильтры по времени входа
  4. Динамическая корректировка целевой прибыли

Заключение

Стратегия одностороннего тренда шока получает прибыль от вырывов против тренда в диапазоне периодов. Она имеет преимущество идентификации тренда и активного получения прибыли, но также имеет некоторые риски. Эти риски могут быть уменьшены за счет многофакторного подтверждения, оптимизации параметров и т. Д. Стратегия подходит для краткосрочной торговли и может дополнять стратегии, следующие за трендом.


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.5", shorttitle = "Scalper str 1.5", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
bodylen = input(10, defval = 10, minval = 0, maxval = 50, title = "Body length")
trb = input(1, defval = 1, minval = 1, maxval = 5, title = "Trend bars")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
chd = close > hd
cld = close < ld
uptrend = trb == 1 and chd ? 1 : trb == 2 and chd and chd[1] ? 1 : trb == 3 and chd and chd[1] and chd[2] ? 1 : trb == 4 and chd and chd[1] and chd[2] and chd[3] ? 1 : trb == 5 and chd and chd[1] and chd[2] and chd[3] and chd[4] ? 1 : 0
dntrend = trb == 1 and cld ? 1 : trb == 2 and cld and cld[1] ? 1 : trb == 3 and cld and cld[1] and cld[2] ? 1 : trb == 4 and cld and cld[1] and cld[2] and cld[3] ? 1 : trb == 5 and cld and cld[1] and cld[2] and cld[3] and cld[4] ? 1 : 0
trend = dntrend == 1 and high < center ? -1 : uptrend == 1 and low > center ? 1 : trend[1]

//trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30) / 10 * bodylen

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

Больше