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

Многоиндикаторная ежедневная стратегия торговли биткойнами

Автор:Чао Чжан, Дата: 2023-10-30 10:37:58
Тэги:

img

Обзор

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

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

Стратегия использует следующие ключевые показатели:

  1. MACD (Fast MA - Slow MA) и его линия сигнала.

  2. Пересечение RSI выше порога дает сигнал покупки.

  3. Stoch RSI. Stoch RSI показывает уровни перекупленности/перепродажи RSI. Stoch RSI ниже порога дает сигнал покупки, а выше порога дает сигнал продажи.

  4. Движущаяся средняя направленность.

Согласно этим показателям, торговые сигналы:

Сигнал покупкиКогда?(Stoch RSI < Threshold) AND (MACD crossing above threshold OR RSI crossing above threshold)

Сигнал продажиКогда?(MACD crossing below 0) AND (Close below MA OR Stoch RSI > Threshold)

Использование нескольких индикаторов вместе позволяет лучше определить текущее направление тренда и определить точки переворота тренда для вступления в сделки.

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

  1. Объединение нескольких индикаторов повышает точность и предотвращает ложные сигналы от одного индикатора.

  2. MACD показывает направление и силу тренда. RSI отражает уровни перекупленности/перепроданности. Stock RSI определяет перекупленность/перепроданность RSI. MA показывает направление тренда. Эти индикаторы проверяют друг друга.

  3. Сигналы покупки/продажи требуют сочетания нескольких индикаторов, фильтруя некоторые ложные сигналы и избегая ненужных сделок.

  4. Backtest начинается с 1 января 2017 года, охватывая огромный бычий поток биткоина в конце 2017 года.

  5. Стоп-лосс устанавливается для контроля потерь в одиночных сделках.

Риски

  1. Несмотря на то, что использование нескольких индикаторов повышает точность, расхождение между ними все равно может привести к некоторым неправильным сигналам.

  2. Оптимизированный уровень стоп-лосса может потребовать корректировки для различных рыночных ситуаций.

  3. Ежедневный график препятствует детальным операциям в более короткие промежутки времени.

  4. Стратегия проверяется только на ограниченных исторических данных. Существует риск перегрузки. Требуется дальнейшее тестирование на более длительных сроках и больше рынков.

Возможности для расширения

  1. Проверьте больше комбинаций индикаторов, чтобы найти оптимальные стратегии с несколькими индикаторами.

  2. Оптимизировать параметры показателей для получения лучших значений.

  3. Проверьте различные уровни стоп-лосса, чтобы найти оптимальное соотношение риск/вознаграждение.

  4. Проведите обратные тесты по более длинным историческим данным, чтобы избежать переподстройки.

  5. Исследуйте применение логики стратегии в более высокие частоты временных рамок для более частой торговли.

Заключение

Эта стратегия сочетает в себе MACD, RSI, Stoch RSI и другие индикаторы для определения направления ежедневного тренда биткоина и выявления обратных тенденций для входа в торговлю. Стоп-лосс настроен на контроль риска торговли.


/*backtest
start: 2022-10-23 00:00:00
end: 2023-10-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Original code is from CredibleHulk and modified by bennef
strategy("BTC Daily Strategy BF", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

/////////////// Input Params /////////////// 
rsi_threshold = input(30)
rsi_length = input(4)
srsi_length = input(8)
srsi_smooth = input(4)
srsi_sell_threshold = input(57)
length = input(14)
dma_signal_threshold = input(-1)
fastLength = input(11)
slowlength = input(18)
MACDLength = input(6)
MACD_signal_threshold = input(-2)
short_loss_tol = input(5)
long_loss_tol = input(5)

stop_level_long = strategy.position_avg_price * (1 - long_loss_tol / 100.0)
stop_level_short = strategy.position_avg_price * (1 + short_loss_tol / 100.0)
    
///////////////  Signal generation ///////////////
// MACD 
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

// RSI and Stochastic RSI 
rs = rsi(close, rsi_length)
k = sma(stoch(rs, rs, rs, srsi_length), srsi_smooth)

// SMA 
norm = sma(ohlc4, length)
threshold = close - norm   

/////////////// Strategy ///////////////
long = ((crossover(delta, MACD_signal_threshold) or crossover(rs, rsi_threshold)) and k < srsi_sell_threshold)
short = (crossunder(delta, 0) or (crossunder(threshold, dma_signal_threshold) and k > srsi_sell_threshold))

if testPeriod()
    strategy.entry("L", strategy.long, when = long)
    strategy.entry("S", strategy.short, when = short)
    strategy.exit("stop loss L", from_entry = "L", stop = stop_level_long)
    strategy.exit("stop loss S", from_entry = "S", stop = stop_level_short)

/////////////// Plotting ///////////////
// MACD
plot(delta, color = delta > MACD_signal_threshold ? color.lime : delta < 0 ? color.red : color.yellow)
MACD_signal_threshold_line = hline(MACD_signal_threshold, color = color.yellow, title = "MACD Signal Threshold")

// RSI
plot(rs, color = rs > rsi_threshold ? color.lime : color.fuchsia)
rsi_threshold_line = hline(rsi_threshold, color = color.fuchsia, title = "RSI Threshold")

// Stochastic RSI 
plot(k, color = k > srsi_sell_threshold ? color.lime : color.red)
srsi_sell_threshold_line = hline(srsi_sell_threshold, color = color.white, title = "Stoch RSI Threshold")

// SMA
plot(threshold / 100, color = threshold < dma_signal_threshold ? color.red : color.blue)
dma_signal_threshold_line = hline (dma_signal_threshold, color = color.blue, title = "DMA Signal Threshold")

bgcolor(long ? color.lime : short ? color.red : na, transp=50)

Больше