
Эта стратегия основана на инвестировании с использованием первой, второй, третьей и четвертой фазы временных дериватив Hull Moving Average ((HMA)). Она вкладывает определенную сумму денег. Входные точки идентифицируются с помощью тенденций в первой, третьей и четвертой фазах дериватив, а выходные точки создаются в новой точке входа или отслеживают стоп-проценты.
Эта стратегия начинается с вычисления HMA. Hull Moving Average - это взвешенная скользящая средняя, которая рассчитывается по формуле:
hullma = wma(2*wma(src,sm/2)-wma(src,sm),round(sqrt(sm)))
где src - цена, а sm - входный параметр, контролирующий длину средней.
Затем стратегия вычисляет скорость (дифференциальная первая степень), ускорение (дифференциальная вторая степень), колебание (дифференциальная третья степень) и колебание (дифференциальная четвёртая степень). Это вычисляется путем вычисления разницы между HMA и его задержкой, а затем деления на длину len. Например, формула для вычисления скорости:
speed = (hullma-hullma[len])/len
Остальные переменные рассчитываются аналогично.
Стратегия определяет вход и выход, рассматривая положительные и отрицательные стороны ускорения, колебаний и колебаний. Если все три показателя положительны, она открывает открытый билет. Если все три показателя отрицательны, она открывает открытый билет.
Кроме того, эта стратегия также использует trailing stop loss для блокировки прибыли. Многоочередные позиции устанавливаются на основе регулируемого входного процента, равно как и пустые позиции.
Одним из основных преимуществ этой стратегии является то, что она использует несколько коэффициентов в качестве входных и выходных сигналов, что позволяет отфильтровать некоторые ложные сигналы. Обычно слишком уязвима для принятия решений о входе, основываясь только на скорости (коэффициент 1), но в сочетании с коэффициентами 2, 3 и 4 можно создать более сильную систему.
Еще одним преимуществом является то, что стратегия очень гибкая. Она имеет несколько регулируемых параметров, включая длину HMA, длину различных дериватив, стоп-процент и т. д., которые можно оптимизировать для разных рынков.
Использование регулируемого отслеживания стоп-лосса также является преимуществом. Это может помочь стратегии получить больше прибыли в трендовых ситуациях, а во время шокирующих ситуаций вовремя выйти, ограничивая максимальное отступление.
Основным риском этой стратегии является снижение частоты попаданий, вызванных внезапными событиями. Если не будет соответствующих правил фильтрации, после крупных новостных событий могут одновременно появляться ошибочные сигналы нескольких проводников, что приводит к большим убыткам. Можно установить некоторые новостные фильтры или приостановить стратегию после внезапных событий на некоторое время, чтобы снизить этот риск.
Другой риск заключается в том, что параметры легко перестают соответствовать. Такие параметры, как длина HMA, длина каждой деривативы, могут повлиять на результат. Это требует использования строгих методов обратной связи для оценки устойчивости этих параметров на разных рынках.
Эта стратегия может быть оптимизирована в следующих аспектах:
Добавление фильтрации на основе внезапных событий, приостановка торговли на некоторое время после крупных новостных событий, чтобы избежать чрезмерных убытков из-за пропущенных точек входа
Проведение многорыночного отсчета параметров для обеспечения их устойчивости. Можно отсчитать данные разных сортов, разных периодов времени, оценить устойчивость параметровых настроек
Попытка изменить логику входа в поле. Можно внедрить алгоритмы машинного обучения для автоматического распознавания тенденций, а не для простого положительного или отрицательного суждения
Улучшение методов остановки. Можно использовать остановку волатильности или остановку машинного обучения вместо простого процента отслеживания остановки
Увеличение стоп-экзита. Существующая логика основывается на стоп-лоске, может быть дополнительно добавлена вверх, чтобы отследить стоп-стоп или целевой вывод прибыли.
Эта стратегия является многовременной стратегией отслеживания тенденций. Она использует множество переменных в Hull Moving Average в качестве сигналов для создания позиции и позиции, используя слежение за остановкой для блокирования прибыли. Основные преимущества заключаются в использовании множества переменных для фильтрации ложных сигналов, гибкости параметров стратегии и т. Д. Риски, к которым следует обратить внимание, включают влияние внезапных событий и легкость перенастройки параметров.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="Derivative Based Strategy", shorttitle="DER", currency="USD", calc_on_order_fills=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=1000)
len = input(1, minval=1, title="Derivatives Length")
sm = input(4, minval=1, title="HMA Length")
longTrailPerc=input(title="Trail Long Loss %", type=float,minval=0.0,step=0.1,defval=25)*0.01
shortTrailPerc=input(title="Trail Short Loss %",type=float,minval=0.0,step=0.1,defval=25)*0.01
longStopPrice=0.0
shortStopPrice=0.0
src = input(ohlc4, title="Source")
hullma = wma(2*wma(src,sm/2)-wma(src,sm),round(sqrt(sm)))
speed = (hullma-hullma[len])/len
accel = (speed-speed[len])/len
jerk = (accel-accel[len])/len
jounce = (jerk-jerk[len])/len
plot(speed, color=green)
plot(accel, color=purple)
plot(jerk, color=red)
plot(jounce, color=blue)
// hline(0, linestyle=solid, color=black)
if accel>0 and jerk>0 and jounce>0// and strategy.opentrades==0
strategy.entry("openlong", strategy.long)
if accel<0 and jerk<0 and jounce<0// and strategy.opentrades==0
strategy.entry("openshort",strategy.short)
speed_profit = (strategy.openprofit-strategy.openprofit[1])/len
accel_profit = (speed_profit-speed_profit[1])/len
jerk_profit = (accel_profit-accel_profit[1])/len
longStopPrice:=if(strategy.position_size>0)
stopValue=ohlc4*(1-longTrailPerc)
max(stopValue,longStopPrice[1])
else
0
shortStopPrice:=if(strategy.position_size<0)
stopValue=ohlc4*(1+shortTrailPerc)
min(stopValue,shortStopPrice[1])
else
999999
if(strategy.position_size>0)
strategy.exit(id="closelong",stop=longStopPrice)
if(strategy.position_size<0)
strategy.exit(id="closeshort",stop=shortStopPrice)