Двухнаправленная стратегия отслеживания тренда на основе прорыва диапазона

Автор:Чао Чжан, Дата: 2024-02-01 14:22:26
Тэги:

img

Обзор

Эта стратегия рассчитывает последнюю самую высокую цену (lastbull) и последнюю самую низкую цену (lastbear). Затем она сравнивает текущую цену с lastbull и lastbear, чтобы определить, вошла ли цена в определенный диапазон и, таким образом, генерирует торговые сигналы. Она длинная, когда цена повышается над lastbull на определенный процент, и короткая, когда цена падает ниже lastbear на определенный процент.

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

Стратегия сначала рассчитывает последнюю самую высокую цену lastbull и последнюю самую низкую цену lastbear. затем она рассчитывает процент изменения ddl текущей ценой ближе к lastbull, и процент изменения dds относительно lastbear.

Когда ddl ниже установленного порогового значения длинного сигнала, генерируется длинный сигнал. Когда dds выше установленного порогового значения короткого сигнала, генерируется короткий сигнал dn.

При получении длинного сигнала, он открывает длинную позицию, если параметр needlong является истинным. При получении короткого сигнала, он открывает короткую позицию, если параметр needshort является истинным. Размер капитала позиции рассчитывается из собственного капитала счета.

Он закрывает длинную позицию, когда цена повышается после открытия длинной, и закрывает короткую позицию, когда цена падает после открытия короткой.

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

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

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

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

В этой стратегии нет механизма стоп-лосса для ограничения потерь на одну сделку.

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

Руководство по оптимизации

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

Резюме

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


/*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)

Больше