Индикаторы максимума и минимума, а также комбинированная стратегия индикатора скользящей средней


Дата создания: 2023-11-21 15:19:35 Последнее изменение: 2023-11-21 15:19:35
Копировать: 2 Количество просмотров: 648
1
Подписаться
1617
Подписчики

Индикаторы максимума и минимума, а также комбинированная стратегия индикатора скользящей средней

Обзор

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

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

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

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

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

Стратегические преимущества

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

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

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

Стратегический риск

  1. Если высокий, низкий и средний показатели посылают ошибочные сигналы, это может привести к потере позиций.

  2. Недостаточная настройка параметров индикатора супертенденции может привести к ошибочному сигналу.

  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)