
Эта стратегия называется стратегией RSI Bollinger Bands TP/SL Stop Loss. Эта стратегия объединяет индикаторы RSI и Bollinger Bands TP/SL и позволяет установить тренд и совершить сделку с прорывом.
Показатель RSI позволяет определить, находится ли акция в пределах перекупки и перепродажи. Если RSI выше установленной линии перекупа, то это перекупка, а если она меньше установленной линии перепродажи, то это перепродажа.
Брин-пояса, рассчитывая стандартную разницу цены акции, получают верхнюю и нижнюю траектории цены акций. Верхняя траектория является линией сопротивления, а нижняя траектория - линией поддержки.
Когда индикатор RSI появляется на нижнем обратном сигнале, а цены на акции прорываются вниз по Бриньовой полосе, считается, что ситуация изменилась вверх, сделайте больше; когда индикатор RSI появляется на верхнем обратном сигнале, а цены на акции упали вверх по Бриньовой полосе, считается, что ситуация изменилась вверх, сделайте пробел.
RSI и BRI используются для определения трендов и обратных точек. Использование обоих в сочетании может повысить точность идентификации реальных сигналов о покупке и продаже и избежать ложных прорывов.
Стратегия устанавливает стоп-стоп-стоп-убыток, делая стоп-стоп-стоп в качестве входной ценыСтоп-стоп - это начальная цена.(1- Stop Loss Ratio); напротив, форекс позволяет закрепить прибыль, максимально избежать убытков и контролировать риски.
Стратегия позволяет пользователям выбирать между оптовой, оптовой или двусторонней торговлей. Пользователи могут выбирать различные направления в зависимости от рыночных условий, гибко контролируя риски.
Стандартный разрыв в размерах ленты бурин влияет на ширину ленты бурин, что влияет на появление торговых сигналов. Если параметры установлены неправильно, может быть создано множество ошибочных сигналов.
В случае, если произойдет V-образный поворот, параметры стоп-стоп могут быть слишком радикальными и привести к ненужным потерям.
Параметры RSI также влияют на форму кривой RSI. Если параметры RSI установлены неправильно, то точность обратного сигнала RSI снижается.
Можно проверить больше параметров длины RSI, чтобы найти оптимальную комбинацию параметров.
Можно тестировать большее количество параметров длины ленты Бринга и стандартного отклонения, чтобы найти оптимальное сочетание параметров.
Оптимальный параметр Stop Loss Ratio может быть найден с помощью обратного измерения.
Эта стратегия использует RSI и BRI для определения трендов и обратных поворотов, включает в себя контроль риска с помощью механизма остановки и остановки, который позволяет автоматически идентифицировать точки покупки и продажи и своевременно остановить остановку. Эта стратегия также сопряжена с определенными рисками и может быть улучшена, в основном, методами оптимизации параметров и т. Д. В целом, эта стратегия имеет сильную практичность.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BigCoinHunter
//@version=5
strategy(title="RSI_Boll-TP/SL", overlay=true,
pyramiding=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, initial_capital=1000,
currency=currency.USD, commission_value=0.05,
commission_type=strategy.commission.percent,
process_orders_on_close=true)
//----------- get the user inputs --------------
//---------- RSI -------------
price = input(close, title="Source")
RSIlength = input.int(defval=6,title="RSI Length")
RSIoverSold = input.int(defval=50, title="RSI OverSold", minval=1)
RSIoverBought = input.int(defval=50, title="RSI OverBought", minval=1)
//------- Bollinger Bands -----------
BBlength = input.int(defval=200, title="Bollinger Period Length", minval=1)
BBmult = input.float(defval=2.0, minval=0.001, maxval=50, step=0.1, title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)
plot(BBbasis, color=color.aqua, title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver, title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=color.silver, title="Bollinger Bands Lower Line")
fill(plot1=p1, plot2=p2, title="Bollinger BackGround", color=color.new(color.aqua,90), fillgaps=false, editable=true)
//---------- input TP/SL ---------------
tp = input.float(title="Take Profit:", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01
sl = input.float(title="Stop Loss: ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01
longEntry = input.bool(defval=true, title= 'Long Entry', inline="11")
shortEntry = input.bool(defval=true, title='Short Entry', inline="11")
//---------- backtest range setup ------------
fromDay = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input.int(defval = 2021, title = "From Year", minval = 2010)
toDay = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31)
toMonth = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input.int(defval = 2042, title = "To Year", minval = 2010)
//------------ time interval setup -----------
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(toYear, toMonth, toDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
//------- define the global variables ------
var bool long = true
var bool stoppedOutLong = false
var bool stoppedOutShort = false
//--------- Colors ---------------
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na
//bgcolor(switch2?(color.new(TrendColor,50)):na)
//--------- calculate the input/output points -----------
longProfitPrice = strategy.position_avg_price * (1 + tp) // tp -> take profit percentage
longStopPrice = strategy.position_avg_price * (1 - sl) // sl -> stop loss percentage
shortProfitPrice = strategy.position_avg_price * (1 - tp)
shortStopPrice = strategy.position_avg_price * (1 + sl)
//---------- RSI + Bollinger Bands Strategy -------------
vrsi = ta.rsi(price, RSIlength)
rsiCrossOver = ta.crossover(vrsi, RSIoverSold)
rsiCrossUnder = ta.crossunder(vrsi, RSIoverBought)
BBCrossOver = ta.crossover(source, BBlower)
BBCrossUnder = ta.crossunder(source, BBupper)
if (not na(vrsi))
if rsiCrossOver and BBCrossOver
long := true
if rsiCrossUnder and BBCrossUnder
long := false
//------------------- determine buy and sell points ---------------------
buySignall = window() and long and (not stoppedOutLong)
sellSignall = window() and (not long) and (not stoppedOutShort)
//---------- execute the strategy -----------------
if(longEntry and shortEntry)
if long
strategy.entry("LONG", strategy.long, when = buySignall, comment = "ENTER LONG")
stoppedOutLong := true
stoppedOutShort := false
else
strategy.entry("SHORT", strategy.short, when = sellSignall, comment = "ENTER SHORT")
stoppedOutLong := false
stoppedOutShort := true
else if(longEntry)
strategy.entry("LONG", strategy.long, when = buySignall)
strategy.close("LONG", when = sellSignall)
if long
stoppedOutLong := true
else
stoppedOutLong := false
else if(shortEntry)
strategy.entry("SHORT", strategy.short, when = sellSignall)
strategy.close("SHORT", when = buySignall)
if not long
stoppedOutShort := true
else
stoppedOutShort := false
//----------------- take profit and stop loss -----------------
if(tp>0.0 and sl>0.0)
if ( strategy.position_size > 0 )
strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment="Long TP/SL Trigger")
else if ( strategy.position_size < 0 )
strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment="Short TP/SL Trigger")
else if(tp>0.0)
if ( strategy.position_size > 0 )
strategy.exit(id="LONG", limit=longProfitPrice, comment="Long TP Trigger")
else if ( strategy.position_size < 0 )
strategy.exit(id="SHORT", limit=shortProfitPrice, comment="Short TP Trigger")
else if(sl>0.0)
if ( strategy.position_size > 0 )
strategy.exit(id="LONG", stop=longStopPrice, comment="Long SL Trigger")
else if ( strategy.position_size < 0 )
strategy.exit(id="SHORT", stop=shortStopPrice, comment="Short SL Trigger")