Динамическая многофакторная объемная стратегия торговли с использованием RSI и CCI

Автор:Чао Чжан, Дата: 2023-11-27 18:54:34
Тэги:

img

Обзор

Эта стратегия сочетает в себе динамический RSI, CCI и несколько скользящих средних MA для реализации многофакторной количественной стратегии торговли.

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

Технические показатели

  • MA: рассчитывает среднюю цену закрытия за период для определения тенденции цен
  • RSI: Судьи перекупили и перепродали уровни
  • CCI: Статус судей, перекупленных и перепроданных
  • Stoch KDJ: отклонение стохастического показателя от основного тренда

Торговые сигналы

Сигнал покупки: MA12 пересекает MA26, CCI ниже 100 (перепроданный), Stoch KDJ ниже 80 (перепроданный)

Сигнал продажи: RSI переходит ниже динамического порога, Stoch KDJ выше 80 (перекуплен)

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

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

Риски

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

Оптимизация

  1. Больше тестирования наборов данных на надежность стратегии
  2. Испытание комбинации нескольких параметров для определения оптимального
  3. Добавить стоп-лосс для уменьшения максимального вывода
  4. Добавьте размер позиции, чтобы избежать преследования и убийства.
  5. Испытать адаптивность к различным продуктам

Заключение

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


/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="ATOM2.0", shorttitle="ATOM V2.0", overlay=false, default_qty_type=strategy.cash, currency=currency.USD, initial_capital=200, default_qty_type=strategy.cash, default_qty_value=100, pyramiding=10)

// Set Parameter MA12
len12 = input(12, minval=1, title="Length")
src12 = input(close, title="Source")
ma12 = sma(src12, len12)
//plot(ma12, color=color.blue, title="MA12")

// Set Parameter MA26
len26 = input(26, minval=1, title="Length")
src26 = input(close, title="Source")
ma26 = sma(src26, len26)
//plot(ma26, color=color.orange, title="MA12")

//Stochastic RSI 14,3,3
smoothK_1 = input(3, minval=1)
smoothD_1 = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src_1 = input(close, title="RSI Source_1")

rsi1 = rsi(src_1, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK_1)
d = sma(k, smoothD_1)
//plot(k, color=color.red)
//plot(d, color=color.yellow)

//Stochastic RSI 5,4,3
smoothK_2 = input(4, minval=1)
smoothD_2 = input(3, minval=1)
lengthRSI_2 = input(5, minval=1)
lengthStoch_2 = input(5, minval=1)
src_2 = input(close, title="RSI Source_2")

rsi2 = rsi(src_2, lengthRSI_2)
k_2 = sma(stoch(rsi2, rsi2, rsi2, lengthStoch_2), smoothK_2)
d_2 = sma(k_2, smoothD_2)
//plot(k_2, color=color.white)
//plot(d_2, color=color.green)

// CCI
cci = cci(close,26)
//plot(cci,color=color.blue)

// Dynamic RSI
DZbuy = 0.1
DZsell = 0.1
Period = 14
Lb = 60

RSILine = rsi(close,Period)
jh = highest(RSILine, Lb)
jl = lowest(RSILine, Lb)
jc = (wma((jh-jl)*0.5,Period) + wma(jl,Period))
Hiline = jh - jc * DZbuy
Loline = jl + jc * DZsell
R = (4 * RSILine + 3 * RSILine[1] + 2 * RSILine[2] + RSILine[3] ) / 10

plot(R, title='R', color=color.white, linewidth=1, transp=0)
plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0)
plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0)
plot(jc, title='Jc', color=color.purple,  linewidth=1, transp=50)

col_1 = R > Hiline ? color.red:na
col_2 = R < Loline ? color.green:na

fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Hiline, title='Hiline', color=color.yellow,  linewidth=1, transp=0), color=col_1,transp=0)
fill(plot(R, title='R', color=color.white, linewidth=1, transp=0), plot(Loline, title='Loline', color=color.yellow, linewidth=1, transp=0), color=col_2,transp=0)
//------------------------------------------------------------------------------
// Calculate qty
// Parameter
fund = 10           // Fund per Contract in USD
leverage = 100     // Leverage
// Buy Condition
buyCondition = (ma12>ma26 and cci<100 and k<80 and d<80 and k_2<80 and d_2<80 and crossover(k_2, d_2))
buy = (buyCondition == input(1))
alertcondition(buy, title='time to Long', message='Long!!!')
//closeBuy = (cci>100 and cci<cci[1] and cci<cci[2])
closeBuy = (crossunder(R, Hiline) and k>80)
alertcondition(closeBuy, title='Time to Close', message='Close Long')

// Submit Orders
strategy.entry(id="Long", qty=(fund*leverage)/close, long=true, when=buyCondition)
strategy.close(id="Long", when=closeBuy)

Больше