Количественная стратегия: отслеживание тенденций силы и слабости MA


Дата создания: 2024-01-19 16:50:13 Последнее изменение: 2024-01-19 16:50:13
Копировать: 3 Количество просмотров: 609
1
Подписаться
1617
Подписчики

Количественная стратегия: отслеживание тенденций силы и слабости MA

Обзор

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

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

  1. Рассчитайте множественное множество МА на 5, 10, 20 дней и т. д., чтобы определить, преодолела ли цена каждую МА вверх, преодолела ли она марки, и накопила ли она силы МА.
  2. Применение скользящего среднего значения к квадрату силы МА, формирование среднелинейного показателя, определение среднелинейного пустоты, создание торгового сигнала.
  3. Конфигурируемые параметры для отслеживания циклов: кратковременная группа МА, долгосрочный средний цикл, условия открытия позиции и т. д.

Эта стратегия основное определение плюсового пространства среднелинейного показателя, через среднелинейный показатель реагирует на среднюю интенсивность MA группы. MA группы сосредоточены на определении направления и силы тенденции, среднелинейный показатель определяет продолжительность.

Анализ преимуществ

  1. Многомерная модель оценки силы тренда. Одной MA-линии не удается определить, достаточно ли она сильной; стратегия измеряет прорывы в многочисленных MA, чтобы гарантировать, что силы достаточны для последующего сигнала, высокая надежность.
  2. Конфигурируемый отслеживающий цикл. Настройка краткосрочных параметров МА позволяет улавливать тренды на разных уровнях; настройка долгосрочных параметров МА позволяет контролировать ритм выхода. Пользователь может настраивать цикл в соответствии с рынком.
  3. Только сделайте больше, чтобы избежать ошибки и следить за длительным восходящим трендом. Только сделайте больше, только следите за тем, чтобы не отставать, чтобы уменьшить обратный убыток.

Анализ рисков

  1. Существует риск отступления. Существует больший риск отступления, когда короткая линия проходит под средней линией длинной линии.
  2. Существуют риски возврата. Долгосрочное функционирование рынка неизбежно приводит к корректировке, стратегия должна своевременно остановить Exiting. Рекомендуется использовать технологии, такие как диапазоны и каналы, для определения конца большого цикла и контроля риска возврата.
  3. Риск параметров. Неправильная конфигурация параметров может привести к ошибочному сигналу. Параметры должны быть адаптированы для разных сортов, чтобы обеспечить их стабильность.

Направление оптимизации

  1. Вместе с другими показателями фильтрации входа в поле. Можно рассмотреть возможность комбинирования пропускной способности, поскольку количество может быть подтверждено, чтобы подать сигнал, чтобы избежать ложного прорыва.
  2. Увеличение стоп-убытков. Движущиеся стопы, кривые стопы позволяют уменьшить потери при реверсе. Стоп-убытки также могут быть рассмотрены, чтобы заблокировать прибыль и избежать возврата.
  3. Рассматривать варианты фьючерсов и валют. Прорыв MA-линии более подходит для трендовых вариантов. Можно оценить стабильность параметров различных фьючерсных вариантов и выбрать оптимальный вариант.

Подвести итог

Стратегия определяет ценовые тенденции, рассчитывая показатели силы МА, и отслеживает тенденции с использованием равномерного пересечения в качестве источника сигнала. Преимущества стратегии заключаются в точном определении силы тенденции, высокой надежности. Основные риски заключаются в обратном тренде и корректировке параметров.

Исходный код стратегии
/*backtest
start: 2023-12-19 00:00:00
end: 2024-01-18 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("MA Strength Strategy", overlay=false, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)
MAType = input(title="Moving Average Type", defval="ema", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
LookbackPeriod = input(10, step=10)

IndexMAType = input(title="Moving Average Type", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
IndexMAPeriod = input(200, step=10)

considerTrendDirection = input(true)
considerTrendDirectionForExit = input(true)
offset = input(1, step=1)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true

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.0
    upwardScore := close > ma5? upwardScore+1.10:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1.10:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1.10:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1.10:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1.15:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1.20:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1.25: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
    trendStrength = upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 6? 0.5: upwardScore < 2?-0.5:upwardScore>4?0.25:-0.25) : 0
    [trendStrength, upwardScore]
    
includePartiallyAligned = true
[trendStrength, upwardScore] = f_getMaAlignment(MAType, includePartiallyAligned)

upwardSum = sum(upwardScore, LookbackPeriod)

indexSma = f_getMovingAverage(upwardSum,IndexMAType,IndexMAPeriod)

plot(upwardSum, title="Moving Average Strength", color=color.green, linewidth=2, style=plot.style_linebr)
plot(indexSma, title="Strength MA", color=color.red, linewidth=1, style=plot.style_linebr)
buyCondition = crossover(upwardSum,indexSma) and (upwardSum > upwardSum[offset] or not considerTrendDirection) 
sellCondition = crossunder(upwardSum,indexSma) and (upwardSum < upwardSum[offset]  or not considerTrendDirection)

exitBuyCondition = crossunder(upwardSum,indexSma)
exitSellCondition = crossover(upwardSum,indexSma) 
strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when= inDateRange and buyCondition, oca_name="oca_buy")
strategy.close("Buy", when = considerTrendDirectionForExit? sellCondition : exitBuyCondition)
strategy.entry("Sell", strategy.short, when= inDateRange and sellCondition, oca_name="oca_sell")
strategy.close( "Sell", when = considerTrendDirectionForExit? buyCondition : exitSellCondition)