Estratégia de Crossover TSI

TSI EMA ATR TEMA
Data de criação: 2024-06-07 16:36:24 última modificação: 2024-06-07 16:36:24
cópia: 7 Cliques: 628
1
focar em
1617
Seguidores

Estratégia de Crossover TSI

Visão geral

A estratégia usa o indicador TSI como principal sinal de negociação. A estratégia gera um sinal de abertura de posição quando o indicador TSI se cruza com sua linha de sinal e o indicador TSI está abaixo do limite inferior ou acima do limite superior. A estratégia também usa indicadores como EMA e ATR para otimizar o desempenho da estratégia.

Princípio da estratégia

  1. Calcule o valor do indicador TSI e o valor da linha de sinal.
  2. Determine se o bar atual está dentro do intervalo de tempo permitido para a transação, e se o bar atual está separado pelo menos pelo número mínimo de bares especificado da transação anterior.
  3. Se o indicador TSI atravessa a linha de sinalização de baixo para cima, e a linha de sinalização está abaixo do limite inferior indicado, um sinal múltiplo é gerado.
  4. Se o indicador TSI atravessa a linha de sinal de cima para baixo e a linha de sinal está acima do limite superior indicado, um sinal de vazio é gerado.
  5. Se você estiver atualmente em uma posição de múltiplas cabeças, apague todas as posições de múltiplas cabeças assim que o indicador TSI atravessar a linha de sinal de cima para baixo.
  6. Se você estiver atualmente com uma posição em aberto, você deve liquidar todas as posições em aberto assim que o indicador TSI atravessar a linha de sinalização de baixo para cima.

Análise de vantagens

  1. A lógica da estratégia é clara, simples e fácil de entender, usando o cruzamento dos indicadores TSI como o único requisito para abrir posições abertas.
  2. O risco de transações excessivas é controlado de forma eficaz, limitando o tempo e a frequência das transações.
  3. O Stop Loss é uma forma de parar o risco de uma única transação, eliminando o risco de uma única transação.
  4. O uso de vários indicadores para auxiliar o julgamento, como EMA, ATR, etc., aumenta a solidez da estratégia.

Análise de Riscos

  1. A estratégia é sensível à escolha dos parâmetros do índice TSI, e os diferentes parâmetros podem trazer grandes diferenças de desempenho, o que requer uma escolha cuidadosa.
  2. As condições para abrir e negociar posições são relativamente simples, com falta de discernimento de tendências e restrições de volatilidade, podendo ocorrer perdas em situações de turbulência.
  3. A falta de gerenciamento de posições e de fundos, dificuldade em controlar as retrações, pode levar a grandes retrações em caso de perdas consecutivas.
  4. O blogueiro também escreveu sobre a tendência, dizendo que “a tendência é que as pessoas não se preocupem com o que está acontecendo no mercado, mas sim com o que está acontecendo no mercado”.

Direção de otimização

  1. Otimizar os parâmetros do índice TSI para encontrar combinações de parâmetros mais estáveis. Pode-se usar algoritmos genéticos e outros métodos para buscar otimização automaticamente.
  2. Adicionar indicadores de tendência, como MA ou MACD, para escolher a direção correta ao abrir uma posição, aumenta a taxa de sucesso.
  3. A adição de indicadores de volatilidade, como o ATR, reduz o número de transações em um ambiente de mercado de alta volatilidade.
  4. Introdução de um modelo de gerenciamento de posições, ajustando o tamanho das posições de cada transação de acordo com o desempenho recente do mercado e a dinâmica do patrimônio líquido da conta.
  5. Pode aumentar a lógica de rastreamento de tendências, manter posições em tendências e melhorar a capacidade da estratégia de capturar grandes tendências.

Resumir

A estratégia tem o indicador TSI como seu núcleo, gerando sinais de negociação através do cruzamento do TSI com a linha de sinal. Ao mesmo tempo, limita o tempo de negociação e a frequência de negociação para controlar o risco. A vantagem da estratégia é a lógica simples e clara e o stop loss oportuno.

Código-fonte da estratégia
/*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)