
Esta estrategia se basa en el índice de fuerza relativa (RSI) para juzgar sobrecompra y venta, y establece una posición inversa cuando el RSI alcanza la zona de sobrecompra y venta, con el objetivo de alcanzar una posición baja y alta. La estrategia es simple y eficiente para obtener ganancias capturando el fenómeno de sobrecompra y venta en el mercado a corto plazo.
La estrategia utiliza solo el indicador RSI como señal de posición. Haga más cuando el RSI baje por debajo del mínimo establecido (default 20) y deje de hacer nada cuando el RSI suba por encima del máximo establecido (default 80).
En concreto, la lógica central de la estrategia es la siguiente:
Se puede ver que la estrategia es muy simple, mecánica, y casi no hay espacio para la optimización de parámetros. Utiliza puramente las características matemáticas del indicador RSI para obtener ganancias inversas en la inversión inversa de la zona de sobreventa en la zona de sobreventa.
La mayor ventaja de esta estrategia es su simplicidad y eficacia.
Además, la estrategia también establece un índice de stop loss para bloquear ganancias y controlar el riesgo, y un mecanismo de suspensión de operaciones para reducir la frecuencia de las operaciones. Esto permite que la estrategia obtenga ganancias estables con el mínimo riesgo.
Los principales riesgos de esta estrategia provienen de:
Cuando la tendencia es muy fuerte, el RSI puede estar en una zona de sobrecompra o sobreventa durante mucho tiempo, con pocas posibilidades de reversión, y la estrategia será difícil de rentabilizar.
El exceso de la configuración de stop loss puede causar una expansión de las pérdidas. Actualmente, el stop loss es del 3%, pero puede ser necesario ajustarlo al 1-2% para que sea más razonable.
La frecuencia de las operaciones es demasiado alta para obtener ganancias y luego continuar con la construcción de posiciones. Se debe controlar adecuadamente la frecuencia de apertura de posiciones.
Fijar 100 dólares por cada posición puede ser un exceso de concentración de riesgo que requiere ser optimizado como porcentaje de capital.
De acuerdo con el análisis anterior, la estrategia puede ser optimizada en los siguientes aspectos:
Aumentar los indicadores de tendencia, como el MA, y suspender la negociación cuando la tendencia no es clara.
Optimización de la proporción de stop loss para ajustar el stop loss a un 1-2% más razonable, el stop loss se puede configurar como un stop float.
Aumentar la frecuencia de apertura de las posiciones, como si solo se permitiera abrirlas una o dos veces en un período determinado.
Modifique el capital fijo de $ 100 a un porcentaje de capital, como el 1%.
Optimización de la combinación de parámetros, como el ciclo RSI, las zonas de sobrecompra y sobreventa.
Aumentar el control de la posición, sin aumentar el capital de una sola transacción cuando se aumenta el capital inicial.
La optimización de los puntos anteriores puede reducir el riesgo de transacción y mejorar la estabilidad y la fiabilidad de la estrategia.
Esta estrategia es en general muy simple y directa, a través de los indicadores de RSI para obtener ganancias de inversión a corto plazo. La ventaja es simple y eficiente, no necesita predicción, la lógica de negociación es clara, fácil de rastrear y verificar. Pero puede ser difícil de enfrentar la situación de la tendencia, existe un cierto riesgo de pérdida.
/*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)