
A estratégia consiste na combinação de indicadores de alta e baixa, indicadores de linha média e indicadores de super tendências para determinar a tendência do mercado.
O indicador de alta e baixa determina se o preço criou um novo alto ou um novo baixo no período mais recente e acumula pontos. Quando o ponto aumenta, representa um aumento da força de cabeça; quando o ponto diminui, representa um aumento da força de cabeça vazia.
O indicador de linha média é usado para determinar se o preço está em uma tendência ascendente de escada para baixo ou em uma tendência descendente de escada para cima. Quando a linha média está em uma tendência ascendente de escada, representa um aumento da força de várias cabeças; Quando a linha média está em uma tendência descendente de escada, representa um aumento da força de cabeça para baixo.
Combinando os resultados do indicador de alta baixa e indicador de linha média, determinar a tendência do mercado; em combinação com a direção do indicador de tendência super, procurar oportunidades de construção de posição. Concretamente, quando o indicador de alta baixa e o indicador de linha média mostram aumento de força múltipla, e a direção do indicador de tendência super é para baixo, fazer uma posição longa; quando o indicador de alta baixa e o indicador de linha média mostram aumento de força no ar e a direção do indicador de tendência super é para cima, fazer uma posição vazia.
O indicador de alta e baixa é eficaz na determinação de movimentos de preços e mudanças de força, e o indicador de linha de equilíbrio é eficaz na determinação de tendências de preços, e a combinação dos dois permite determinar com mais precisão a direção do mercado.
A combinação com o indicador de super tendência pode evitar a construção de uma posição prematura ou tardia. O indicador de super tendência pode identificar efetivamente os pontos de reversão de preços.
Os indicadores podem ser verificados entre si para reduzir os falsos sinais.
Se os indicadores de alta, baixa e média emitirem sinais errados, pode ocorrer perda de posição.
Se a participação não for alta, os parâmetros do indicador de tendência super podem ser configurados incorretamente, o que pode gerar sinais errados.
Se a tendência se inverter muito rapidamente, o stop loss pode ser mal definido e causar grandes perdas.
O risco pode ser reduzido através da otimização dos parâmetros do indicador e do ajuste do ponto de parada.
Pode testar diferentes tipos de indicadores de linha média para encontrar a melhor combinação de parâmetros.
Os parâmetros do indicador de alta e baixa e do indicador de linha média podem ser otimizados para tornar o sinal mais estável e confiável.
Pode ser verificado em combinação com outros indicadores, como MACD, KD, etc., para reduzir falsos sinais.
Algoritmos de aprendizagem de máquina podem ser usados para otimizar automaticamente os parâmetros e o peso do sinal.
Pode ser combinado com a análise de sentimentos para avaliar o calor do mercado, evitando a comercialização de variedades de baixo calor.
A estratégia utiliza os indicadores de alta e baixa e os indicadores de linha média para avaliar a tendência e a força do mercado. A estratégia é combinada com o indicador de tendência super, para filtrar os sinais, para criar posições quando as forças do espaço se opõem e os indicadores de tendência super se revertem, para realizar operações de baixo risco.
/*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)