Стратегия торговли количественной полосой биткоина на основе нескольких временных рамок

Автор:Чао Чжан, Дата: 2023-12-01 13:50:02
Тэги:

img

Обзор

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

Логика стратегии

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

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

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

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

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

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

  1. Эффективность испытаний показателей РСИ с различными параметрами.
  2. Попробуйте ввести другие вспомогательные индикаторы полосы.
  3. Оптимизировать параметры длины индикатора HMA.
  4. Добавьте стоп-лосс и стратегии получения прибыли.
  5. Настроить цикл хранения для обмена группами.

Заключение

Эта стратегия эффективно отслеживает средне- и долгосрочные тенденции биткойна путем сочетания временных рамок и отслеживания полосы. По сравнению с краткосрочной торговлей, средне- и долгосрочная торговля полосами имеет меньшие снижения и больший потенциал прибыли. Следующие шаги включают дальнейшее повышение прибыльности и стабильности посредством настройки параметров и дополнений в управлении рисками.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='Pyramiding BTC 5 min', overlay=true, pyramiding=5, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.075)
//the pyramide based on this script  https://www.tradingview.com/script/7NNJ0sXB-Pyramiding-Entries-On-Early-Trends-by-Coinrule/
//
fastLength = input(250, title="Fast filter length ", minval=1)
slowLength = input(500,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
//
//Backtest dates
fromMonth = input(defval=1, title="From Month")
fromDay = input(defval=10, title="From Day")
fromYear = input(defval=2020, title="From Year")
thruMonth = input(defval=1, title="Thru Month")
thruDay = input(defval=1, title="Thru Day")
thruYear = input(defval=2112, title="Thru Year")

showDate = input(defval=true, title="Show Date Range")

start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false


leng=1
p1=close[1]

len55 = 10
//taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/
HTF = input("1D", type=input.resolution)
ti = change( time(HTF) ) != 0
T_c = fixnan( ti ? close : na )

vrsi = rsi(cum(change(T_c) * volume), leng)
pp=wma(vrsi,len55)

d=(vrsi[1]-pp[1])
len100 = 10
x=ema(d,len100)
//
zx=x/-1
col=zx > 0? color.lime : color.orange

//

tf10 = input("1", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"])

length = input(50, title = "Period", type = input.integer)
shift = input(1, title = "Shift", type = input.integer)

hma(_src, _length)=>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length)=>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift])
//plot(a,color=color.gray)
//plot(b,color=color.yellow)
close_price = close[0]
len = input(25)

linear_reg = linreg(close_price, len, 0)


filter=input(true)

buy=crossover(linear_reg, b)

longsignal = (v1 > v2 or filter == false ) and buy and window()

//set take profit

ProfitTarget_Percent = input(3)
Profit_Ticks = close * (ProfitTarget_Percent / 100) / syminfo.mintick

//set take profit

LossTarget_Percent = input(10)
Loss_Ticks = close * (LossTarget_Percent / 100) / syminfo.mintick


//Order Placing

strategy.entry("Entry 1", strategy.long, when=strategy.opentrades == 0 and longsignal)

strategy.entry("Entry 2", strategy.long, when=strategy.opentrades == 1 and longsignal)

strategy.entry("Entry 3", strategy.long, when=strategy.opentrades == 2 and longsignal)

strategy.entry("Entry 4", strategy.long, when=strategy.opentrades == 3 and longsignal)

strategy.entry("Entry 5", strategy.long, when=strategy.opentrades == 4 and longsignal)





if strategy.position_size > 0
    strategy.exit(id="Exit 1", from_entry="Entry 1", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry="Entry 2", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry="Entry 3", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry="Entry 4", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry="Entry 5", profit=Profit_Ticks, loss=Loss_Ticks)
    



Больше