
A estratégia, denominada estratégia de negociação baseada em percentual de Heikin Ashi ROC, tem o objetivo de fornecer uma estrutura de negociação fácil de usar baseada em Heikin Ashi ROC e seus percentual.
A estratégia gera um traçado ascendente e descendente para a negociação, calculado o ROC do preço de fechamento do Heikin Ashi e seus valores máximos e mínimos em diferentes períodos de tempo. Concretamente, ele calcula o ROC do preço de fechamento do Heikin Ashi nos últimos ciclos de rocLength. Em seguida, ele calcula o rocHigh e o rocLow nos últimos 50 ciclos de ROC.
A maior vantagem da estratégia é que ela usa a capacidade de rastreamento de tendências robustas do indicador ROC, combinada com as características da informação de preço liso Heikin Ashi, para identificar efetivamente as mudanças na tendência. Em comparação com indicadores como a média móvel simples, a resposta do ROC às mudanças de preço é mais aguda, permitindo que a estratégia entre em jogo em tempo hábil. Além disso, o uso de percentual gerado por ups e downs pode efetivamente filtrar oscilações e evitar falsas rupturas que causam negociações desnecessárias.
O principal risco desta estratégia é que a configuração inadequada dos parâmetros pode levar a transações frequentes ou inadequadas. O ciclo de rocLength e percentual de cálculo precisa ser configurado com cuidado, caso contrário, pode levar a um declínio muito fraco ou rígido, resultando em oportunidades de negociação perdidas ou causando prejuízos desnecessários. Além disso, a configuração de percentual também precisa ser ajustada de acordo com testes repetidos em diferentes mercados para encontrar a melhor combinação de parâmetros.
A estratégia pode ser otimizada de várias maneiras: 1) em combinação com outros indicadores que filtram os sinais de entrada, como o RSI, etc.; 2) usando parâmetros de otimização dinâmica de métodos de aprendizagem de máquina; 3) configurando um mecanismo de saída automática de stop loss; 4) em combinação com outras estratégias não tendenciais para equilibrar o risco da estratégia.
Em resumo, a estratégia aproveita a forte capacidade de rastreamento de tendências do indicador ROC, em conjunto com as características de Heikin Ashi para o julgamento de tendências e rastreamento de tendências, e para a filtragem de perdas de alto e baixo com a formação de percentual de ROC, para que seja possível A estratégia pode ter um bom efeito de acompanhamento de tendências. Sua vantagem está em identificar as mudanças de tendências e acompanhar as grandes tendências em tempo hábil, enquanto oscilações são filtradas por trilhos ascendentes e descendentes.
/*backtest
start: 2023-09-22 00:00:00
end: 2023-10-22 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/
// © jensenvilhelm
//@version=5
strategy("Heikin Ashi ROC Percentile Strategy", shorttitle="ROC ON" , overlay=false)
// User Inputs
zerohLine = input(0, title="Midline") // Zero line, baseline for ROC (customer can modify this to adjust midline)
rocLength = input(100, title="roc Length") // Lookback period for SMA and ROC (customer can modify this to adjust lookback period)
stopLossLevel = input(2, title="Stop Loss (%)") // Level at which the strategy stops the loss (customer can modify this to adjust stop loss level)
startDate = timestamp("2015 03 03") // Start date for the strategy (customer can modify this to adjust start date)
// Heikin Ashi values
var float haClose = na // Define Heikin Ashi close price
var float haOpen = na // Define Heikin Ashi open price
haClose := ohlc4 // Calculate Heikin Ashi close price as average of OHLC4 (no customer modification needed here)
haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2 // Calculate Heikin Ashi open price (no customer modification needed here)
// ROC Calculation
roc = ta.roc(ta.sma(haClose, rocLength), rocLength) // Calculate Rate of Change (ROC) (customer can modify rocLength in the inputs)
rocHigh = ta.highest(roc, 50) // Get the highest ROC of the last 50 periods (customer can modify this to adjust lookback period)
rocLow = ta.lowest(roc, 50) // Get the lowest ROC of the last 50 periods (customer can modify this to adjust lookback period)
upperKillLine = ta.percentile_linear_interpolation(rocHigh, 10, 75) // Calculate upper kill line (customer can modify parameters to adjust this line)
lowerKillLine = ta.percentile_linear_interpolation(rocLow, 10, 25) // Calculate lower kill line (customer can modify parameters to adjust this line)
// Trade conditions
enterLong = ta.crossover(roc, lowerKillLine) // Define when to enter long positions (customer can modify conditions to adjust entry points)
exitLong = ta.crossunder(roc, upperKillLine) // Define when to exit long positions (customer can modify conditions to adjust exit points)
enterShort = ta.crossunder(roc, upperKillLine) // Define when to enter short positions (customer can modify conditions to adjust entry points)
exitShort = ta.crossover(roc, lowerKillLine ) // Define when to exit short positions (customer can modify conditions to adjust exit points)
// Strategy execution
if(time >= startDate) // Start strategy from specified start date
if (enterLong)
strategy.entry("Long", strategy.long) // Execute long trades
if (exitLong)
strategy.close("Long") // Close long trades
if (enterShort)
strategy.entry("Short", strategy.short) // Execute short trades
if (exitShort)
strategy.close("Short") // Close short trades
// Plotting
plot(zerohLine,title="Zeroline") // Plot zero line
plot(roc, "RSI", color=color.rgb(248, 248, 248)) // Plot ROC
plot(rocHigh, "Roc High", color = color.rgb(175, 78, 76)) // Plot highest ROC
plot(rocLow, "Roc Low", color = color.rgb(175, 78, 76)) // Plot lowest ROC
plot(upperKillLine, "Upper Kill Line", color = color.aqua) // Plot upper kill line
plot(lowerKillLine, "Lower Kill Line", color = color.aqua) // Plot lower kill line