TSI Crossover-Strategie

TSI EMA ATR TEMA
Erstellungsdatum: 2024-06-07 16:36:24 zuletzt geändert: 2024-06-07 16:36:24
Kopie: 7 Klicks: 628
1
konzentrieren Sie sich auf
1617
Anhänger

TSI Crossover-Strategie

Überblick

Die Strategie nutzt die TSI als primäres Handelssignal. Die Strategie erzeugt ein Positionseröffnungssignal, wenn die TSI mit ihrer Signallinie kreuzt und die TSI unterhalb oder über der Obergrenze liegt. Die Strategie nutzt auch Indikatoren wie EMA und ATR, um die Strategie zu optimieren. Die Strategie läuft nur innerhalb bestimmter Handelszeiten und setzt eine minimale Handelsfrequenz ein, um übermäßige Geschäfte zu kontrollieren.

Strategieprinzip

  1. Berechnen Sie die TSI-Werte und die Signallinienwerte.
  2. Beurteilen Sie, ob der aktuelle Bar innerhalb der zulässigen Zeitspanne für den Handel ist und ob der aktuelle Bar mindestens die angegebene Mindestbarzahl von dem letzten Handel entfernt ist.
  3. Wenn der TSI-Indikator von unten nach oben durch die Signalleitung fährt und die Signalleitung zu diesem Zeitpunkt unter der angegebenen Untergrenze liegt, wird ein Mehrfachsignal erzeugt.
  4. Wenn der TSI-Indikator von oben nach unten durch die Signalleitung fährt und die Signalleitung über der angegebenen Obergrenze liegt, wird ein Fehlsignal erzeugt.
  5. Wenn Sie gegenwärtig mehrere Positionen halten, werden alle mehreren Positionen ausgeglichen, sobald der TSI-Indikator von oben nach unten durch die Signallinie fährt.
  6. Wenn Sie gegenwärtig eine leere Position halten, werden alle leeren Positionen ausgeglichen, sobald der TSI-Indikator die Signallinie von unten nach oben durchquert.

Analyse der Stärken

  1. Die Strategie ist klar, einfach und verständlich und verwendet die Kreuzung der TSI-Indikatoren als einzige Voraussetzung für die Eröffnung einer CLEAN-Position.
  2. Das Risiko von Übertriebenen wird durch die Begrenzung der Zeiten und der Häufigkeit der Transaktionen wirksam kontrolliert.
  3. Der Stop-Loss-Stopp, der bei einem gegenteiligen Signal erfolgte Ausgleich der Position, kontrolliert die Risikothek für den einzelnen Handel.
  4. Die Verwendung mehrerer Indikatoren zur Unterstützung der Beurteilung, wie EMA, ATR usw., erhöht die Stabilität der Strategie.

Risikoanalyse

  1. Die Strategie ist sehr sensibel für die Auswahl der Parameter des TSI-Indikators. Die unterschiedlichen Parameter können zu großen Leistungsunterschieden führen und müssen sorgfältig ausgewählt werden.
  2. Die Bedingungen für Positionen sind relativ einfach, es fehlt an Trendbeurteilung und Schwankungsratebeschränkungen, und es kann zu Verlusten in einem wackligen Umfeld kommen.
  3. Das Fehlen von Positionsmanagement und Kapitalmanagement, die Schwierigkeit, Rücknahmen zu kontrollieren, führt zu massiven Rücknahmen, sobald die Verluste aufrechterhalten werden.
  4. Wenn man sich nur umdreht und nicht den Trend verfolgt, verpasst man viele Gelegenheiten, sich mit dem Trend zu beschäftigen.

Optimierungsrichtung

  1. Optimierung der Parameter des TSI-Indikators, um eine stabilere Kombination von Parametern zu finden. Automatische Optimierung kann mit Methoden wie genetischen Algorithmen durchgeführt werden.
  2. Trendschutzindikatoren wie MA oder MACD können bei der Eröffnung einer Position die Richtung der Trendrichtung auswählen und die Erfolgsrate erhöhen.
  3. Die Hinzufügung von Volatilitätsindikatoren wie ATR reduziert die Anzahl der Transaktionen in einem hohen Volatilitätsumfeld.
  4. Einführung eines Positionsmanagementmodells, das die Positionsgröße für jeden Handel dynamisch an die jüngste Marktentwicklung und den Kontowert anpasst.
  5. Die Logik der Trendverfolgung kann erweitert werden, um die Position in einer Trendbewegung zu halten und die Fähigkeit der Strategie zu verbessern, große Trends zu erfassen.

Zusammenfassen

Die Strategie basiert auf den TSI-Indikatoren und erzeugt Handelssignale durch die Kreuzung von TSI und Signallinien. Die Strategie hat den Vorteil, dass die Logik einfach und klar ist und die Stop-Loss-Punkte rechtzeitig eingestellt werden. Der Nachteil ist jedoch, dass die Strategie keine Trendbeurteilung und Positionsverwaltung hat.

Strategiequellcode
/*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)