Эта стратегия применяет идею распределения Гаусса и рассчитывает Z-оценку на основе 10-периодного экспоненциального скользящего среднего цены закрытия свечи Хайкина-Аши.
Вычислите 10-периодную экспоненциальную скользящую среднюю цены закрытия свечей Хайкина-Аши.
На основе данных перемещающейся средней вычислить Z-оценку за 25 периодов. Z-оценка отражает количество стандартных отклонений точки данных от среднего значения, которые могут судить о том, являются ли данные нормальными или ненормальными.
Возьмем 20-периодную экспоненциальную скользящую среднюю на Z-оценке, чтобы получить кривую под названием emaScore. Эта кривая отражает долгосрочную тенденцию Z-оценки.
Установка верхних и нижних порогов на основе распределения данных emaScore.
Длинный, когда emaScore пересекает среднюю линию или нижний порог вверх. Короткий, когда emaScore пересекает верхний порог, нижний порог или 100-периодный максимум вниз.
Применять идею распределения Гаусса через Z-оценку, чтобы судить о нормальности и фильтровать ложные прорывы.
Двойная экспоненциальная скользящая средняя имеет фильтрующий эффект для определения долгосрочной тенденции.
Разумное установление порога снижает вероятность неправильной торговли.
Включение 100-периодных максимумов и минимумов помогает уловить возможности для реверсии.
Комбинация Z-оценки и MAs чувствительна к настройке параметров.
Правильные пороговые уровни напрямую связаны с эффективностью стратегии.
100-периодные максимумы и минимумы могут легко генерировать неправильные сигналы.
Сам Хайкин-Аши немного отстает.
Проверьте различные периоды скользящих средних, окна обратного отсчета Z-оценки.
Используйте анализ ходьбы вперед для автоматической оптимизации параметров.
Попробуйте различные методы установки порога, например, множители ЗППП.
Улучшить логику наивысшей/низшей точки, чтобы предотвратить ошибочные сигналы.
Испытайте другие виды свечей или типичные цены, чтобы заменить Хайкин-Аши.
Эта стратегия оценивает аномальность цен и генерирует торговые сигналы на основе идеи гауссианского распределения, двойных экспоненциальных скользящих средних и динамического установления порога. Основными преимуществами являются фильтрация ложных прорывов и обнаружение обратных сдвигов. Однако существует огромное влияние в отношении выбора и комбинации параметров. Необходимы дальнейшие испытания и оптимизация для поиска лучших параметров и комбинаций.
/*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")