Стратегия следования за трендом, основанная на пересечении многовременных индикаторов TEMA


Дата создания: 2023-12-25 14:20:36 Последнее изменение: 2023-12-25 14:20:36
Копировать: 0 Количество просмотров: 671
1
Подписаться
1623
Подписчики

Стратегия следования за трендом, основанная на пересечении многовременных индикаторов TEMA

Обзор

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

Стратегический принцип

Стратегия использует два TEMA-индикатора, один основанный на быстрых и медленных линиях 5 и 15 циклов, другой основанный на пользовательских временных рамках высоких циклов, таких как дневная или круговая линия. Высокоциклический TEMA-индикатор определяет направление общей тенденции, проходя через медленную линию на быстрых линиях, чтобы пробиться вниз и вниз; низкоциклический TEMA-индикатор используется для поиска конкретных входных и выходных моментов.

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

Стратегические преимущества

  1. Пересечение на основе показателей TEMA, чтобы избежать ошибочного звука
  2. Установка многократных временных рамок, повышенная точность в сочетании с высоким и низким циклом оценки
  3. Односторонние и двусторонние сделки, гибкая конфигурация
  4. Правила ясные и понятные

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

  1. Индекс TEMA отстает и может пропустить первоначальный момент изменения цен
  2. При оценке высоких циклических тенденций краткосрочные корректировки могут привести к ненужной обратной операции
  3. Неправильно выбранная высокоцикличная настройка может не отражать реальные тенденции
  4. Неправильно выбранное низкоциклическое настроение может увеличить риск остановки

Решение риска:

  1. Правильная коррекция параметров TEMA для достижения баланса
  2. Надлежащее ослабление маржи убытков
  3. Оптимизация высоких и низких циклов Setting
  4. Тестирование жизнеспособности различных сортов

Направление оптимизации

  1. Динамическая коррекция параметров TEMA, оптимизация чувствительности показателя
  2. Увеличьте количество фильтров на динамике, чтобы избежать пропускания тенденций
  3. Повышение показателей волатильности, динамическая корректировка стоп-магнитности
  4. Параметры оптимизации методов машинного обучения

Подвести итог

Общая концепция стратегии понятна и понятна, она основана на многократных временных рамках по ТЕМА-индикатору для определения направления тенденции и в сочетании с низкими циклами для поиска входных моментов. Есть определенные преимущества, но также есть некоторые возможности для улучшения. В целом, стратегия предоставляет ценные ссылки для практики количественного трейдинга.

Исходный код стратегии
/*backtest
start: 2023-01-01 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © Seltzer_

//@version=4
strategy(title="TEMA Cross +HTF Backtest", shorttitle="TEMA_X_+HTF_BT", overlay=true)

orderType = input("Longs+Shorts",title="What type of Orders", options=["Longs+Shorts","LongsOnly","ShortsOnly"])
isLong   = (orderType != "ShortsOnly")
isShort  = (orderType != "LongsOnly")

// Backtest Section {

// Backtest inputs
FromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input(defval=2020, title="From Year", minval=2010)
ToMonth = input(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input(defval=9999, title="To Year", minval=2017)

// Define backtest timewindow
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() => true

// }

//TEMA Section {

//LTF Section
xLength = input(20, minval=1, title="Fast Length")
xPrice = close
xEMA1 = ema(xPrice, xLength)
xEMA2 = ema(xEMA1, xLength)
xEMA3 = ema(xEMA2, xLength)
xnRes = (3 * xEMA1) - (3 * xEMA2) + xEMA3
xnResP = plot(xnRes, color=color.green, linewidth=2, title="TEMA1")

yLength = input(60, minval=1, title="Slow Length")
yPrice = close
yEMA1 = ema(yPrice, yLength)
yEMA2 = ema(yEMA1, yLength)
yEMA3 = ema(yEMA2, yLength)
ynRes = (3 * yEMA1) - (3 * yEMA2) + yEMA3
ynResP = plot(ynRes, color=color.red, linewidth=2, title="TEMA2")

fill(xnResP, ynResP, color=xnRes > ynRes ? color.green : color.red, transp=65, editable=true)

//HTF Section
HTFres = input(defval="D", type=input.resolution, title="HTF Resolution")

HTFxLength = input(5, minval=1, title="HTF Fast Length")
HTFxPrice = close
HTFxEMA1 = security(syminfo.tickerid, HTFres, ema(HTFxPrice, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA2 = security(syminfo.tickerid, HTFres, ema(HTFxEMA1, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA3 = security(syminfo.tickerid, HTFres, ema(HTFxEMA2, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxnRes = (3 * HTFxEMA1) - (3 * HTFxEMA2) + HTFxEMA3
HTFxnResP = plot(HTFxnRes, color=color.yellow, linewidth=1,transp=30, title="TEMA1")

HTFyLength = input(15, minval=1, title="HTF Slow Length")
HTFyPrice = close
HTFyEMA1 = security(syminfo.tickerid, HTFres, ema(HTFyPrice, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA2 = security(syminfo.tickerid, HTFres, ema(HTFyEMA1, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA3 = security(syminfo.tickerid, HTFres, ema(HTFyEMA2, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFynRes = (3 * HTFyEMA1) - (3 * HTFyEMA2) + HTFyEMA3
HTFynResP = plot(HTFynRes, color=color.purple, linewidth=1, transp=30, title="TEMA2")

fill(HTFxnResP, HTFynResP, color=HTFxnRes > HTFynRes ? color.yellow : color.purple, transp=90, editable=true)
bgcolor(HTFxnRes > HTFynRes ? color.yellow : na, transp=90, editable=true)
bgcolor(HTFxnRes < HTFynRes ? color.purple : na, transp=90, editable=true)

// }

// Buy and Sell Triggers
LongEntryAlert = xnRes > ynRes and HTFxnRes > HTFynRes and window()
LongCloseAlert = xnRes < ynRes and window()
ShortEntryAlert = xnRes < ynRes and HTFxnRes < HTFynRes and window()
ShortCloseAlert = xnRes > ynRes

// Entry & Exit signals
if isLong
    strategy.entry("Long", strategy.long, when = LongEntryAlert)
    strategy.close("Long", when = LongCloseAlert)

if isShort
    strategy.entry("Short", strategy.short, when = ShortEntryAlert)
    strategy.close("Short", when = ShortCloseAlert)