Стратегия сочетания скользящей средней и кумулятивной высоких низких индексов

Автор:Чао Чжан, Дата: 2023-11-21 15:19:35
Тэги:

img

Обзор

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

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

  1. Индекс высокого низкого оценивает, достигла ли последняя цена за определенный период нового максимума или нового минимума, и накапливает балл. Когда балл повышается, он представляет усиление бычьих сил. Когда балл падает, он представляет усиление медвежих сил.

  2. Индекс движущейся средней оценивает, находится ли цена в восходящем тренде или в нисходящем тренде. Когда движущаяся средняя показывает рост в форме лестницы, она представляет усиление бычьих сил. Когда она показывает падение в форме лестницы, она представляет усиление медвежьих сил.

  3. Объедините суждения индекса высокого низкого и индекса скользящей средней, чтобы определить тенденцию рынка, а затем найдите торговые возможности в сочетании с направлением индекса супер-тенденции. В частности, когда как индекс высокого низкого, так и индекс скользящей средней показывают усиление бычьих сил, а направление индекса супер-тенденции снижается, открывайте длинные позиции. Когда оба индекса показывают усиление медвежих сил и направление индекса супер-тенденции повышается, открывайте короткие позиции.

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

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

  2. Открытие позиций в сочетании с индексом Super Trend позволяет избежать преждевременного или позднего открытия позиций.

  3. Многочисленные показатели проверяют друг друга и уменьшают ложные сигналы.

Риски

  1. Неверные сигналы от индекса высокого низкого и индекса скользящей средней могут привести к убыточным позициям.

  2. Недостаточное участие и неправильное настройка параметров индекса Super Trend могут генерировать неправильные сигналы.

  3. Быстрое изменение тренда и неправильное установление стоп-лосса могут привести к большим потерям.

  4. Риски могут быть уменьшены путем оптимизации параметров индикаторов, корректировки уровня цены стоп-лосса и т.д.

Оптимизация

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

  2. Оптимизировать параметры индекса высокой низкой и индекса скользящей средней, чтобы сделать сигналы более стабильными и надежными.

  3. Включить другие индикаторы для проверки, такие как MACD, KD и т. д., чтобы уменьшить ложные сигналы.

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

  5. Включите анализ настроений, чтобы избежать торговли менее популярными продуктами.

Заключение

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


/*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)


Больше