В процессе загрузки ресурсов... загрузка...

Стратегия перекрестного использования ТСОС

Автор:Чао Чжан, Дата: 2024-06-07 16:36:24
Тэги:ТСОСЕМАATRТЕМА

img

Обзор

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

Принцип стратегии

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

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

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

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

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

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

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

Резюме

Эта стратегия основана на индикаторе TSI и генерирует торговые сигналы через перекресток 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)


Связанные

Больше