Эта стратегия в основном сочетает в себе индекс высокой низкой, индекс скользящей средней и индекс супер-тенденции для определения тенденции рынка и открытых позиций.
Индекс высокого низкого оценивает, достигла ли последняя цена за определенный период нового максимума или нового минимума, и накапливает балл. Когда балл повышается, он представляет усиление бычьих сил. Когда балл падает, он представляет усиление медвежих сил.
Индекс движущейся средней оценивает, находится ли цена в восходящем тренде или в нисходящем тренде. Когда движущаяся средняя показывает рост в форме лестницы, она представляет усиление бычьих сил. Когда она показывает падение в форме лестницы, она представляет усиление медвежьих сил.
Объедините суждения индекса высокого низкого и индекса скользящей средней, чтобы определить тенденцию рынка, а затем найдите торговые возможности в сочетании с направлением индекса супер-тенденции. В частности, когда как индекс высокого низкого, так и индекс скользящей средней показывают усиление бычьих сил, а направление индекса супер-тенденции снижается, открывайте длинные позиции. Когда оба индекса показывают усиление медвежих сил и направление индекса супер-тенденции повышается, открывайте короткие позиции.
Индекс высокого низкого может эффективно оценивать движение цен и изменения импульса. Индекс скользящей средней может эффективно определять тенденцию цен. Комбинация обоих может более точно определить направление рынка.
Открытие позиций в сочетании с индексом Super Trend позволяет избежать преждевременного или позднего открытия позиций.
Многочисленные показатели проверяют друг друга и уменьшают ложные сигналы.
Неверные сигналы от индекса высокого низкого и индекса скользящей средней могут привести к убыточным позициям.
Недостаточное участие и неправильное настройка параметров индекса Super Trend могут генерировать неправильные сигналы.
Быстрое изменение тренда и неправильное установление стоп-лосса могут привести к большим потерям.
Риски могут быть уменьшены путем оптимизации параметров индикаторов, корректировки уровня цены стоп-лосса и т.д.
Испытать различные типы показателей скользящей средней, чтобы найти оптимальную комбинацию параметров.
Оптимизировать параметры индекса высокой низкой и индекса скользящей средней, чтобы сделать сигналы более стабильными и надежными.
Включить другие индикаторы для проверки, такие как MACD, KD и т. д., чтобы уменьшить ложные сигналы.
Включить алгоритмы машинного обучения для автоматической оптимизации параметров и весов сигналов.
Включите анализ настроений, чтобы избежать торговли менее популярными продуктами.
Эта стратегия определяет рыночные тенденции и импульс с помощью индекса высокого низкого и индекса скользящей средней, а затем фильтрует сигналы с помощью индекса супер-тенденции, открывая позиции, когда бычьи и медвежие силы противостоят друг другу, а индекс супер-тенденции переворачивается. Ее преимущества заключаются в многократной проверке сигналов и своевременном открытии позиций, которые могут эффективно контролировать риски. Существующие проблемы включают ложные сигналы и неправильное суждение о тренде. Различные улучшения могут быть сделаны с помощью оптимизации параметров, настройки стоп-лосса, фильтрации сигналов и т. д., чтобы сделать стратегию более надежной и надежной.
/*backtest start: 2023-10-21 00:00:00 end: 2023-11-20 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/ // © HeWhoMustNotBeNamed //@version=4 strategy("AlignedMA and Cumulative HighLow Strategy", overlay=true, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true) MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"]) includePartiallyAligned = input(true) HighLowPeriod = input(50, minval=1,step=1) LookbackPeriod = input(10, minval=1,step=1) supertrendMult = input(2, minval=1, maxval=10, step=0.5) supertrendLength = input(10, minval=1) tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short]) backtestYears = input(10, minval=1, step=1) f_getMovingAverage(source, MAType, length)=> ma = sma(source, length) if(MAType == "ema") ma := ema(source,length) if(MAType == "hma") ma := hma(source,length) if(MAType == "rma") ma := rma(source,length) if(MAType == "vwma") ma := vwma(source,length) if(MAType == "wma") ma := wma(source,length) ma f_getMaAlignment(MAType, includePartiallyAligned)=> ma5 = f_getMovingAverage(close,MAType,5) ma10 = f_getMovingAverage(close,MAType,10) ma20 = f_getMovingAverage(close,MAType,20) ma30 = f_getMovingAverage(close,MAType,30) ma50 = f_getMovingAverage(close,MAType,50) ma100 = f_getMovingAverage(close,MAType,100) ma200 = f_getMovingAverage(close,MAType,200) upwardScore = 0 upwardScore := close > ma5? upwardScore+1:upwardScore upwardScore := ma5 > ma10? upwardScore+1:upwardScore upwardScore := ma10 > ma20? upwardScore+1:upwardScore upwardScore := ma20 > ma30? upwardScore+1:upwardScore upwardScore := ma30 > ma50? upwardScore+1:upwardScore upwardScore := ma50 > ma100? upwardScore+1:upwardScore upwardScore := ma100 > ma200? upwardScore+1:upwardScore upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200 downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200 upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0 f_getHighLowValue(HighLowPeriod)=> currentHigh = highest(high,HighLowPeriod) == high currentLow = lowest(low,HighLowPeriod) == low currentHigh?1:currentLow?-1:0 inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0) maAlignment = f_getMaAlignment(MAType,includePartiallyAligned) alignedMaIndex = sum(maAlignment,LookbackPeriod) maAlignmentDirection = alignedMaIndex > alignedMaIndex[1] ? 1 : alignedMaIndex < alignedMaIndex[1] ? -1 : 0 maAlignmentDirection := maAlignmentDirection == 0? nz(maAlignmentDirection[1],0):maAlignmentDirection highLowIndex = f_getHighLowValue(HighLowPeriod) cumulativeHighLowIndex = sum(highLowIndex,LookbackPeriod) hlDirection = cumulativeHighLowIndex > cumulativeHighLowIndex[1] ? 1 : cumulativeHighLowIndex < cumulativeHighLowIndex[1] ? -1 : 0 hlDirection := hlDirection == 0? nz(hlDirection[1],0):hlDirection [superTrend, dir] = supertrend(supertrendMult, supertrendLength) buyEntry = (dir == -1 and maAlignmentDirection == 1 and hlDirection == 1) sellEntry = (dir == 1 and maAlignmentDirection == -1 and hlDirection == -1) barColor = buyEntry?color.lime:sellEntry?color.orange:color.gray barcolor(barColor) // strategy.risk.allow_entry_in(tradeDirection) strategy.entry("Buy", strategy.long, when=barColor == color.lime and inDateRange, oca_name="oca_buy") strategy.close("Buy", when=dir == 1) strategy.entry("Sell", strategy.short, when=barColor == color.orange and inDateRange, oca_name="oca_sell") strategy.close("Sell", when=dir == -1)