Тестирование на исторических данных и оптимизация стратегий RSI


Дата создания: 2023-11-10 11:59:40 Последнее изменение: 2023-11-10 11:59:40
Копировать: 1 Количество просмотров: 858
1
Подписаться
1617
Подписчики

Тестирование на исторических данных и оптимизация стратегий RSI

Обзор

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

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

Стратегия использует только RSI в качестве сигнала для построения позиции. Сделать больше, когда RSI пересекает установленное низкое значение (задаточный 20) и сделать пустое, когда RSI пересекает установленное высокое значение (задаточный 80). Фиксированный капитал на каждую сделку (задаточный 100 долларов США), в любом случае преследуя только прибыль 1%. Если убыток достигнет 3%, то остановиться.

В частности, основная логика стратегии заключается в следующем:

  1. Показатели RSI для определения перекупа и перепродажи
  2. RSI: 20 - это больше.
  3. RSI на 80 и пустота
  4. 100 долларов за открытую позицию
  5. Прямые позиции после остановки
  6. Если убыток, то на следующей линии K приостанавливается 24 линии K не торгуются

Как видно, эта стратегия очень проста, механическая, и практически нет места для оптимизации параметров. Она использует чисто математические характеристики индикатора RSI, чтобы получить обратную прибыль от обратного позиционирования в зоне перепродажи.

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

Самая большая преимущество этой стратегии в том, что она проста и эффективна.

  1. Использование единого RSI, без необходимости сложного технического анализа.
  2. Это полностью механизированная система торговли, не подверженная влиянию эмоций.
  3. Для получения прибыли, используя математические характеристики краткосрочного отклонения рынка, нет необходимости прогнозировать движение рынка.
  4. Правила управления капиталом, механизм сдерживания убытков, контроль риска.

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

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

Основные риски этой стратегии исходят из:

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

  2. Слишком большая стоп-установка может привести к увеличению убытков. В настоящее время стоп-убыток составляет 3%, может потребоваться корректировка до 1-2%, что является более разумным.

  3. Слишком высокая частота сделок может привести к увеличению прибыли, но следует правильно контролировать частоту открытия позиций.

  4. Фиксированный капитал в размере 100 долларов США за каждое открытие позиции может представлять собой чрезмерную концентрацию риска, которая должна быть оптимизирована в процентах от капитала.

Направление оптимизации

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

  1. Повышение показателей, определяющих тенденцию, таких как MA, приостановка торговли при неопределенности тенденции.

  2. Оптимизируйте коэффициент остановки убытков, чтобы скорректировать остановку убытков на 1-2% более разумно, остановка может быть настроена на плавающую остановку.

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

  4. Измените фиксированный капитал в 100 долларов США на процент от капитала, например, на 1%.

  5. Оптимизация комбинации параметров, таких как циклы RSI, перекуп и перепродажа.

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

Оптимизация вышеперечисленных пунктов позволяет эффективно снизить риски торговли и повысить стабильность и надежность стратегии.

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

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

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

//@version=5
strategy("rsi超买超卖_回测用", overlay=false, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash)
open_pos = input.int(50000, title = "每次开单资金(usdt)")
rsi_period = input.int(14, title = "rsi周期")
rsi_line      = input.float(20.0,      title='RSI触发线',      step=0.05)
stop_rsi_top_line = input.float(70, title = "顶部rsi止损线")
stop_rsi_bottom_line = input.float(30, title = "底部rsi止损线")
stop_loss_perc = input.float(0.03, title = "止损线")
stop_profit = input.float(0.01, title = "止盈")
loss_stop_trade_k = input.int(24, title = "亏损后x根K线不做交易")


rsiParam = ta.rsi(close, rsi_period)

var int failedTimes = 0
var bool stopTrade = false

// plot(rsiParam)

if stopTrade
    failedTimes += 1
    if failedTimes == loss_stop_trade_k
        failedTimes := 0
        stopTrade := false



// 获取当前持仓方向
checkCurrentPosition() =>
    strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0

curPosition = checkCurrentPosition()

// 当前持仓成本价
position_avg_price = strategy.position_avg_price


// 当前持单, 触达反向的rsi线,清仓
if curPosition > 0 and rsiParam >= stop_rsi_top_line
    strategy.close_all(comment = "closebuy")

if curPosition < 0 and rsiParam <= stop_rsi_bottom_line
    strategy.close_all(comment = "closesell")


// 止盈止损清仓
if curPosition > 0
    // if (position_avg_price - close) / close >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closebuy")
    //     stopTrade := true
    if (close - position_avg_price) / position_avg_price >= stop_profit
        // 止盈
        strategy.close_all(comment = "closebuy")



if curPosition < 0
    // if (close - position_avg_price) / position_avg_price >= stop_loss_perc
    //     // 止损
    //     strategy.close_all(comment = "closesell")
    //     stopTrade := true

    if (position_avg_price - close) / close >= stop_profit
        // 止盈
        strategy.close_all(comment = "closesell")


a = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)

if bar_index == a and strategy.closedtrades.profit(strategy.closedtrades - 1) < 0
    stopTrade := true

var float openPrice = 0.0



if rsiParam <= rsi_line and stopTrade == false
	strategy.entry("long", strategy.long, open_pos / close, comment = "long")
    if curPosition == 0
        openPrice := close
    strategy.exit("long_stop", "long", limit = openPrice * (1+stop_profit), stop=openPrice * (1-stop_loss_perc), comment = "closebuy")

if rsiParam >= 100 - rsi_line and stopTrade == false
    strategy.entry("short", strategy.short, open_pos / close, comment = "short")
    if curPosition == 0
        openPrice := close
    strategy.exit("short_stop", "short", limit = openPrice * (1-stop_profit), stop=openPrice * (1+stop_loss_perc), comment = "closesell")




plot(failedTimes)