Heikin Ashi ROC Перцентильная стратегия торговли

Автор:Чао Чжан, Дата: 2023-10-23 15:41:40
Тэги:

img

Обзор

Эта стратегия называется Heikin Ashi ROC Percentile Trading Strategy. Ее целью является обеспечение простой в использовании торговой структуры, основанной на Heikin Ashi ROC и его процентилах.

Логика стратегии

Стратегия рассчитывает ROC закрытия Heikin Ashi за последние rocLength периоды. Затем рассчитывает самые высокие rocHigh и самые низкие rocLow значения ROC за последние 50 периодов. Верхняя рельсовая upperKillLine и нижняя рельсовая lowerKillLine генерируются на основе определенных процентилов rocHigh и rocLow. Когда ROC пересекает нижнюю KillLine, открывается длинная позиция. Когда ROC пересекает нижнюю KillLine, длинная позиция закрывается. Наоборот, когда ROC пересекает верхнюю KillLine, открывается короткая позиция. Когда ROC пересекает нижнюю KillLine, короткая позиция закрывается.

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

Наибольшее преимущество этой стратегии заключается в использовании мощной способности индикатора ROC отслеживать тренд в сочетании с функцией Хайкина Аши, позволяющей сглаживать информацию о ценах. Это позволяет стратегии эффективно идентифицировать изменения тренда и своевременно вводить сделки. По сравнению с простыми скользящими средними, ROC более чувствительно реагирует на изменения цен. Кроме того, верхние и нижние рельсы, генерируемые из процентилов, могут эффективно отфильтровать консолидации и избегать ненужных сделок от фальшивых прорывов. В целом эта стратегия сочетает в себе как слежение за трендом, так и фильтрацию колебаний для достижения хорошего соотношения риск-вознаграждение в основных тенденциях.

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

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

Руководство по оптимизации

Стратегия может быть оптимизирована следующими способами: 1) Добавить фильтры с другими индикаторами, такими как RSI; 2) Динамически оптимизировать параметры с помощью машинного обучения; 3) Назначить стоп-лосс и взять прибыль для автоматического управления рисками; 4) Объединить с не-тенденционными стратегиями для сбалансирования рисков.

Резюме

В целом, эта стратегия использует мощные возможности отслеживания тренда индикатора ROC в сочетании с Хайкином Аши для идентификации и следования тренду. Верхние и нижние рельсы, генерируемые из процентилов ROC, позволяют эффективно фильтровать потери. Это обеспечивает хорошую производительность отслеживания тренда. Преимущества заключаются в своевременной идентификации изменений тренда и следовании основным тенденциям, фильтруя консолидации с рельсами.


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


Больше