
В основе этой стратегии лежит использование метода Калман-волновой технологии для сглаживания средней линии цены, которая производит торговый сигнал, когда она превышает определенный порог в течение заданного периода. Эта стратегия направлена на отслеживание средне-длиннолинейных тенденций и уменьшение влияния шума с помощью метода Калман-волновой технологии, что позволяет получить более четкий и надежный сигнал тренда.
Основная логика этой стратегии состоит из следующих шагов:
рассчитывает простую скользящую среднюю цены за 1 минуту (SMA) как первоначальную среднюю;
Кальман-фильтр для исходной равномерности, вывод гладкой равномерности;
вычислить угол сечения средней линии после сглаживания;
определение цикла параметров, сумма уголков сечения в статистическом цикле;
Сигнал покупать возникает, когда сумма угла сечения в цикле больше 360 градусов; сигнал продавать возникает, когда меньше 360 градусов.
С помощью такой конструкции, когда цены появляются в тренде вверх или вниз, угловой угол равной линии будет постепенно накапливаться, когда накапливается до определенного уровня, чтобы создать торговый сигнал, и таким образом эффективно отслеживать средне-длинную тенденцию.
В этой стратегии ключевым является фильтр Кармана. Фильтр Кармана - это рекурсивный алгоритм, который, прогнозируя текущее состояние, также прогнозирует значение процесса и измеряет значение шума, и использует эти значения шума для корректировки прогноза предыдущего состояния, чтобы получить более точную и надежную оценку состояния.
В этой стратегии SMA цены можно рассматривать как измерение состояния, подверженное влиянию рынка шума, Калман фильтр будет регрессивно оценивать реальную тенденцию цены, значительно уменьшая влияние шума, что делает последующие среднелинейные операции более надежными, что приводит к более стабильным и точным торговым сигналам.
Основным преимуществом этой стратегии по сравнению с другими индикаторными стратегиями, такими как простая движущаяся средняя, является то, что она использует фильтр Кальмана, чтобы уменьшить влияние шума и сделать торговые сигналы более четкими и надежными. Конкретные преимущества выражаются в следующих аспектах:
Уменьшение ложных сигналов. Карманский фильтр эффективно отфильтровывает большое количество ложных сигналов, вызванных случайными колебаниями, путем адаптивной оценки и устранения шума, что делает генерируемые торговые сигналы более надежными.
Улучшенный эффект отслеживания. После сглаживания равнолинейная форма более плавная, она лучше отражает средне-длинную тенденцию цены, что позволяет добиться лучшего эффекта отслеживания тенденции.
Гибкость в настройке параметров. Гибкость в настройке параметров включает в себя среднюю длину линии, параметры волны Кальмана и статистические периоды, которые могут быть адаптированы к различным рыночным условиям.
Контролируемый риск. Эта стратегия фокусируется на долгосрочных тенденциях, а не на краткосрочных колебаниях, что обеспечивает лучший баланс риска и прибыли.
Простая реализация, легко расширяемая. Основные алгоритмы этой стратегии являются простыми, легко реализуемыми и тестируемыми, а также предоставляют пространство для расширения, например, для внедрения параметров автоматической оптимизации алгоритмов машинного обучения.
Основные риски, связанные с этой стратегией:
Риск обратного тренда. Эта стратегия фокусируется на отслеживании тренда, в случае резкого обратного тренда возникают большие потери.
Риски оптимизации параметров. Неправильная настройка параметров может привести к частоте сделок или задержке сигнала, поэтому требуется полное тестирование оптимизации. Автоматическая оптимизация может включать алгоритмы машинного обучения.
Риск переоптимизации. Переоптимизация на исторических данных также может привести к недействительности параметров, которые требуют контроля над их эффективностью вне образца.
Риск увеличения сложности реализации. Введение алгоритмов ввода вводных и вырезающих углов увеличивает сложность кода, и необходимо убедиться, что они были реализованы правильно.
С учетом вышеперечисленных факторов риска в этой стратегии можно оптимизировать следующие направления:
Внедрение стоп-лосса и управления позициями. Надлежащее стоп-лосса позволяет эффективно контролировать риск потерь; динамическое управление позициями также позволяет корректировать риск покрытия позиций в зависимости от рыночных условий.
Автоматическая оптимизация параметров. С помощью алгоритмов оптимизации машинного обучения можно реализовать автоматическую оптимизацию параметров, избегая риска переоптимизации.
Интеграция других показателей. В стратегию можно интегрировать некоторые другие показатели, чтобы сформировать портфель показателей, чтобы повысить стабильность стратегии.
Повышение эффективности оценки. Введение большего количества показателей корректировки риска, оценка эффективности и стабильности стратегии, что приводит к более всеобъемлющим и точным выводам.
Расширение нескольких сортов. Если результат будет положительным, можно рассмотреть возможность расширения на большее количество сортов, чтобы накопить более богатые образцы в среднесрочной и долгосрочной перспективе, а также облегчить оптимизацию параметров среди сортов.
В целом, эта стратегия является более простой и практичной стратегией отслеживания тенденций. По сравнению с традиционной стратегией движущихся средних, введение алгоритма волн Кальмана является ее крупнейшим инновационным моментом, а также позволяет стратегии производить более четкие и надежные торговые сигналы.
/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//@library=math
strategy("策略360°(测试)", overlay=true)
// 定义1分钟均线
ma1 = request.security(syminfo.tickerid, "1", ta.sma(close, 1)) // 在这里使用了 math.sma() 函数
//plot(ma1, color=color.yellow, title="原始均线")
// 定义卡尔曼滤波函数,参考了[1](https://www.tradingview.com/pine-script-docs/en/v5/language/Methods.html)和[2](https://www.tradingview.com/pine-script-docs/en/v5/language/Operators.html)的代码
kalman(x, g) =>
kf = 0.0
dk = x - nz(kf[1], x) // 在这里使用了 nz() 函数
smooth = nz(kf[1], x) + dk * math.sqrt(g * 2) // 在这里使用了 math.sqrt() 函数
velo = 0.0
velo := nz(velo[1], 0) + g * dk // 在这里使用了 nz() 函数
kf := smooth + velo
kf
// 定义卡尔曼滤波后的均线
ma2 = kalman(ma1, 0.01)
plot(ma2, color=color.blue, title="卡尔曼滤波后的均线")
// 定义切线角
angle = math.todegrees(math.atan(ma2 - ma2[1])) // 在这里使用了 math.degrees() 和 math.atan() 函数
// 定义累加的切线角
cum_angle = 0.0
cum_angle := nz(cum_angle[1], 0) + angle // 在这里使用了 nz() 函数
// 定义30分钟周期
period = 30 // 您可以根据您的需要修改这个参数
// 定义周期内的切线角总和
sum_angle = 0.0
sum_angle := math.sum(angle, period) // 在这里使用了 math.sum() 函数,把周期内的切线角总和改成简单地把 5 个切线角相加
// 定义买入和卖出条件
buy = sum_angle > 360// 在这里使用了 math.radians() 函数
sell = sum_angle < -360
// 执行买入和卖出操作
strategy.entry("Long", strategy.long, when=buy)
strategy.close("Short", when=buy)
strategy.entry("Short", strategy.short, when=sell)
strategy.close("Long", when=sell)
// 绘制曲线图
plot(sum_angle, color=color.green, title="周期内的切线角总和")
plot(angle, color=color.red, title="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角