Стратегия торговли Bitlinc MARSI

Автор:Чао Чжан, Дата: 2024-02-29 10:54:45
Тэги:

img

Обзор

Эта стратегия - стратегия отслеживания колебаний RSI, основанная на ежегодных корректировках.

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

  1. Установите параметры длины MA, RSI, верхней/нижней полосы, прибыли/стоп-лосса, диапазона цикла торговли.
  2. Вычислить значение RSI, RSI = (среднее изменение вверх) / ((среднее изменение вверх + среднее изменение вниз) *100)
  3. График линий и диапазонов RSI
  4. Пересечение RSI ниже нижней полосы - это длинный сигнал, пересечение выше верхней полосы - короткий сигнал
  5. Открытые позиции с ордерами OCO
  6. Исполнение стоп-лосса и прибыли на основе настроек

Анализ преимуществ

  1. Установление годового торгового цикла позволяет избежать неблагоприятных внешних условий.
  2. RSI эффективно отражает перекупленность/перепроданность. Разумный диапазон колебаний фильтрует шум.
  3. Заказы OCO + параметры стоп-лосса/прибыли позволяют эффективно контролировать риск.

Анализ рисков

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

Для оптимизации можно использовать такие методы, как корректировка параметров RSI, диапазон торгового цикла, коэффициенты стоп-лосс / прибыль.

Руководство по оптимизации

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

Резюме

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Bitlinc MARSI Study AST",shorttitle="Bitlinc MARSI Study AST",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.1,initial_capital=1000,currency="USD",pyramiding=0, calc_on_order_fills=false)

// === General Inputs ===
lengthofma = input(62, minval=1, title="Length of MA")
len = input(31, minval=1, title="Length")
upperband = input(89, minval=1, title='Upper Band for RSI')
lowerband = input(10, minval=1, title="Lower Band for RSI")
takeprofit =input(1.25, title="Take Profit Percent")
stoploss =input(.04, title ="Stop Loss Percent")
monthfrom =input(8, title = "Month Start")
monthuntil =input(12, title = "Month End")
dayfrom=input(1, title= "Day Start")
dayuntil=input(31, title= "Day End")

// === Innput Backtest Range ===
//FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
//FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
//FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
//ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
//ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
//ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === Create RSI ===
src=sma(close,lengthofma)
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi,linewidth = 2, color=purple)

// === Plot Bands ===
band1 = hline(upperband)
band0 = hline(lowerband)
fill(band1, band0, color=blue, transp=95)

// === Entry and Exit Methods ===
longCond =  crossover(rsi,lowerband)
shortCond =  crossunder(rsi,upperband)

// === Long Entry Logic ===
if (  longCond ) 
    strategy.entry("LONG", strategy.long, stop=close, oca_name="TREND", comment="LONG")
else
    strategy.cancel(id="LONG")

// === Short Entry Logic ===    
if ( shortCond   ) 
    strategy.entry("SHORT", strategy.short,stop=close, oca_name="TREND",  comment="SHORT")
else
    strategy.cancel(id="SHORT")

// === Take Profit and Stop Loss Logic ===
//strategy.exit("Take Profit LONG", "LONG", profit = close * takeprofit / syminfo.mintick, loss = close * stoploss / syminfo.mintick)
//strategy.exit("Take Profit SHORT", "SHORT", profit = close * takeprofit / syminfo.mintick, loss = close * stoploss / syminfo.mintick)
strategy.exit("LONG TAKE PROFIT", "LONG", profit = close * takeprofit / syminfo.mintick)
strategy.exit("SHORT STOP LOSS", "SHORT", profit = close * takeprofit / syminfo.mintick)
strategy.exit("LONG STOP LOSS", "LONG", loss = close * stoploss / syminfo.mintick)
strategy.exit("SHORT STOP LOSS", "SHORT", loss = close * stoploss / syminfo.mintick)



Больше