Стратегия комплексной торговли с контролем риска, основанная на быстром RSI


Дата создания: 2023-11-13 11:36:34 Последнее изменение: 2023-11-13 11:36:34
Копировать: 3 Количество просмотров: 646
1
Подписаться
1617
Подписчики

Стратегия комплексной торговли с контролем риска, основанная на быстром RSI

Обзор

Эта стратегия предназначена для натуре торговой платформы BitMEX, которая позволяет эффективно отслеживать тренды с помощью анализа быстрых RSI, в сочетании с различными техническими индикаторами. Стратегия одновременно устанавливает механизмы управления капиталом и остановки убытков, которые позволяют эффективно контролировать риски сделок.

Стратегический принцип

  1. Рассчитайте быстрый RSI, параметры настроены на 7-дневную линию, линию сверхпокупа 25, линию сверхпродажи 75. Когда RSI пересекает линию сверхпокупа, это сигнал сверхпокупа; когда RSI пересекает линию сверхпродажи, это сигнал сверхпродажи.

  2. Фильтрация на K-линейные объекты. Требует, чтобы открытый диск был ниже, а длина объекта не меньше 20% от средней длины объекта вчерашнего дня.

  3. Фильтрация цветовой настройки K-линий. Требует, чтобы последние 4 K были пустыми, когда они были тёмными, и последние 4 K были больше, когда они были светлыми.

  4. Настройка логики стоп-ложа. Стоп-ложа наступает, когда цена движется в неблагоприятном направлении.

  5. Установка механизма защиты от отскока. Когда цена движется в выгодном направлении и достигает линии остановки, снова появляются сигналы для создания позиции.

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

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

  1. Быстрый RSI имеет разумную параметровую настройку, позволяющую быстро улавливать тенденции. В сочетании с K-линейными сущностями и цветовым суждением, эффективно фильтрует ложные прорывы.

  2. Многослойная фильтрация сигналов позволяет уменьшить количество транзакций и повысить коэффициент выигрыша.

  3. Встроенные в стратегию механизмы стоп-лосса позволяют эффективно контролировать одиночные потери.

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

  5. Например, если вы хотите, чтобы ваш клиент был в состоянии совершить покупку, вы можете выбрать время, в течение которого он будет торговать, чтобы избежать колебаний, вызванных крупными событиями.

Риск и оптимизация

  1. Слишком быстрая скорость может привести к упущению возможности для торговли.

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

  3. Применение слишком радикального подхода к регулированию позиций может привести к блокировке позиций.

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

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Robot BitMEX Fast RSI v1.0", shorttitle = "Robot BitMEX Fast RSI v1.0", overlay = false, 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, %")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(25, defval = 25, minval = 1, maxval = 30, title = "RSI limit")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
useocf = input(true, defval = true, title = "Use Open Color Filter")
useccf = input(true, defval = true, title = "Use Close Color Filter")
openbars = input(4, defval = 4, minval = 1, maxval = 20, title = "Open Color Bars")
closebars = input(1, defval = 1, minval = 1, maxval = 20, title = "Close Color Bars")
useobf = input(true, defval = true, title = "Use Open Body Filter")
usecbf = input(true, defval = true, title = "Use Close Body Filter")
openbody = input(20, defval = 20, minval = 0, maxval = 1000, title = "Open Body Minimum, %")
closebody = input(50, defval = 50, minval = 0, maxval = 1000, title = "Close Body Minimum, %")
usecnf = input(true, defval = true, title = "Use Close Norma Filter")
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")

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0
rsidnok = sma(rsidn, rsibars) == 1
rsiupok = sma(rsiup, rsibars) == 1

//Body Filter
body = abs(close - open)
abody = sma(body, 10)
openbodyok = body >= abody / 100 * openbody or useobf == false
closebodyok = body >= abody / 100 * closebody or usecbf == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
opengbarok = sma(gbar, openbars) == 1 or useocf == false
openrbarok = sma(rbar, openbars) == 1 or useocf == false
closebarok = (strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1) or useccf == false

//Norma Filter
norma = (rsi > dnlimit and rsi < uplimit) or usecnf == false

//Signals
up = openrbarok and rsidnok and openbodyok and (strategy.position_size == 0 or close < strategy.position_avg_price)
dn = opengbarok and rsiupok and openbodyok and (strategy.position_size == 0 or close > strategy.position_avg_price)
exit = ((strategy.position_size > 0 and closebarok and norma) or (strategy.position_size < 0 and closebarok and norma)) and closebodyok

//Indicator
plot(rsi, color = blue, linewidth = 3, title = "Double RSI")
plot(uplimit, color = black, title = "Upper Line")
plot(dnlimit, color = black, title = "Lower Line")
colbg = rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

//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]

if up
    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)))

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