Эта стратегия использует индикатор DSC (Distance Close Bars) для определения ценового тренда и индикатор быстрого RSI в качестве фильтра, реализует последующий стоп-лосс для тренда после торговли.
Вычислить lastg и lastr, представляющие собой последние зеленые и красные столбики.
Вычислить dist как разницу между lastg и lastr.
Расчет adist как 30-периодного SMA dist.
Сгенерируйте торговый сигнал, когда расстояние больше 2 раз от расстояния.
Используйте быстрый индикатор RSI для фильтрации сигнала, избегая ложного прорыва.
Вступать в торговлю по фиксированному проценту собственного капитала, если сигнал не содержит позиции.
Мартингейл в масштабе после поражения.
Закрытие позиции при запуске стоп-лосса или "приобретение прибыли".
Показатель DCB эффективно отражает среднесрочные и долгосрочные тенденции.
Быстрый RSI фильтр избегает потерь от ложных прорывов.
Следующая остановка блокирует прибыль и контролирует риски.
Мартингейл увеличивает позицию после потери для большей прибыли.
Разумные параметры подходят для различных рыночных условий.
DCB может генерировать неправильные сигналы, нужны другие фильтры.
Мартингейл может увеличить убытки, требует строгого управления рисками.
Неправильное установление стоп-лосса может привести к чрезмерным потерям.
Размер позиций должен быть ограничен для предотвращения чрезмерного использования кредитного плеча.
Неправильные контрактные настройки могут привести к огромным потерям на экстремальном рынке.
Оптимизируйте параметры DCB для лучшей комбинации.
Попробуйте заменить быстрый фильтр RSI другими индикаторами.
Оптимизируйте стоп-лосс и получайте прибыль для более высокого уровня выигрыша.
Оптимизируйте параметры мартингейла, чтобы снизить риск.
Испытание на различных продуктах для наилучшего распределения активов.
Используйте машинное обучение для динамической оптимизации параметров.
DCB определяет направление тренда и быстро фильтрует сигналы RSI, чтобы избежать ошибочных записей. Stop loss and take profit эффективно контролирует потерю одной сделки. Но все еще существуют риски, параметры требуют дальнейшей оптимизации для снижения риска и улучшения стабильности. Логика ясна и легко понятна, подходит для трейдеров среднесрочного и долгосрочного тренда.
/*backtest start: 2023-11-07 00:00:00 end: 2023-11-14 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Distance Strategy v1.0", shorttitle = "Distance str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") usemar = input(true, defval = true, title = "Use Martingale") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") usersi = input(true, defval = true, title = "Use RSI-Filter") periodrsi = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period") limitrsi = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit") fromyear = input(2018, defval = 2018, 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") //Fast RSI fastup = rma(max(change(close), 0), periodrsi) fastdown = rma(-min(change(close), 0), periodrsi) fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) //Distance bar = close > open ? 1 : close < open ? -1 : 0 lastg = bar == 1 ? close : lastg[1] lastr = bar == -1 ? close : lastr[1] dist = lastg - lastr adist = sma(dist, 30) plot(lastg, linewidth = 3, color = lime) plot(lastr, linewidth = 3, color = red) up = bar == -1 and dist > adist * 2 dn = bar == 1 and dist > adist * 2 //RSI Filter rsidn = fastrsi < limitrsi or usersi == false rsiup = fastrsi > 100 - limitrsi or usersi == false //Signals up1 = up and rsidn dn1 = dn and rsiup exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) //Arrows plotarrow(up1 ? 1 : na, colorup = blue, colordown = blue) plotarrow(dn1 ? -1 : na, colorup = blue, colordown = blue) //Trading profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1] mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1 lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1] signalup = up1 if signalup if strategy.position_size < 0 strategy.close_all() strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) signaldn = dn1 if signaldn if strategy.position_size > 0 strategy.close_all() strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()