
Эта стратегия использует комбинацию RSI в разных временных периодах, чтобы определить, находится ли текущий рынок в состоянии перекупа или перепродажи, и в сочетании с отношением цены к движущейся средней линии для подачи сигнала покупки и продажи. Цель состоит в том, чтобы купить во время падения, продать во время подъема и достичь прибыли при ликвидации.
Рассчитывается значение RSI на 5 минут, 15 минут и 1 час, когда RSI на 5 минут, 15 минут и 1 час одновременно ниже 25, считается явлением перепродажи, создавая сигнал покупки; когда RSI на 5 минут, 15 минут и 1 час одновременно выше 75, считается явлением перепродажи, создавая сигнал продажи.
Прорыв цены 21 Движущейся средней также служит в качестве торгового сигнала. Если цена ниже движущейся средней, то создается сигнал покупки; если цена выше движущейся средней, то создается сигнал продажи.
В зависимости от состояния позиции, устанавливается количество первых сделок и правила набора позиций: первое открытие позиции устанавливается на 2 руки, после этого каждый набор позиций составляет 1 руку, пока позиция не достигнет 2 рук.
Стоп-потеря при убытке 3%. Стоп-потеря при прибыли 1%.
Используйте комбинацию RSI с несколькими временными рамками для определения перекупа и перепродажи, повышая надежность сигнала.
В сочетании с движущейся средней линией создаются сигналы для расширения возможностей торговли.
Установление правил контроля позиций и сдерживания прибыли и убытков, контроль риска.
Повышение доходности за счет количественного увеличения доли.
Существует риск обратной корректировки RSI, то есть после того, как RSI достиг критической точки перекупа и перепродажи, цены могут продолжить работать в течение некоторого времени без обратного отсчета. В этом случае слепое следование сигналу RSI может привести к убыткам.
Сигналы торговли, генерируемые движущейся средней линией, могут быть ошибочными. Когда цена сильно колеблется, движущаяся средняя линия не может вовремя отслеживать изменения цены.
Ошибки в определении размеров позиций и прибыли/убытка могут привести к неправильному контролю риска.
Необходимо установить разумные условия для размещения запасов. Если размещение запасов будет слишком открытым, это может привести к увеличению убытков.
Настройка параметров RSI, тестирование различных комбинаций параметров RSI-циклов, чтобы найти более надежные сигналы о перепродаже.
Тестирование различных параметров движущейся средней линии в качестве вспомогательного торгового сигнала. Также можно тестировать другие технические показатели.
Оптимизация правил контроля позиций и остановки убытков, установление более научных механизмов контроля риска.
Оптимизация условий набора, предотвращение увеличения убытков. Также можно рассмотреть альтернативный способ набора, вместо индекса набора.
Эта стратегия использует комбинацию многократных временных рамок RSI для определения потенциала тренда, чтобы получить более высокую выигрышную вероятность. При этом, в дополнение к созданию торговых сигналов с помощью движущейся средней линии, расширяются торговые возможности.
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1)
len =14
Initial_Trade_Size = 2
up = rma(max(change(close), 0), len)
down = rma(-min(change(close), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
RSI_1h = request.security(syminfo.tickerid, "60", rsi)
RSI_3h = request.security(syminfo.tickerid, "180", rsi)
RSI_15m = request.security(syminfo.tickerid, "15", rsi)
RSI_5m = request.security(syminfo.tickerid, "5", rsi)
RSI_1m = request.security(syminfo.tickerid, "1", rsi)
ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21)
ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21)
//(RSI_3h<=25) and (RSI_1h<=25) and (RSI_15m<=25) and
Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false
//alertcondition(Positive, title='POS', message='POS')
//plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny)
Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false
//alertcondition(Negative, title='NEG', message='NEG')
//plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny) Positive and Negative and
lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size
//lastordersize =1
// and ((ema21_15-low)/ema21_15) > 0.077
//Adding to position rules
if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03))
if(strategy.position_avg_price > close and strategy.position_size > 0)
strategy.entry("Add", strategy.long , qty = lastordersize , when = true)
if(strategy.position_avg_price < close and strategy.position_size < 0)
strategy.entry("Add", strategy.short, qty = lastordersize , when = true)
if (strategy.position_size == 0)
if (Positive or ((ema21_5-low)/ema21_5) > 0.07)
strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true)
// and ((high-ema21_15)/ema21_15) > 0.077
if (Negative or ((high-ema21_5)/ema21_5) > 0.07)
strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true)
//lastordersize := lastordersize * 2
//or (strategy.openprofit / abs(strategy.position_size * close))>=0.01
if(cross(ema21_5, high) or cross(ema21_5, low))
strategy.close_all()