
Двойная среднелинейная взрывная стратегия - это стратегия короткой торговли, использующая систему двойной среднелинейной системы. Эта стратегия строит торговый сигнал на основе ценового канала и двойной бурин-полосы, дополненный быстрым показателем RSI для определения перекупа и перепродажи, что создает сигналы входа и выхода. Эта стратегия предназначена для захвата прорывов в коротких ценовых тенденциях и получения прибыли.
Двойная среднелинейная стратегия прорыва использует ценовые каналы длиной 20 циклов и брин-полосы в качестве основных торговых показателей. Ценовые каналы состоят из средних линий наивысшей и низшей цены, представляющих собой колебательные зоны текущей цены. Брин-полосы состоят из центральной оси ценового канала и стандартного разрыва, а полосообразная область более интуитивно описывает диапазон колебаний цен.
В частности, когда быстрый RSI ниже 5 считается зоной перепродажи, а когда быстрый RSI превышает 99, считается зоной перекупа. Кроме того, необходимо совмещать такие факторы, как направление объекта K-линии, инновационный рост цены (высокий / новый низкий), чтобы избежать ложных прорывов в начале.
Наибольшим преимуществом стратегии двойного среднелинейного колебания является то, что она захватывает переломные моменты средне-коротких ценовых тенденций и приводит к прибыли. По сравнению с одиночной средней линией и каналом, двойная буринная полоса более интуитивно отражает колебания цен и емкость. По сравнению с более длительными циклическими показателями, такими как 20-дневная, 60-дневная средняя линия и т. Д., она реагирует на ценовые изменения быстрее и имеет более высокий уровень успеха в захвате переворотов. Кроме того, в сочетании с быстрым показателем RSI можно эффективно отфильтровать ложные переломы.
Во-первых, торговля средней короткой линией сама по себе имеет более высокий риск остановки убытков. Во-вторых, влияние быстрого RSI на решение о перекупке и перепродаже зависит от настроений рынка. В случае структурных изменений на рынке эффективность таких вспомогательных показателей снижается.
Противодействие заключается в соответствующей корректировке величины остановки убытков, ослаблении точки остановки убытков в восходящем движении, сжатии в нисходящем движении. Кроме того, необходимо учитывать дополнительные вспомогательные показатели, чтобы избежать зависимости от одного или двух показателей.
Есть еще место для дальнейшей оптимизации стратегии двойного прорыва среднелинейных колебаний: во-первых, оптимизация параметров: можно проверить больше параметров цикла, чтобы найти оптимальную комбинацию параметров: во-вторых, оптимизация модели: внедрение обучения модели машинного обучения для более точного определения зоны перепродажи; в-третьих, оптимизация временных рамок: тестирование в различных временных рамках, таких как солнечный свет, 60 минут и т. Д., для определения наиболее подходящих сценариев; в-четвертых, оптимизация условий: добавление большего количества ценовых показателей для определения фильтрующих сигналов, таких как увеличение объема оборота, индекс тренда DMI и т. Д.
Стратегия двойного равновесного колебания, используемая для захвата коротких прорывов в цене путем построения системы двойных брейнд-поясов, является эффективной стратегией для отслеживания тенденций. Стратегия имеет высокий уровень успеха, быстро реагирует и может эффективно приносить прибыль.
/*backtest
start: 2023-01-07 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Noro's Bands Strategy v1.4", shorttitle = "NoroBands str 1.4", 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")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, "Use ColorBar")
usecb = input(true, "Use CryptoBottom")
usersi = input(true, "Use RSI")
usemm = input(true, "Use min/max")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
needlo = input(false, defval = false, title = "Show Locomotive")
src = close
//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//CryptoBottom
mac = sma(close, 10)
lencb = abs(close - mac)
sma = sma(lencb, 100)
max = max(open, close)
min = min(open, close)
//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2
//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2
//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 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")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")
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)
//Signals
up = trend == 1 and ((close < open or color == false) or close < hd) and (min < min[1] or usemm == false) ? 1 : 0
dn = trend == -1 and ((close > open or color == false) or close > ld) and (max > max[1] or usemm == false) ? 1 : 0
up2 = close < open and lencb > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0 //CryptoBottom
//dn2 = close > open and len > sma * 3 and max > max[1] and fastrsi > 90 ? 1 : 0 //CryptoBottom
up3 = fastrsi < 5 ? 1 : 0
//dn3 = fastrsi > 99 ? 1 : 0
//Locomotive
uploco = trend == 1 and close < open and min < min[1] and close < center ? 1 : 0
plotarrow(needlo == true and uploco == 1 ? 1 : 0, colorup = black, colordown = black, transp = 0)
longCondition = up == 1 or (up2 == 1 and usecb == true) or (up3 == 1 and usersi == true)
if (longCondition)
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
shortCondition = dn == 1
if (shortCondition)
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)