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

Автор:Чао Чжан, Дата: 2023-09-24 13:24:47
Тэги:

Обзор

Эта экспериментальная стратегия объединяет импульс Chande, RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI и другие индикаторы импульса, входящие в позиции, когда все индикаторы дают выравниваемые сигналы.

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

  1. Вычислить импульс Chande и установить линии покупки и продажи.

  2. Расчет RMI, Triple HMA RSI, Double EVW RSI, Triple EMA RSI и других показателей.

  3. Установите линии покупки и продажи для каждого индикатора.

  4. Когда Chande Momentum пересекает свою линию покупки, проверьте, находятся ли другие индикаторы также ниже соответствующих линий покупки.

  5. И наоборот, когда Chande Momentum пересекает линию продажи, в то время как другие индикаторы превышают линию продажи, генерируют короткий сигнал.

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

  1. Объединение индикаторов обеспечивает взаимное подтверждение, избегая ложных сигналов.

  2. "Чанде Моментум" чувствительно отслеживает изменения тренда.

  3. RMI показывает уровни импульса для определения уровня перекупленности/перепродажи.

  4. Испытание различных расчетов RSI с HMA RSI, EVW RSI и т.д.

  5. Гибкая комбинация из нескольких индикаторов позволяет проводить испытания эффективности индикаторов.

Риски

  1. Требования к комбинации с несколькими показателями сложнее выполнить, меньше сделок, упущенные возможности.

  2. Нет механизмов контроля риска, таких как стоп-лосс.

  3. Показатели, зависящие от временных рамок, могут работать не во всех периодах.

  4. Нет оптимизации параметров, возможно плохое настройка параметров.

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

Возможные решения:

  1. Уменьшить показатели для большего количества сделок.

  2. Включить отставание или жесткую остановку для ограничения потерь.

  3. Испытать различные продукты и временные рамки, чтобы найти оптимальные параметры.

  4. Используйте машинное обучение или поиск сетки для оптимизации параметров.

  5. Проверка на большем количестве рынков для обеспечения надежности.

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

  1. Испытайте различные наборы параметров, чтобы найти оптимальную конфигурацию.

  2. Добавить адаптивные многочасовые индикаторы импульса.

  3. Включить обнаружение тренда, чтобы избежать контратендных сделок.

  4. Использовать машинное обучение для улучшения многопоказательного взвешивания.

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

Резюме

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


/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
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/
// © burgercrisis

//@version=4
strategy("RMI + Triple HMRSI + Double EVWRSI + TERSI Strategy")

//* Backtesting Period Selector | Component *//
//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made *//
testStartYear = input(2021, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(999999, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(26, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
/////////////// END - Backtesting Period Selector | Component ///////////////


src = input(close, "Price", type = input.source)
CMOlength = input(9, minval=1, title="Alpha Chande Momentum Length")

//CMO
momm = change(src)
f1(m) => m >= 0.0 ? m : 0.0
f2(m) => m >= 0.0 ? 0.0 : -m
m1 = f1(momm)
m2 = f2(momm)
sm1 = sum(m1, CMOlength)
sm2 = sum(m2, CMOlength)
percent(nom, div) => 100 * nom / div
chandeMO = percent(sm1-sm2, sm1+sm2)
plot(chandeMO, "Chande MO", color=color.blue)




//RMI
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Relative Momentum Index script may be freely distributed under the MIT license.
length3 = input(title="RMI Length", type=input.integer, minval=1, defval=30)
momentumLength3 = input(title="RMI Momentum ", type=input.integer, minval=1, defval=25)
up3 = rma(max(change(src, momentumLength3), 0), length3)
down3 = rma(-min(change(src, momentumLength3), 0), length3)

rmi3 = (down3 == 0 ? 100 : up3 == 0 ? 0 : 100 - (100 / (1 + up3 / down3)))-50
//
//
// end RMI, end Alex Orekhov copywrite
//
//

lengthMA = input(7)
lengthRSI = input(14)
thrsi = hma(hma(hma(rsi(src, lengthRSI), lengthMA), lengthMA), lengthMA)
thrsi1 = (thrsi-50)*10

lengthMA2 = input(7)
lengthRSI2 = input(14)
devwrsi = ((ema(ema(vwma(rsi(src, lengthRSI2), lengthMA2), lengthMA2), lengthMA2))-50)*5

lengthMA3 = input(7)
lengthRSI3 = input(14)
tersi = ((ema(ema(ema(rsi(src, lengthRSI3), lengthMA3), lengthMA3), lengthMA3))-50)*10

rmirsi = ((thrsi*rmi3/25))

//Boundary Lines

obLevel1 = input(0, title="Chande Sellline")
osLevel1 = input(0, title="Chande Buyline")
hline(obLevel1, color=#0bc4d9)
hline(osLevel1, color=#0bc4d9)

obLevel2 = input(0, title="Triple HMRSI Sellline")
osLevel2 = input(0, title="Triple HMRSI Buyline")
hline(obLevel2, color=#5a0bd9)
hline(osLevel2, color=#5a0bd9)

obLevel3 = input(0, title="DEVWRSI Sellline")
osLevel3 = input(0, title="DEVWRSI Buyline")
hline(obLevel3, color=#5a0bd9)
hline(osLevel3, color=#5a0bd9)

obLevel4 = input(0, title="TERSI Sellline")
osLevel4 = input(0, title="TERSI Buyline")
hline(obLevel4, color=#5a0bd9)
hline(osLevel4, color=#5a0bd9)

obLevel5 = input(0, title="RMI Sellline")
osLevel5 = input(0, title="RMI Buyline")
hline(obLevel5, color=#5a0bd9)
hline(osLevel5, color=#5a0bd9)

obLevel6 = input(0, title="RMI*RSI Sellline")
osLevel6 = input(0, title="RMI*RSI Buyline")
hline(obLevel6, color=#5a0bd9)
hline(osLevel6, color=#5a0bd9)

plot((thrsi1), title="THRSI")
plot(devwrsi, color=color.red, title="DEVWRSI")
plot(tersi, color=color.yellow, title="TERSI")
plot(rmirsi, color=color.purple, title="RMI*HMRSI")
plot(rmi3, color=color.orange, title="RMI")




longcondition1 = crossover(chandeMO, osLevel1)
shortcondition1 = crossunder(chandeMO, obLevel1)
longcondition2 = rmirsi<osLevel6 and rmi3<osLevel5 and tersi<osLevel4 and devwrsi<osLevel3 and thrsi1<osLevel2  and longcondition1
shortcondition2 = rmirsi>obLevel6 and rmi3>obLevel5 and tersi>obLevel4 and devwrsi>obLevel3 and thrsi1>obLevel2  and shortcondition1

if testPeriod()
    if longcondition2
        strategy.entry("Buy", strategy.long)
    if shortcondition2
        strategy.entry("Sell", strategy.short)






hline(0, color=#C0C0C0, linestyle=hline.style_dashed, title="Zero Line")

Больше