Стратегия торговли движущимися средними Gaussian

Автор:Чао Чжан, Дата: 2024-01-03 16:06:45
Тэги:

img

Обзор

Эта стратегия применяет идею распределения Гаусса и рассчитывает Z-оценку на основе 10-периодного экспоненциального скользящего среднего цены закрытия свечи Хайкина-Аши.

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

  1. Вычислите 10-периодную экспоненциальную скользящую среднюю цены закрытия свечей Хайкина-Аши.

  2. На основе данных перемещающейся средней вычислить Z-оценку за 25 периодов. Z-оценка отражает количество стандартных отклонений точки данных от среднего значения, которые могут судить о том, являются ли данные нормальными или ненормальными.

  3. Возьмем 20-периодную экспоненциальную скользящую среднюю на Z-оценке, чтобы получить кривую под названием emaScore. Эта кривая отражает долгосрочную тенденцию Z-оценки.

  4. Установка верхних и нижних порогов на основе распределения данных emaScore.

  5. Длинный, когда emaScore пересекает среднюю линию или нижний порог вверх. Короткий, когда emaScore пересекает верхний порог, нижний порог или 100-периодный максимум вниз.

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

  1. Применять идею распределения Гаусса через Z-оценку, чтобы судить о нормальности и фильтровать ложные прорывы.

  2. Двойная экспоненциальная скользящая средняя имеет фильтрующий эффект для определения долгосрочной тенденции.

  3. Разумное установление порога снижает вероятность неправильной торговли.

  4. Включение 100-периодных максимумов и минимумов помогает уловить возможности для реверсии.

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

  1. Комбинация Z-оценки и MAs чувствительна к настройке параметров.

  2. Правильные пороговые уровни напрямую связаны с эффективностью стратегии.

  3. 100-периодные максимумы и минимумы могут легко генерировать неправильные сигналы.

  4. Сам Хайкин-Аши немного отстает.

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

  1. Проверьте различные периоды скользящих средних, окна обратного отсчета Z-оценки.

  2. Используйте анализ ходьбы вперед для автоматической оптимизации параметров.

  3. Попробуйте различные методы установки порога, например, множители ЗППП.

  4. Улучшить логику наивысшей/низшей точки, чтобы предотвратить ошибочные сигналы.

  5. Испытайте другие виды свечей или типичные цены, чтобы заменить Хайкин-Аши.

Резюме

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


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
basePeriod: 1m
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

// Here is an attempt to create a robust strategy for BTCUSD on a 5 minute chart
// I can't seem to get this code to work the way i want.... if you want to give it a try, please let me know -
// how it goes in comment section. 

//@version=5
// Define the strategy settings
strategy("The Z-score", shorttitle="TZS", overlay=true)

// User can set the start date for the strategy
startDate = timestamp("2023 06 01")

// Heikin-Ashi Open, Close, High and Low calculation
haClose = ohlc4
var float haOpen = na
haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2
haHigh = math.max(nz(haOpen, high), nz(haClose, high), high)
haLow = math.min(nz(haOpen, low), nz(haClose, low), low)

// Function to calculate the Z-Score
z_score(_series, _length) =>
    _mean = ta.sma(_series, _length)
    _stddev = ta.stdev(_series, _length)
    (_series - _mean) / _stddev

// Compute the score and its EMA
score = z_score(ta.ema(haClose, 10), 25)
emaScore = ta.ema(score, 20)

// Calculate lower and upper thresholds using percentiles of EMA
lowerBlue = ta.percentile_linear_interpolation(emaScore, 50, 10)
upperBlue = ta.percentile_linear_interpolation(emaScore, 50, 90)

// Calculate the middle line as 50th percentile
middleLine = ta.percentile_linear_interpolation(emaScore, 50, 50) 

// Plot the EMA of the score and the thresholds
plot(emaScore,"The White Line", color=color.white, linewidth=2)
plot(lowerBlue,"Lower Blue Line", linewidth=2)
plot(upperBlue, "Upper Blue Line", linewidth=2)
plot(middleLine, "Middle Yellow Line", linewidth=2, color=color.yellow)
plot(score,"The Z-Score Mixed With EMA 10", color=color.green)

// Calculate highest and lowest EMA score over 100 bars period
highest = ta.highest(emaScore, 100)
lowest = ta.lowest(emaScore, 100)

// Plot highest and lowest EMA score lines 
plot(highest, "Highest of emaScore", color=color.red, linewidth=2)
plot(lowest, "Lowest of emaScore", color=color.red, linewidth=2)

// Define entry and exit conditions for long and short positions
longCon = ta.crossover(score, lowerBlue) or ta.crossover(emaScore, middleLine)
addOn = ta.crossover(score, highest)
shortCon = ta.crossunder(emaScore, upperBlue) or ta.crossunder(emaScore, lowerBlue) or ta.crossunder(emaScore, highest)

// Execute trading logic based on conditions and after the start date
if (time >= startDate)
    if longCon
        strategy.entry("Long", strategy.long)
        if shortCon
            strategy.close("Long")
    if addOn
        strategy.entry("LongNR2", strategy.long)
        if shortCon
            strategy.close("LongNR2")
    
    if shortCon
        strategy.entry("Short", strategy.short)
        if longCon
            strategy.close("Short")


Больше