Стратегия называется
Стратегия состоит из двух частей. Первая часть использует 9-дневный Stoch для генерации краткосрочных сигналов реверсии. В частности, он длинный, когда закрытие выше, чем предыдущее закрытие, и 9-дневная быстрая линия Stoch ниже 50, в то время как медленная линия выше 50; он короткий, когда закрытие ниже, чем предыдущее закрытие, и 9-дневная быстрая линия Stoch выше 50, в то время как медленная линия ниже 50. Таким образом, золотой крест и смертный крест Stoch
Вторая часть использует индекс отрицательного объема (NVI) для формирования долгосрочных сигналов тренда. Формула расчета NVI заключается в том, что если объем дня меньше, чем в предыдущий день, то накапливается скорость изменения цены закрытия дня; если объем дня больше или равен предыдущему дню, то значение предыдущего дня остается неизменным.
Наконец, стратегия объединяет оба типа сигналов. Только когда краткосрочный сигнал обратного движения и долгосрочный сигнал тренда находятся в одном направлении, будет сформирован сигнал входа. Это помогает отфильтровать ложные сигналы и повысить стабильность.
Наибольшее преимущество этой стратегии заключается в стабильности сигналов. Краткосрочный сигнал обратного движения улавливает краткосрочные корректировки рынка, в то время как долгосрочный сигнал тренда гарантирует, что большая тенденция остается неизменной. Комбинация двух значительно повышает стабильность сигналов и может эффективно отфильтровывать ложные сигналы, которые имеют более высокую скорость от краткосрочных.
Кроме того, стратегия имеет мало параметров и легко оптимизируется.Пользователям нужно только скорректировать параметры NVI для адаптации к особенностям разных рынков.
Наибольший риск этой стратегии заключается в том, что между двумя типами сигналов может возникнуть временное отставание. Может возникнуть некоторое отставание между краткосрочным сигналом обратного движения и долгосрочным сигналом тренда, что приведет к непоследовательным сигналам в течение определенного периода времени, не способным сформировать стабильный сигнал входа.
Кроме того, индикатор NVI также чувствителен к аномальным скачкам объема торговли, что может привести к ошибочным оценкам долгосрочных тенденций.
Для смягчения этих рисков параметры индикатора NVI могут быть соответствующим образом скорректированы или добавлены стоп-лосс для контроля по потерям на одну сделку.
К основным аспектам оптимизации этой стратегии относятся:
Оптимизировать параметры индикатора Stoch для улучшения возможности захвата обратного движения.
Оптимизировать длительность цикла индикатора NVI для повышения возможности выявления долгосрочных тенденций.
Добавить фильтры объема торговли для устранения ложных сигналов от ненормальных объемов торговли.
Добавьте стратегии стоп-лосса для контроля по торговым потерям.
Стратегия разработана с стабильным механизмом входа, основанным на идее краткосрочного перехода и долгосрочного тренда, чтобы эффективно контролировать ложноположительный показатель и повышать стабильность сигнала.
/*backtest start: 2023-12-18 00:00:00 end: 2023-12-21 05:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 29/03/2021 // This is combo strategies for get a cumulative signal. // // First strategy // This System was created from the Book "How I Tripled My Money In The // Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies. // The strategy buys at market, if close price is higher than the previous close // during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. // The strategy sells at market, if close price is lower than the previous close price // during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50. // // Second strategy // The theory behind the indexes is as follows: On days of increasing // volume, you can expect prices to increase, and on days of decreasing // volume, you can expect prices to decrease. This goes with the idea of // the market being in-gear and out-of-gear. Both PVI and NVI work in similar // fashions: Both are a running cumulative of values, which means you either // keep adding or subtracting price rate of change each day to the previous day`s // sum. In the case of PVI, if today`s volume is less than yesterday`s, don`t add // anything; if today`s volume is greater, then add today`s price rate of change. // For NVI, add today`s price rate of change only if today`s volume is less than // yesterday`s. // // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// Reversal123(Length, KSmoothing, DLength, Level) => vFast = sma(stoch(close, high, low, Length), KSmoothing) vSlow = sma(vFast, DLength) pos = 0.0 pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1, iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) pos NVI(EMA_Len) => pos = 0.0 nRes = 0.0 xROC = roc(close, EMA_Len) nRes := iff(volume < volume[1], nz(nRes[1], 0) + xROC, nz(nRes[1], 0)) nResEMA = ema(nRes, EMA_Len) pos := iff(nRes > nResEMA, 1, iff(nRes < nResEMA, -1, nz(pos[1], 0))) pos strategy(title="Combo Backtest 123 Negative Volume Index", shorttitle="Combo", overlay = true) line1 = input(true, "---- 123 Reversal ----") Length = input(14, minval=1) KSmoothing = input(1, minval=1) DLength = input(3, minval=1) Level = input(50, minval=1) //------------------------- line2 = input(true, "---- Negative Volume Index ----") EMA_Len = input(50, minval=1) reverse = input(false, title="Trade reverse") posReversal123 = Reversal123(Length, KSmoothing, DLength, Level) posNVI = NVI(EMA_Len) pos = iff(posReversal123 == 1 and posNVI == 1 , 1, iff(posReversal123 == -1 and posNVI == -1, -1, 0)) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1 , 1, pos)) if (possig == 1 ) strategy.entry("Long", strategy.long) if (possig == -1 ) strategy.entry("Short", strategy.short) if (possig == 0) strategy.close_all() barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )