Стратегия тренда RSI

RSI SMA EMA
Дата создания: 2024-06-14 15:28:38 Последнее изменение: 2024-06-14 15:28:38
Копировать: 0 Количество просмотров: 562
1
Подписаться
1617
Подписчики

Стратегия тренда RSI

Обзор

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

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

  1. Рассчитайте значение RSI.
  2. Сигналы о покупке появляются, когда RSI ниже установленного порога покупки; сигналы о продаже появляются, когда RSI выше установленного порога продажи.
  3. Покупайте в соответствии с сигналом о покупке, вычисляя количество покупок по текущей цене закрытия и заказывая покупку.
  4. Если установлена стоп-роль, то рассчитывается стоп-цена и размещается стоп-ордер.
  5. При условии продажи сигнала или приостановки убытков, ликвидировать все позиции.
  6. Если установлено максимальное время удержания позиции, то после того, как время удержания превысит максимальное время удержания позиции, все позиции будут ликвидированы независимо от прибыли и убытка.

Стратегические преимущества

  1. RSI - это широко используемый индикатор технического анализа, который эффективно улавливает сигналы о перекупке и перепродаже на рынке.
  2. Эта стратегия вводит ограничения на время хранения и остановки, что помогает контролировать риск.
  3. Стратегическая логика ясна, легко понятна и реализуема.
  4. RSI может быть адаптирован к различным рыночным условиям путем корректировки параметров и отметки.

Стратегический риск

  1. В некоторых случаях RSI может подавать ошибочные сигналы, что приводит к убыткам в стратегии.
  2. Эта стратегия не учитывает фундаментальные факторы, связанные с торговыми сортами, и полагается только на технические показатели, которые могут представлять риск для рынка.
  3. Фиксированная стоп-раздел может быть неспособна адаптироваться к изменению волатильности рынка.
  4. Показатели эффективности стратегии могут зависеть от параметров, а неправильные параметры могут привести к плохим показателям стратегии.

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

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

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

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

Исходный код стратегии
/*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)