
Основная идея этой стратегии заключается в том, чтобы использовать динамическую склонность для определения направления ценовой тенденции и создания торговых сигналов в сочетании с прорывом. В частности, она будет в реальном времени отслеживать новые высокие и новые низкие точки цены, рассчитывать динамическую склонность в зависимости от изменения цены в течение разных временных периодов, а затем в сочетании с прорывом цены на линию тренда для определения более свободного сигнала.
Эта стратегия состоит из следующих основных шагов:
Определение максимумов и минимумов: отслеживание максимумов и минимумов в течение определенного цикла (например, 20 K-линий), чтобы определить, является ли это инновационным высоким или новым низким
Вычислить динамический наклон: пронумеровать K-линии, записывающие новое высокое или новое низкое, и вычислить динамический наклон для высоких и низких точек после определенного цикла (например, 9 K-линий) от высокого и низкого уровня инноваций
Нарисуйте линию тренда: нарисуйте линию тренда вверх и вниз в зависимости от динамического наклона
Удлинение и обновление трендовых линий: удлинение и обновление трендовых линий при прорыве цены
Торговые сигналы: в сочетании с прорывом цены в сторону трендовой линии, сигналы о перепродаже и об убыточности
Эта стратегия имеет следующие преимущества:
Динамично оценивать тенденции, гибко реагировать на изменения рынка
Умение разумно контролировать стоп-лосс, отзывы
Прорывные торговые сигналы понятны и просты в реализации
Настраиваемые параметры, адаптивность
Ясная структура кода, легко понятная и вторичная разработка
Однако есть и другие риски:
При колебаниях трендов рекомендуется добавлять фильтрующие условия
Вероятность ложных прорывов выше, параметры могут быть изменены или добавлены фильтрующие условия.
Стоп-риск при резких изменениях ситуации может быть увеличен
Ограниченный простор для оптимизации, ограниченная прибыльность, подходит для коротких линий торговли
Мы можем улучшить эту стратегию, например, в следующих областях:
Добавить дополнительные технические показатели для фильтрации сигналов
Оптимизируйте комбинацию параметров, чтобы найти оптимальный параметр
Попытки улучшить стратегию по снижению убытков и снижению риска
Добавлена функция автоматической коррекции интенсивности входа
Попробуйте совместить это с другими стратегиями, чтобы открыть больше возможностей.
Эта стратегия в целом является эффективной стратегией короткой линии, основанной на динамическом склонении к определению тенденции и прорыву торгов. Она определяет точные, управляемые риски, подходящие для захвата коротких возможностей на рынке.
/*backtest
start: 2024-01-06 00:00:00
end: 2024-01-19 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © pune3tghai
//Originally posted by matsu_bitmex
//tried adding alerts on plots and cleared the chart for a cleaner view.
//Publishing the script in hope of getting it improved by someone else.
//Added strategy code for easier calculations
//Needs work on TP and SL part.
//P.S - THE ORIGINAL CODE IS MUCH BETTER BUT I have tried to be more usable and understandable.
//@version=4
strategy("TrendLines with Alerts", overlay=true) //study("TrendLines with Alerts", overlay=true)
//update
length1 = input(20)
check = input(9)
//length2 = input(200)
u=0.0
u := u[1]
l=0.0
l := l[1]
y=0.0
y := y[1]
yl=0.0
yl := yl[1]
angle = 0.0
angle := angle[1]
anglel = 0.0
anglel := anglel[1]
if (highest(length1) == high[check] and highest(length1) == highest(length1)[check] and barssince(barstate.isfirst) > check)
u := high[check]
if (lowest(length1) == low[check] and lowest(length1) == lowest(length1)[check] and barssince(barstate.isfirst) > check)
l := low[check]
p = round(barssince(u == high[check]))
pl = round(barssince(l == low[check]))
if p == 0 and barssince(barstate.isfirst) > check
y := high[abs(p[1]+1+check)]
if pl == 0 and barssince(barstate.isfirst) > check
yl := low[abs(pl[1]+1+check)]
if p == 0
angle := (u-y)/p[1]
if pl == 0
anglel := (l-yl)/pl[1]
uppertrend = u+ (p * angle)
lowertrend = l+ (pl * anglel)
extendup = if barssince(barstate.isfirst) > check
uppertrend[check] + angle[check] * check*2
extenddown = if barssince(barstate.isfirst) > check
lowertrend[check] + anglel[check] * check*2
//plot(l[offset]-u,color=red)
//plot(u[offset]-l,color = green )
plot(lowertrend, color = color.green, transp=30,offset = -check)
plot(extenddown, color = color.green, transp=100)
plot(uppertrend, color = color.red, transp=30, offset = -check)
plot(extendup, color = color.red, transp=100)
//plot(l[offset], color = red)
l1 = lowertrend
l2 = extenddown
u1 = uppertrend
u2 = extendup
l2sell = crossunder(high, l2)
u2buy = crossover(low, u2)
buy1 = (low<=lowertrend) and open>lowertrend and high>lowertrend and close>lowertrend
buy2 = (low<=extenddown) and open>extenddown and high>extenddown and close>extenddown
buy = buy1 or buy2 or u2buy
plotshape(series=buy, title="Buy", style=shape.triangleup, size=size.tiny, color=color.lime, location=location.belowbar)
sell1 = (high>=uppertrend) and open<uppertrend and low<uppertrend and close<uppertrend
sell2 = (high>=extendup) and open<extendup and low<extendup and close<extendup
sell = sell1 or sell2 or l2sell
plotshape(series=sell, title="Sell", style=shape.triangledown, size=size.tiny, color=color.red, location=location.abovebar)
longCond = buy
shortCond = sell
tp = input(0.2, title="Take Profit")
tpbuyval = valuewhen(buy, close, 1) + (tp/100)*(valuewhen(buy, close, 1))
tpsellval = valuewhen(sell, close, 1) - (tp/100)*(valuewhen(sell, close, 1))
sl = input(0.2, title="Stop Loss")
slbuyval = valuewhen(buy, close, 0) - (sl/100)*(valuewhen(buy, close, 0))
slsellval = valuewhen(sell, close, 0) + (sl/100)*(valuewhen(sell, close, 0))
// === STRATEGY ===
tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])
// stop loss
slPoints = input(defval=0, title="Initial Stop Loss Points (zero to disable)", minval=0)
tpPoints = input(defval=0, title="Initial Target Profit Points (zero for disable)", minval=0)
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
testStartYear = input(2019, "Backtest Start Year", minval=1980)
testStartMonth = input(1, "Backtest Start Month", minval=1, maxval=12)
testStartDay = input(1, "Backtest Start Day", minval=1, maxval=31)
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
testStopYear = input(9999, "Backtest Stop Year", minval=1980)
testStopMonth = input(12, "Backtest Stop Month", minval=1, maxval=12)
testStopDay = input(31, "Backtest Stop Day", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//
//
//set up exit parameters
TP = tpPoints > 0 ? tpPoints : na
SL = slPoints > 0 ? slPoints : na
// Make sure we are within the bar range, Set up entries and exit conditions
if testPeriod() and tradeType != "NONE"
strategy.entry("long", strategy.long, when=longCond == true and tradeType != "SHORT")
strategy.entry("short", strategy.short, when=shortCond == true and tradeType != "LONG")
strategy.close("long", when=shortCond == true and tradeType == "LONG")
strategy.close("short", when=longCond == true and tradeType == "SHORT")
strategy.exit("XL", from_entry="long", profit=tpbuyval, loss=slbuyval)
strategy.exit("XS", from_entry="short", profit=tpsellval, loss=slsellval)
// === /STRATEGY ===
//EOF
////ALERT SYNTEX
//alertcondition(longCond, title="Long", message="Killer Market")
//alertcondition(shortCond, title="Short", message="Poopy Market")