Стратегия двойной скользящей средней 360°

Автор:Чао Чжан, Дата: 2024-02-02 14:29:59
Тэги:

img

Обзор

Стратегия двойных скользящих средних 360° - это количественная стратегия торговли, которая включает в себя двойные скользящие средние и определение силы тренда.

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

Основная логика стратегии двойной скользящей средней 360°:

  1. Вычислить скользящие средние за 1 минуту и фильтрованные Калманом;
  2. Вычислить угол касания на основе разницы цен между двумя скользящими средними;
  3. Аккумулировать угол касания для определения сигнала силы тренда;
  4. Выпускать торговые сигналы на основе того, превышают ли накопленные уголки касания заранее установленные пороги.

Конкретно, стратегия определяет сырую 1-минутную скользящую среднюю и фильтрованную Калманом скользящую среднюю. Фильтр Калмана устраняет некоторое количество шума из скользящей средней, чтобы сделать ее более гладкой. Угол касания между двумя скользящими средними отражает изменения тренда цены. Например, когда угол касания положительный, он указывает на тенденцию к росту; наоборот, отрицательный угол представляет тенденцию к снижению.

Стратегия выбирает 30 минут в качестве периода расчета для суммирования всех положительных и отрицательных точечных углов в течение этого периода.

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

Основными преимуществами стратегии двойной скользящей средней 360° являются:

  1. Движущиеся средние фильтруют краткосрочный рыночный шум для более надежных торговых решений;
  2. Тангентные углы количественно определяют силу тренда, избегая субъективности суждения только по движущимся средним моделям;
  3. Суммирование нескольких касательных углов имеет лучший эффект снижения шума, что приводит к более надежным торговым сигналам;
  4. По сравнению с едиными скользящими средними стратегиями, двойные скользящие средние в сочетании с определением силы тренда делают стратегию более всеобъемлющей и надежной.

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

Стратегия двойной скользящей средней 360° также несет в себе некоторые риски:

  1. Крутящиеся средние отстают от изменения цен и могут пропустить краткосрочные поворотные моменты тренда;
  2. Опираясь исключительно на накопленный сигнал о силе тренда, рынок может быть нарушен волатильностью;
  3. Неправильное настройка параметров (например, длина периода расчета) может привести к отсутствию сделок или генерированию неправильных сигналов.

Для смягчения вышеуказанных рисков могут быть приняты такие меры, как сокращение периода скользящей средней, оптимизация комбинаций параметров, добавление механизмов остановки потерь.

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

Стратегия двойной скользящей средней 360° может быть дополнительно оптимизирована путем:

  1. включение адаптивных скользящих средних, которые корректируют параметры на основе волатильности рынка;
  2. ссылка на несколько периодов скользящей средней для формирования оптимизированных комбинаций параметров;
  3. Добавление динамических модулей определения тренда на основе волатильности, объемов торгов и т.д.;
  4. Помощь в настройке параметров или торговых решениях с помощью моделей машинного обучения.

Резюме

Стратегия двойной скользящей средней 360° использует фильтрацию скользящей средней и количественные суждения о тренде касательного угла для достижения относительно надежной количественной стратегии торговли. По сравнению с едиными техническими индикаторами эта стратегия представляет собой более всеобъемлющее рассмотрение и имеет более сильную практичность.


/*backtest
start: 2024-01-25 00:00:00
end: 2024-01-30 08:00:00
period: 5m
basePeriod: 1m
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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角


Больше