
Эта стратегия использует более быстрые вычисления индексных линейных взвешенных средних (EHMA) и адаптивных каналов для построения стратегий трендового типа. Поскольку скорость вычисления EHMA более быстрая, можно эффективно идентифицировать тенденции изменения цены и избежать создания нежелательных торговых сигналов с помощью ложных прорывов. При этом адаптивные каналы могут отфильтровывать некоторые ценовые колебания и посылать торговые сигналы только тогда, когда цена прорывает канал, снижая вероятность неэффективных сделок и повышая вероятность получения прибыли.
Индексный линейно-весовой средний EHMA, рассчитанный на основе параметра Period. Вычисление EHMA быстро и эффективно отслеживает тенденции изменения цен.
Согласно параметру RangeWidth, в верхней и нижней части EHMA расширяется адаптивный канал. Только тогда, когда цена выше линии верхнего канала или ниже линии нижнего канала, считается, что тенденция изменилась, и подается торговый сигнал.
Оценить отношение цены к каналу. Цены выше, когда они находятся в канальной линии, и ниже, когда они находятся в канальной линии.
По сравнению с обычной стратегией скользящих средних, эта стратегия имеет следующие преимущества:
Среднее значение, рассчитанное с помощью алгоритма EHMA. Реакция EHMA на изменение ценовых тенденций более чувствительна, эффективно идентифицируя изменения в тренде и избегая ложных прорывов, которые приводят к ненужной торговле.
Приспосабливающийся канал может эффективно отфильтровывать колебания цен. Торговые сигналы создаются только тогда, когда цены определяют изменение тренда.
Ширина канала может быть гибко адаптирована к различным рыночным условиям. Широкий канал может отфильтровывать больше колебаний, снижая частоту торгов; узкий канал может быстрее идентифицировать изменения тенденций, увеличивая частоту торгов.
Также существуют следующие риски:
По-прежнему невозможно полностью избежать ложных прорывов. Цены могут расколоться, непосредственно вверх или вниз по канальной полосе. Необходимо соответствующее регулирование параметров, чтобы контролировать риск.
Некоторые возможности для торговли могут быть упущены, если канал слишком широк.
Если канал слишком узкий, это увеличивает количество недействительных сделок. Ширина канала может быть расширена для повышения стабильности.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимальный параметр Period. Адаптировать средний цикл для различных сортов и характеристик циклической диаграммы.
Оптимальный параметр RangeWidth. Корректировка диапазона каналов в зависимости от степени рыночной волатильности и личных предпочтений риска.
Увеличение стратегии стоп-лосса. В процессе хранения позиции, установление разумных стоп-лосса, эффективное управление максимальными потерями в одной сделке.
В сочетании с другими показателями фильтрация Entries. Например, увеличение количества сделок, снижение эффективности Entries.
Применение многовидовой и оптимизация параметров. Проведение испытаний на большем количестве сортов и циклов, оптимизация общих параметров.
Эта стратегия объединяет показатели EHMA и показатели адаптивного канала, чтобы сформировать стратегию следования за тенденцией. Она позволяет эффективно идентифицировать рыночные тенденции, одновременно фильтруя ценовые колебания и избегая ненужных сделок. После оптимизации ряда параметров и контроля риска она позволяет стабильно получать прибыль во многих разновидностях и циклах.
/*backtest
start: 2023-02-25 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",1]]
*/
// Credit is due where credit is due:
// Hull Moving Average: developed by Alan Hull
// EHMA: coded by Twitter @borserman
// I've built on their work in an attempt to create a strategy more robust to fake moves
// @0xLetoII
//@version=4
strategy(
title="EHMA Range Strategy",
process_orders_on_close=true,
explicit_plot_zorder=true,
overlay=true,
initial_capital=1500,
default_qty_type=strategy.percent_of_equity,
commission_type=strategy.commission.percent,
commission_value=0.085,
default_qty_value=100
)
// Position Type
pos_type = input(defval = "Long", title="Position Type", options=["Both", "Long", "Short"])
// Inputs
Period = input(defval=180, title="Length")
RangeWidth = input(defval=0.02, step=0.01, title="Range Width")
sqrtPeriod = sqrt(Period)
// Function for the Borserman EMA
borserman_ema(x, y) =>
alpha = 2 / (y + 1)
sum = 0.0
sum := alpha * x + (1 - alpha) * nz(sum[1])
// Calculate the Exponential Hull Moving Average
EHMA = borserman_ema(2 * borserman_ema(close, Period / 2) - borserman_ema(close, Period), sqrtPeriod)
// Create upper & lower bounds around the EHMA for broader entries & exits
upper = EHMA + (EHMA * RangeWidth)
lower = EHMA - (EHMA * RangeWidth)
// Plots
EHMAcolor = (close > EHMA ? color.green : color.red)
plot(EHMA, color=EHMAcolor, linewidth=2)
plot(lower, color=color.orange, linewidth=2)
plot(upper, color=color.blue, linewidth=2)
// Strategy
long = close > upper
exit_long = close < lower
short = close < lower
exit_short = close > upper
// Calculate start/end date and time condition
startDate = input(timestamp("2017-01-01T00:00:00"))
finishDate = input(timestamp("2029-01-01T00:00:00"))
time_cond = true
// Entries & Exits
if pos_type == "Both"
strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
if pos_type == "Long"
strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
if pos_type == "Short"
strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)