Эта стратегия рассчитывает последнюю самую высокую цену (lastbull) и последнюю самую низкую цену (lastbear). Затем она сравнивает текущую цену с lastbull и lastbear, чтобы определить, вошла ли цена в определенный диапазон и, таким образом, генерирует торговые сигналы. Она длинная, когда цена повышается над lastbull на определенный процент, и короткая, когда цена падает ниже lastbear на определенный процент.
Стратегия сначала рассчитывает последнюю самую высокую цену lastbull и последнюю самую низкую цену lastbear. затем она рассчитывает процент изменения ddl текущей ценой ближе к lastbull, и процент изменения dds относительно lastbear.
Когда ddl ниже установленного порогового значения длинного сигнала, генерируется длинный сигнал. Когда dds выше установленного порогового значения короткого сигнала, генерируется короткий сигнал dn.
При получении длинного сигнала, он открывает длинную позицию, если параметр needlong является истинным. При получении короткого сигнала, он открывает короткую позицию, если параметр needshort является истинным. Размер капитала позиции рассчитывается из собственного капитала счета.
Он закрывает длинную позицию, когда цена повышается после открытия длинной, и закрывает короткую позицию, когда цена падает после открытия короткой.
Эта стратегия сочетает в себе анализ тренда и диапазона. Она может улавливать тенденции и генерировать торговые сигналы из прорывов диапазона. По сравнению с простыми стратегиями отслеживания тренда, она может быстро улавливать новое направление тренда после прорыва диапазона.
Параметры очень настраиваемы для разных продуктов.
В этой стратегии нет механизма стоп-лосса для ограничения потерь на одну сделку.
Стоп-лосс может быть добавлен, чтобы ограничить потери на одну сделку. Алгоритм размещения позиции может быть настроен на основе продуктов для стабилизации размера позиции.
Эта стратегия сочетает в себе анализ трендов и прорыв диапазона для генерации торговых сигналов, которые могут улавливать новые тенденции и использовать преимущества характеристик диапазона.
/*backtest start: 2023-01-25 00:00:00 end: 2024-01-31 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=4 strategy(title = "Noro's DDL Strategy", shorttitle = "DDL str", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings needlong = input(true, title = "Long") needshort = input(true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") signalshort = input(3.0, title = "Short, %") signallong = input(-3.0, title = "Long, %") 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") //Levels bull = close > close[1] ? 1 : 0 bear = close < close[1] ? 1 : 0 lastbull = 0.0 lastbull := bull ? close : lastbull[1] lastbear = 0.0 lastbear := bear ? close : lastbear[1] //Signals ddl = ((close / lastbull) - 1) * 100 up = ddl < signallong dds = ((close / lastbear) - 1) * 100 dn = dds > signalshort //Lines plot(dds, style = plot.style_area, color = color.red, transp = 0) plot(ddl, style = plot.style_area, color = color.lime, transp = 0) plot(0, color = color.black, linewidth = 2, transp = 0) //Background col = (up and needlong) or (dn and needshort) ? color.yellow : na bgcolor(col, transp = 20) //Orders lot = 0.0 lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] truetime = true if up strategy.entry("Long", strategy.long, lot, when = needlong and truetime) if dn strategy.entry("Short", strategy.short, lot, when = needshort and truetime) if strategy.position_size > 0 and close > open strategy.entry("Close", strategy.short, 0) if strategy.position_size < 0 and close < open strategy.entry("Close", strategy.long, 0)