В процессе загрузки ресурсов... загрузка...

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

Автор:Чао Чжан, Дата: 2023-09-18 21:28:22
Тэги:

Обзор

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

Принцип

Эта стратегия основана на определении направления тренда индикаторов Брин-Белда. Брин-Белд - это полоса, состоящая из движущегося среднего и его стандартного разрыва. Средняя линия Брин-Белда - это движущийся средний на n дней, верхняя линия - это средняя линия +2 раз стандартного разрыва, нижняя линия - это средняя линия - 2 раз стандартного разрыва.

В частности, стратегия сначала рассчитывает максимальную цену, минимальную цену и среднюю цену за n дней (максимальная цена + минимальная цена) / 2). Затем рассчитывает расстояние между ценой закрытия и средней ценой, в зависимости от ее весового движения, что составляет среднюю линию Бринга, а внизу внизу внизу добавляется стандартная разница в два раза.

Если цена закрытия выходит из траектории, это означает, что она растет; если она выходит из траектории, это означает, что она падает; если она выходит из траектории, это означает, что она падает.

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

Преимущества

  1. Использование ленты для определения направления тренда имеет определенную способность отслеживать тенденции.

  2. В результате реверсивные позиции могут принести прибыль.

  3. Можно настроить параметры, такие как циклы Бринга, кратность стандартного отклонения, чтобы адаптироваться к различным циклам.

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

Риски и противодействия

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

  2. Сигналы прорыва могут вызывать ложные прорывы. Сигналы могут быть отфильтрованы другими факторами.

  3. Начало обратной операции может привести к дальнейшему увеличению потерь.

  4. Отзыв может быть более крупным.

Оптимизация

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

  2. Можно проверить кратность стандартного расхождения по Брин-Белду, чтобы найти более подходящие параметры.

  3. Внедряется стратегия остановки потерь, чтобы контролировать однократные потери.

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

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

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

Обзор

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

Принципы

Стратегия в основном основана на индикаторе Болинджеровских полос для определения направления тренда. Болинджеровские полосы состоят из средней полосы, основанной на скользящей средней и верхних/нижних полосах, определяемых стандартными отклонениями. Средняя полоса представляет собой скользящую среднюю за n периодов, верхняя полоса представляет собой среднюю полосу + 2 стандартных отклонений, а нижняя полоса представляет собой среднюю полосу - 2 стандартных отклонений.

В частности, стратегия сначала рассчитывает самый высокий и самый низкий минимум за последние n периодов, а также среднюю цену ((самый высокий + самый низкий минимум) / 2). Затем она рассчитывает расстояние между ценой закрытия и средней ценой, использует экспоненциальную скользящую среднюю расстояния, чтобы сформировать среднюю полосу, и добавляет / вычитает 2 раза стандартного отклонения выше и ниже, чтобы сформировать верхние и нижние полосы.

Когда цена закрытия прорывается через верхнюю полосу, это сигнализирует о восходящем тренде; когда она прорывается в нижнюю полосу, это сигнализирует о нисходящем тренде.

Кроме того, стратегия включает в себя механизм противодействия тренду. Когда цена переходит верхнюю полосу, но MACD падает, она займет короткую позицию против тренда.

Преимущества

  1. Использование полос Боллинджера для определения направления тренда обеспечивает определенную способность следовать за трендом.

  2. Контр-трендовый дизайн позволяет извлекать выгоду из реверсий.

  3. Настраиваемые параметры, такие как кратность периода и стандартного отклонения, делают его адаптивным к различным горизонтам торговли.

  4. Обезвредить торговлю с противоположным трендом для снижения риска.

Риски и способы их смягчения

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

  2. Сигналы прорыва могут иметь ложные прорывы, могут добавлять фильтры с другими индикаторами.

  3. Торговля с контртендом может еще больше увеличить убытки.

  4. Снижение может быть значительным, может регулировать размер позиции.

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

  1. Подумайте о добавлении фильтра тренда, чтобы избежать схватки на недирекционных рынках.

  2. Испытывайте разные кратные стандартного отклонения, чтобы найти оптимальные параметры.

  3. Включить стоп-лосс для контроля одиночных потерь.

  4. Оптимизировать логику входа и добавления для более четких торговых сигналов.

Резюме

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


/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Bands Scalper Strategy v1.6", shorttitle = "Scalper str 1.6", 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")
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")
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, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00)
    strategy.close_all()

Больше