Heikin Ashi ROC Estratégia de negociação percentil

Autora:ChaoZhang, Data: 2023-10-23 15:41:40
Tags:

img

Resumo

Esta estratégia é chamada de Heikin Ashi ROC Percentile Trading Strategy. Tem como objetivo fornecer uma estrutura de negociação fácil de usar baseada no Heikin Ashi ROC e seus percentiles.

Estratégia lógica

A estratégia calcula o ROC de fechamento de Heikin Ashi nos últimos períodos de rocLength. Em seguida, calcula os valores mais altos e mais baixos de rocLow do ROC nos últimos 50 períodos. O upper rail upperKillLine e o lower rail lowerKillLine são gerados com base em certos percentiles de rocHigh e rocLow. Quando o ROC cruza acima da lowerKillLine, uma posição longa é aberta. Quando o ROC cruza abaixo da upperKillLine, a posição longa é fechada. Por outro lado, quando o ROC cruza abaixo da upperKillLine, uma posição curta é aberta. Quando o ROC cruza abaixo da lowerKillLine, a posição curta é fechada.

Análise das vantagens

A maior vantagem desta estratégia é a utilização da forte capacidade de rastreamento de tendências do indicador ROC, combinada com a característica de suavização de informações de preços de Heikin Ashi. Isso permite que a estratégia identifique efetivamente as mudanças de tendência e entre em negociações em tempo hábil. Em comparação com as médias móveis simples, a ROC responde de forma mais sensível às mudanças de preços. Além disso, os trilhos superiores e inferiores gerados a partir de percentual podem efetivamente filtrar consolidações e evitar negociações desnecessárias de falhas.

Análise de riscos

O principal risco desta estratégia é que configurações de parâmetros inadequadas podem levar a excesso de negociação ou sensibilidade insuficiente. Os períodos de retrocesso do rocLength e percentil precisam ser definidos com prudência, caso contrário, os trilhos podem se tornar muito maçantes ou rígidos, causando negociações perdidas ou perdas desnecessárias. Além disso, as configurações de percentil precisam ser repetidamente testadas e ajustadas para diferentes mercados para encontrar combinações ideais. A estratégia também está sujeita a certas perdas quando as tendências se revertem, devido à sua dependência de indicadores de tendência. As posições devem ser fechadas em tempo útil ou parar as perdas definidas para controlar os riscos.

Orientações de otimização

A estratégia pode ser otimizada das seguintes maneiras: 1) Adicionar filtros com outros indicadores como o RSI; 2) Otimizar dinamicamente parâmetros com aprendizado de máquina; 3) Definir stop loss e take profit para gerenciamento automático de riscos; 4) Combinar com estratégias não-trend para equilibrar riscos.

Resumo

Em resumo, esta estratégia utiliza a poderosa capacidade de rastreamento de tendências do indicador ROC, combinada com Heikin Ashi para identificação e seguimento de tendências. Os trilhos superiores e inferiores gerados a partir dos percentiles ROC permitem uma filtragem de perda eficaz. Isso atinge um bom desempenho de rastreamento de tendências. As vantagens estão em sua identificação oportuna de mudanças de tendências e seguimento de tendências principais, enquanto filtra consolidações com os trilhos. No entanto, configurações de parâmetros inadequadas podem afetar o desempenho e os riscos de reversão de tendências permanecem.


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


Mais.