Estrategia de cruce de TSI

TSI EMA ATR TEMA
Fecha de creación: 2024-06-07 16:36:24 Última modificación: 2024-06-07 16:36:24
Copiar: 7 Número de Visitas: 628
1
Seguir
1617
Seguidores

Estrategia de cruce de TSI

Descripción general

La estrategia utiliza el indicador TSI como su principal señal de negociación. La estrategia genera una señal de apertura de posición cuando el indicador TSI se cruza con su línea de señal y el indicador TSI está por debajo del límite inferior o por encima del límite superior. La estrategia también utiliza indicadores como EMA y ATR para optimizar el rendimiento de la estrategia.

Principio de estrategia

  1. Calcula el valor del indicador TSI y el valor de la línea de señal.
  2. Determine si la barra actual está dentro del rango de tiempo permitido para la transacción y si la barra actual está separada al menos por el número mínimo de bares especificado desde la última transacción.
  3. Si el indicador TSI atraviesa la línea de señal de abajo hacia arriba, y la línea de señal está por debajo del límite inferior indicado, se genera una señal múltiple.
  4. Si el indicador TSI atraviesa la línea de señal de arriba hacia abajo y la línea de señal está por encima del límite superior indicado, se produce una señal de vacío.
  5. Si actualmente tiene una posición de más de un jefe, una vez que el indicador TSI cruza la línea de señal de arriba a abajo, aplanar todas las posiciones de más de un jefe.
  6. Si actualmente tiene posiciones en blanco, se aplanarán todas las posiciones en blanco una vez que el indicador TSI cruce la línea de señal de abajo hacia arriba.

Análisis de las ventajas

  1. La lógica de la estrategia es clara, simple y fácil de entender, y utiliza el cruce de los indicadores TSI como único requisito para abrir posiciones abiertas.
  2. El riesgo de exceso de transacciones se controla eficazmente al limitar el tiempo y la frecuencia de las transacciones.
  3. El stop loss se detiene a tiempo y se corta la posición en caso de señales contrarias, controlando la brecha de riesgo de una sola operación.
  4. El uso de varios indicadores como EMA, ATR, etc. para auxiliar en el juicio, aumenta la solidez de la estrategia.

Análisis de riesgos

  1. Las estrategias son sensibles a la elección de los parámetros del índice TSI, y los diferentes parámetros pueden generar grandes diferencias de rendimiento, por lo que se debe elegir con cuidado.
  2. Las condiciones para abrir y mantener posiciones son sencillas, con una ausencia de juicio de tendencias y restricciones de volatilidad, lo que puede generar pérdidas en situaciones de crisis.
  3. La falta de administración de posiciones y de fondos hace que sea difícil controlar las retiradas, lo que puede dar lugar a una retirada masiva en caso de pérdidas continuas.
  4. Si no sigues la tendencia, perderás muchas oportunidades de conocer la tendencia.

Dirección de optimización

  1. Optimización de los parámetros del índice TSI para encontrar combinaciones de parámetros más robustas. Se puede buscar automáticamente la optimización mediante métodos como el uso de algoritmos genéticos.
  2. La inclusión de indicadores de tendencia, como MA o MACD, para elegir la dirección de la tendencia al abrir una posición, mejora la tasa de éxito.
  3. La adición de indicadores de volatilidad, como el ATR, reduce el número de operaciones en un entorno de mercado de alta volatilidad.
  4. Introducción de un modelo de gestión de posiciones que ajuste el tamaño de las posiciones de cada transacción en función de la dinámica del rendimiento reciente del mercado y el valor neto de la cuenta.
  5. Puede aumentar la lógica de seguimiento de tendencias, mantener posiciones en las tendencias y mejorar la capacidad de la estrategia para capturar las grandes tendencias.

Resumir

La estrategia tiene como núcleo el indicador TSI, que genera señales de negociación a través de la intersección del TSI con la línea de señal. Al mismo tiempo, limita el tiempo de negociación y la frecuencia de negociación para controlar el riesgo. La estrategia tiene la ventaja de que la lógica es simple y clara, y el stop loss se detiene a tiempo.

Código Fuente de la Estrategia
/*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)