В процессе загрузки ресурсов... загрузка...

Стратегия тренда РСИ

Автор:Чао Чжан, Дата: 2024-06-14 15:28:38
Тэги:РСИSMAЕМА

img

Обзор

Эта стратегия основана на индикаторе относительной силы (RSI). Она определяет сигналы купли и продажи, оценивая, превышает ли значение RSI заранее установленные верхние и нижние пороги. Кроме того, стратегия устанавливает ограничения стоп-лосса и длительности позиции для контроля риска.

Принцип стратегии

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

Преимущества стратегии

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

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

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

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

  1. Ввести другие технические показатели, такие как скользящие средние, для повышения надежности стратегии.
  2. Оптимизировать стратегию стоп-лосса, например, использовать стоп-лосс с отставанием или динамический стоп-лосс на основе волатильности.
  3. Динамически регулировать параметры и пороги РСИ в соответствии с рыночными условиями.
  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)

Связанные

Больше