Тенденция после стратегии на основе расстояния с последующей остановкой потери

Автор:Чао Чжан, Дата: 2023-11-15 11:24:16
Тэги:

img

Обзор

Эта стратегия использует индикатор DSC (Distance Close Bars) для определения ценового тренда и индикатор быстрого RSI в качестве фильтра, реализует последующий стоп-лосс для тренда после торговли.

Принципы

  1. Вычислить lastg и lastr, представляющие собой последние зеленые и красные столбики.

  2. Вычислить dist как разницу между lastg и lastr.

  3. Расчет adist как 30-периодного SMA dist.

  4. Сгенерируйте торговый сигнал, когда расстояние больше 2 раз от расстояния.

  5. Используйте быстрый индикатор RSI для фильтрации сигнала, избегая ложного прорыва.

  6. Вступать в торговлю по фиксированному проценту собственного капитала, если сигнал не содержит позиции.

  7. Мартингейл в масштабе после поражения.

  8. Закрытие позиции при запуске стоп-лосса или "приобретение прибыли".

Преимущества

  1. Показатель DCB эффективно отражает среднесрочные и долгосрочные тенденции.

  2. Быстрый RSI фильтр избегает потерь от ложных прорывов.

  3. Следующая остановка блокирует прибыль и контролирует риски.

  4. Мартингейл увеличивает позицию после потери для большей прибыли.

  5. Разумные параметры подходят для различных рыночных условий.

Риски

  1. DCB может генерировать неправильные сигналы, нужны другие фильтры.

  2. Мартингейл может увеличить убытки, требует строгого управления рисками.

  3. Неправильное установление стоп-лосса может привести к чрезмерным потерям.

  4. Размер позиций должен быть ограничен для предотвращения чрезмерного использования кредитного плеча.

  5. Неправильные контрактные настройки могут привести к огромным потерям на экстремальном рынке.

Оптимизация

  1. Оптимизируйте параметры DCB для лучшей комбинации.

  2. Попробуйте заменить быстрый фильтр RSI другими индикаторами.

  3. Оптимизируйте стоп-лосс и получайте прибыль для более высокого уровня выигрыша.

  4. Оптимизируйте параметры мартингейла, чтобы снизить риск.

  5. Испытание на различных продуктах для наилучшего распределения активов.

  6. Используйте машинное обучение для динамической оптимизации параметров.

Резюме

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()

Больше