Стратегия кроссовера TSI

TSI EMA ATR TEMA
Дата создания: 2024-06-07 16:36:24 Последнее изменение: 2024-06-07 16:36:24
Копировать: 7 Количество просмотров: 628
1
Подписаться
1617
Подписчики

Стратегия кроссовера TSI

Обзор

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

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

  1. Вычислить показатель ТСИ и значение линии сигнала.
  2. Оценить, находится ли текущий бар в пределах допустимого промежутка времени для сделки, и находится ли текущий бар на расстоянии, по крайней мере, от указанного минимального числа бар от последней сделки.
  3. Если индикатор TSI проходит через сигналную линию снизу вверх, и в это время сигналная линия ниже указанного нижнего предела, то создается полисигнал.
  4. Если индикатор ТСИ проходит через сигналную линию сверху вниз, и в это время сигналная линия выше указанного верхнего предела, то создается сигнал заикания.
  5. Если в настоящее время у вас есть многоголовые позиции, выровняйте все многоголовые позиции, как только индикатор TSI пересечет сигнальную линию сверху вниз.
  6. Если в настоящее время у вас есть пустые позиции, выровняйте все пустые позиции, как только индикатор TSI пересечет сигнальную линию снизу вверх.

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

  1. Логика стратегии ясна, с использованием перекрестных показателей ТСИ в качестве единственного условия для открытия позиции, проста и понятна.
  2. Ограничения на время и частоту торгов позволяют эффективно контролировать риск чрезмерной торговли.
  3. Временное остановка стоп-лосса и ликвидация позиции при появлении противоположного сигнала, что позволяет контролировать рискованность одной сделки.
  4. Использование нескольких показателей, таких как EMA, ATR и т.д., для поддержки суждения, повышает устойчивость стратегии.

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

  1. Стратегия чувствительна к выбору параметров показателя ТСИ. Различные параметры могут привести к значительным различиям в производительности, поэтому необходимо тщательно выбирать.
  2. Условия для открытия позиций и позиций являются простыми, отсутствуют тенденции и волатильность, что может привести к потере при шокирующей ситуации.
  3. Отсутствие управления позициями и управлением капиталом, затруднение в контроле вывода, что приводит к значительному выводу в случае последовательных потерь.
  4. Если мы не будем следить за тенденциями, мы упустим много возможностей для их развития.

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

  1. Оптимизация параметров показателя ТСИ, чтобы найти более устойчивое сочетание параметров. Можно использовать такие методы, как генетические алгоритмы для автоматического поиска оптимальных параметров.
  2. Присоединение к трендовым показателям, таким как MA или MACD, при открытии позиции позволяет выбрать направление движения, что повышает вероятность успеха.
  3. Добавление волатильных показателей, таких как ATR, уменьшает количество сделок в условиях высокой волатильности рынка.
  4. Внедрение модели управления позициями, изменение размеров позиций для каждой сделки в зависимости от динамики, такой как недавние рыночные показатели и чистая стоимость счетов.
  5. Можно увеличить логику отслеживания трендов, сохранить позиции в трендовых ситуациях, повысить способность стратегии улавливать большие тенденции.

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

Эта стратегия основана на показателях TSI, чтобы генерировать торговый сигнал через пересечение TSI и сигнальной линии. При этом ограничено время торговли и частота торговли для контроля риска. Преимущества стратегии заключаются в простоте логики и своевременной остановке убытков.

Исходный код стратегии
/*backtest
start: 2024-05-30 00:00:00
end: 2024-06-06 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © nikgavalas

//@version=5
strategy("TSI Entries", overlay=true, margin_long=100, margin_short=100)

//
// INPUTS
//

// Define the start and end hours for trading
string sessionInput = input("1000-1530", "Session")

// Day of the week.
string daysInput = input.string("23456", tooltip = "1 = Sunday, 7 = Saturday")

// Minimum number of bar's between entries
requiredBarsBetweenEntries = input.int(12, "Required Bars Between Entries")

// Show debug labels
bool showDebugLabels = input.bool(false, "Show Debug Labels")

//
// FUNCTIONS
//

//@function Define the triple exponential moving average function
tema(src, len) => tema = 3 * ta.ema(src, len) - 3 * ta.ema(ta.ema(src, len), len) + ta.ema(ta.ema(ta.ema(src, len), len), len)

//@function Atr with EMA
atr_ema(length) =>
    trueRange = na(high[1])? high-low : math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1]))
    //true range can be also calculated with ta.tr(true)
    ta.ema(trueRange, length)

//@function Check if time is in range
timeinrange() => 
    sessionString = sessionInput + ":" + daysInput
    inSession = not na(time(timeframe.period, sessionString, "America/New_York"))

//@function Displays text passed to `txt` when called.
debugLabel(txt, color, y, style) =>
    if (showDebugLabels) 
        label.new(bar_index, y, text = txt, color = color, style = style, textcolor = color.black, size = size.small)


//
// INDICATOR CODE
//

long = input(title="TSI Long Length", defval=8)
short = input(title="TSI Short Length", defval=8)
signal = input(title="TSI Signal Length", defval=3)
lowerLine = input(title="TSI Lower Line", defval=-50)
upperLine = input(title="TSI Upper Line", defval=50)

price = close
double_smooth(src, long, short) =>
	fist_smooth = ta.ema(src, long)
	ta.ema(fist_smooth, short)

pc = ta.change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(math.abs(pc), long, short)
tsiValue = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
signalValue = ta.ema(tsiValue, signal)

//
// COMMON VARIABLES
//

var color trendColor = na
var int lastEntryBar = na

bool tradeAllowed = timeinrange() == true and (na(lastEntryBar) or bar_index - lastEntryBar > requiredBarsBetweenEntries)

// 
// CROSSOVER
//

bool crossOver = ta.crossover(tsiValue, signalValue)
bool crossUnder = ta.crossunder(tsiValue,signalValue)

if (tradeAllowed) 
	if (signalValue < lowerLine and crossOver == true)
		strategy.entry("Up", strategy.long)
		lastEntryBar := bar_index

	else if (signalValue > upperLine and crossUnder == true)

		strategy.entry("Down", strategy.short)
		lastEntryBar := bar_index

// 
// EXITS
// 

if (strategy.position_size > 0 and crossUnder == true)
	strategy.close("Up", qty_percent = 100)

else if (strategy.position_size < 0 and crossOver == true)
	strategy.close("Down", qty_percent = 100)