Estratégia de tendência RSI

RSI SMA EMA
Data de criação: 2024-06-14 15:28:38 última modificação: 2024-06-14 15:28:38
cópia: 0 Cliques: 562
1
focar em
1617
Seguidores

Estratégia de tendência RSI

Visão geral

A estratégia baseia-se em indicadores de força e fraqueza relativamente fortes (RSI) para determinar sinais de compra e venda, julgando se o valor do indicador de RSI excede o valor de baixa e alta predefinido. A estratégia também estabelece limites de tempo de parada e de posse para controlar o risco.

Princípio da estratégia

  1. Calcule o valor do RSI.
  2. Quando o RSI está abaixo do limiar de compra predefinido, gera um sinal de compra; quando o RSI está acima do limiar de venda predefinido, gera um sinal de venda.
  3. De acordo com o sinal de compra, calcule a quantidade de compra com o preço de fechamento atual e peça a compra.
  4. Se a proporção de stop-loss for definida, o preço de stop-loss será calculado e a ordem de stop-loss será feita.
  5. Todos os detentores de posições estão em posição de liquidação, de acordo com os sinais de venda ou as condições de parada.
  6. Se o tempo máximo de posse for definido, todas as posições serão liquidadas após o tempo de posse exceder o tempo máximo de posse, independentemente de ganhos ou perdas.

Vantagens estratégicas

  1. O indicador RSI é um indicador de análise técnica amplamente utilizado, capaz de capturar eficazmente os sinais de sobrecompra e sobrevenda do mercado.
  2. A estratégia introduziu limites de stop loss e de tempo de detenção para ajudar a controlar o risco.
  3. A lógica da estratégia é clara, fácil de entender e de implementar.
  4. O RSI pode ser adaptado a diferentes cenários de mercado, ajustando os parâmetros e os limites.

Risco estratégico

  1. O indicador RSI pode emitir sinais errados em algumas situações, resultando em perdas na estratégia.
  2. A estratégia não leva em consideração os fatores fundamentais das variedades negociadas e se baseia apenas em indicadores técnicos, podendo enfrentar o risco de surpresas no mercado.
  3. A taxa fixa de stop loss pode não se adaptar às mudanças na volatilidade do mercado.
  4. O desempenho da estratégia pode ser afetado pela configuração de parâmetros, e os parâmetros inadequados podem causar um mau desempenho da estratégia.

Direção de otimização da estratégia

  1. A introdução de outros indicadores técnicos, como as médias móveis, aumenta a confiabilidade da estratégia.
  2. Optimizar estratégias de stop loss, como o uso de stop loss móvel ou stop loss dinâmico baseado na volatilidade.
  3. Os parâmetros e os limites do RSI são ajustados dinamicamente de acordo com a situação do mercado.
  4. Combinando a análise dos fundamentos das variedades de negociação para melhorar a capacidade de controle de risco da estratégia.
  5. A estratégia é testada e otimizada para encontrar a melhor combinação de parâmetros.

Resumir

A estratégia usa o indicador RSI para capturar sinais de sobrecompra e sobrevenda no mercado, além de introduzir limites de tempo de parada e de detenção para controlar o risco. A lógica da estratégia é simples, fácil de implementar e otimizar. No entanto, o desempenho da estratégia pode ser afetado pela volatilidade do mercado e pela configuração de parâmetros, portanto, é necessário combinar outros métodos de análise e meios de gerenciamento de risco para aumentar a robustez e a lucratividade da estratégia.

Código-fonte da estratégia
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Simple RSI Strategy", overlay=true,  initial_capital=20, commission_value=0.1, commission_type=strategy.commission.percent)

// Define the hardcoded date (Year, Month, Day, Hour, Minute)
var hardcodedYear = 2024
var hardcodedMonth = 6
var hardcodedDay = 10

// Convert the hardcoded date to a timestamp
var start_date = timestamp(hardcodedYear, hardcodedMonth, hardcodedDay)

// settings
order_size_usdt = input.float(20, title="Order Size (USDT)")
rsiLength = input.int(9, title="RSI Length")
rsiBuyThreshold = input.int(30, title="RSI Buy Threshold")
rsiSellThreshold = input.int(70, title="RSI Sell Threshold")
rsibuystrat = input.int(1, title="buy strat 1=achieved,2=recross")
rsisellstrat = input.int(1, title="sell strat 1=achieved,2=recross")
stoploss = input.int(1, title="Stop loss percent")
max_duration = input(24, title="Max Position Duration (hours)")*60

// emaPeriod = input.int(50, title="EMA Period")
// smaPeriod = input.int(200, title="SMA Period")

rsi = ta.rsi(close, rsiLength) 
// ma_rsi = ta.sma(rsi, rsiLength)
// ema = ta.ema(close,emaPeriod)
// sma = ta.sma(close,smaPeriod)
// plot(sma, color=color.red, title="exp Moving Average")
// plot(smal, color=color.blue, title="Simple Moving Average")

longCondition = ((ta.crossunder(rsi, rsiBuyThreshold) and rsibuystrat==1) or (ta.crossover(rsi, rsiBuyThreshold) and rsibuystrat==2) ) and strategy.position_size == 0
shortCondition = ( (ta.crossover(rsi, rsiSellThreshold) and rsisellstrat==1) or (ta.crossunder(rsi, rsiSellThreshold) and rsisellstrat==2) ) and strategy.position_size > 0 

// Execute Buy and Sell orders
if (longCondition)
	positionSize = order_size_usdt / close
	strategy.entry("Long", strategy.long,qty=positionSize)
	if (stoploss>0)
		stopLossPrice = close * (1 - stoploss/100 )
		strategy.exit("Stop Loss", from_entry="Long", stop=stopLossPrice)
	
if (shortCondition )//or stopCondition)
	strategy.close("Long")

//add condition open time
if (strategy.position_size > 0 and max_duration >0)
	var float entry_time = na
	if (strategy.opentrades > 0)
		entry_time := nz(strategy.opentrades.entry_time(0), na)
	else
		entry_time := na

	current_time = time
	var float duration_minutes = -1
	if (not na(entry_time))
		duration_minutes := (current_time - entry_time) / 60000

	
	// Close positions after a certain duration (e.g., 60 minutes)
	// if ( duration_minutes > max_duration and close>=strategy.opentrades.entry_price(0))
	if ( duration_minutes > max_duration )
		label.new(bar_index, high, text="Duration: " + str.tostring(duration_minutes/60) + " hrs", color=color.blue, textcolor=color.white, style=label.style_label_down, size=size.small)
		strategy.close("Long")


// Plot Buy and Sell signals
plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
//plotshape(series=stopCondition, title="stop Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Plot RSI
// hline(rsiBuyThreshold, "RSI Buy Threshold", color=color.green)
// hline(rsiSellThreshold, "RSI Sell Threshold", color=color.red)