Основано на двойной количественной торговой системе


Дата создания: 2024-02-26 14:30:54 Последнее изменение: 2024-02-26 14:30:54
Копировать: 5 Количество просмотров: 654
1
Подписаться
1617
Подписчики

Основано на двойной количественной торговой системе

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

Стратегический принцип

Эта стратегия основана на определении направления тренда на основе показателя CCI. Если показатель CCI выше 100, то это рынок с большим количеством голов, а если он ниже 100, то это рынок с пустым количеством голов. Система использует два пересечения подвижных средних, чтобы помочь определить направление тренда.

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

Стратегия открывает позиции только в определенное время торговли, а за 15 минут до закрытия активно ликвидирует все позиции, чтобы избежать риска на ночь. После открытия позиции используется мобильный стоп-лосс для блокировки прибыли.

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

  • В сочетании с трендовым суждением и перекрестными показателями, можно эффективно идентифицировать тренды и фильтровать шум, чтобы получить точный вход
  • Использование мобильного стоп-интервью для активного управления рисками и избежания преследования.
  • Открывайте позиции только в определенное время, чтобы избежать риска “попасть в пропасть” в одночасье
  • Параметры RSI могут быть скорректированы, чтобы быть гибкими в различных рыночных условиях.

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

  • Показатели CCI неэффективны в оценке чрезвычайно волатильных рынков
  • Двойные RSI имеют более ограничительные условия для скрещивания и могут упустить некоторые возможности
  • Мобильные стоп-убытки могут быть слишком субъективными и требуют оптимизации параметров
  • Укажите время торговли, которое может быть пропущено из-за пропуска важных ночных новостей

Рекомендации по оптимизации

  • Показатели CCI для различных параметров могут быть протестированы, чтобы найти оптимальную комбинацию параметров
  • Тест на то, можно ли отменить RSI перекрестные ограничения, чтобы принять участие непосредственно по CCI
  • Оптимизация обратной связи для параметров мобильного стоп-метода, чтобы найти оптимальные параметры
  • Тестирование отмены логики обязательного закрытия позиции на мобильный отслеживание стоп-убытков в течение периода хранения, чтобы максимизировать прибыль

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
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/
// © rwestbrookjr

//@version=5
strategy("EMA with RSI Cross Strategy", overlay=true)

//EMA
fastLen = input(title='Fast EMA Length', defval=9)
slowLen = input(title='Slow EMA Length', defval=20)

fastEMA = ta.ema(close, fastLen)
slowEMA = ta.ema(close, slowLen)

fema = plot(fastEMA, title='FastEMA', color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
sema = plot(slowEMA, title='SlowEMA', color=color.new(color.red, 0), linewidth=1, style=plot.style_line)

fill(fema, sema, color=fastEMA > slowEMA ? color.new(#417505, 50) : color.new(#890101, 50), title='Cloud')

// Bull and Bear Alerts
//Bull = ta.crossover(fastEMA, slowEMA)
Bull = fastEMA > slowEMA
//Bear = ta.crossunder(fastEMA, slowEMA)
Bear = fastEMA < slowEMA

//RSIs
rsiLength1Input = input.int(9, minval=1, title="RSI Length", group="RSI Settings")
rsiSource1Input = input.source(close, "Source", group="RSI Settings")
rsiLength2Input = input.int(20, minval=1, title="RSI Length", group="RSI Settings")
rsiSource2Input = input.source(close, "Source", group="RSI Settings")

up1 = ta.rma(math.max(ta.change(rsiSource1Input), 0), rsiLength1Input)
down1 = ta.rma(-math.min(ta.change(rsiSource1Input), 0), rsiLength1Input)
rsi = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))
up2 = ta.rma(math.max(ta.change(rsiSource2Input), 0), rsiLength2Input)
down2 = ta.rma(-math.min(ta.change(rsiSource2Input), 0), rsiLength2Input)
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

//CCI
cciLength = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, cciLength)
cci = (src - ma) / (0.015 * ta.dev(src, cciLength))

//Trail Stop Setup
trstp = input.float(title="Trail Loss($)", minval = 0.0, step = 0.01, defval = 0.5)

longStop = 0.0, shortStop = 0.0

longStop := if Bull
    stopValue = close - trstp
    math.max(stopValue, longStop[1])
else
    0.0

shortStop := if Bear
    stopValue = close + trstp
    math.min(stopValue, shortStop[1])
else
    999999


//Session Setup
open_session=input(defval="0930-1545")
session = time("1", open_session)
validSession=(na(session) ? 0 : 1)

//Trade Signals
longCondition = Bull and cci > 100 and ta.crossover(rsi,rsi2) and validSession
if (longCondition)
    strategy.entry("Long", strategy.long, 1)
    
//longExit = close > strategy.opentrades.entry_price(0) + 1.5 or close < strategy.opentrades.entry_price(0) - 0.75
longExit = close < longStop or not validSession
if (longExit)
    strategy.close("Long")

shortCondition = Bear and cci < 100 and ta.crossunder(rsi,rsi2) and validSession
if (shortCondition)
    strategy.entry("Short", strategy.short, 1)

//shortExit = close < strategy.opentrades.entry_price(0) - 1.5 or close > strategy.opentrades.entry_price(0) + 0.75
shortExit = close > shortStop or not validSession
if (shortExit)
    strategy.close("Short")