Die Ressourcen sind geladen. Beförderung...

Strategie für die TSI Crossover

Schriftsteller:ChaoZhang, Datum: 2024-06-07 16:36:24
Tags:TSIEMAATRTEMA

img

Übersicht

Diese Strategie verwendet den TSI-Indikator als Haupthandelssignal. Wenn der TSI-Indikator seine Signallinie überschreitet und der TSI-Indikator unterhalb der unteren Grenze oder über der oberen Grenze liegt, erzeugt die Strategie ein offenes Positionssignal. Gleichzeitig verwendet die Strategie auch Indikatoren wie EMA und ATR, um die Strategieleistung zu optimieren. Die Strategie läuft nur innerhalb bestimmter Handelssitzungen und setzt eine Mindesthandelsfrequenz fest, um Überhandel zu kontrollieren.

Strategieprinzip

  1. Berechnen Sie den TSI-Indikatorwert und den Signalleitwert.
  2. Bestimmen Sie, ob sich die aktuelle Zeit innerhalb des zulässigen Handelsbereichs befindet und ob der aktuelle Bar mindestens die angegebene Mindestzahl von Bars vom letzten Handel entfernt ist.
  3. Wenn die TSI-Anzeige von unten über die Signallinie geht und die Signallinie unterhalb der angegebenen unteren Grenze liegt, wird ein langes Signal erzeugt.
  4. Wenn die TSI-Anzeige von oben unterhalb der Signallinie durchquert und die Signallinie über der angegebenen Obergrenze liegt, wird ein Kurzsignal erzeugt.
  5. Wenn derzeit eine Long-Position gehalten wird, werden alle Long-Positionen geschlossen, sobald die TSI-Anzeige unterhalb der Signallinie von oben überschreitet.
  6. Wenn derzeit eine Short-Position gehalten wird, werden alle Short-Positionen geschlossen, sobald der TSI-Anzeiger über die Signallinie von unten geht.

Analyse der Vorteile

  1. Die Strategielogik ist klar, wobei das Kreuz des TSI-Indikators als einzige Bedingung für die Eröffnung und Schließung von Positionen verwendet wird, was einfach und leicht verständlich ist.
  2. Durch die Begrenzung der Handelssitzung und der Handelshäufigkeit wird das Risiko eines Überhandels wirksam kontrolliert.
  3. Zeitgemäße Stop-Loss- und Stop-Profit-Aktionen, sobald ein gegenteiliges Signal erscheint, schließen die Position entschieden und kontrollieren so die Risikoposition einer einzelnen Transaktion.
  4. Für die Beurteilung werden mehrere Indikatoren verwendet, wie z. B. EMA, ATR usw., wodurch die Robustheit der Strategie erhöht wird.

Risikoanalyse

  1. Bei der Auswahl der TSI-Indikatorparameter ist die Strategie sehr sensibel, und unterschiedliche Parameter führen zu großen Leistungsunterschieden, die sorgfältig gewählt werden müssen.
  2. Die Eröffnungs- und Schlusskonditionen sind relativ einfach, fehlen Trendbeurteilung und Volatilitätsbeschränkungen und können in schwankenden Märkten zu Verlusten führen.
  3. Da es kein Positionsmanagement und kein Fondsmanagement gibt, ist es schwierig, die Auslastung zu kontrollieren, da ein anhaltender Verlust zu einer großen Auslastung führt.
  4. Nur eine lange-kurze Umkehrung, nicht eine Trendverfolgung, wird viele Trendchancen verpassen.

Optimierungsrichtung

  1. Optimierung der Parameter des TSI-Indikators, um eine robustere Parameterkombination zu finden.
  2. Hinzufügen von Trendbeurteilungsindikatoren wie MA oder MACD zur Auswahl der Trendrichtung bei der Eröffnung einer Position zur Verbesserung der Erfolgsquote.
  3. Hinzufügen von Volatilitätsindikatoren wie ATR, um die Anzahl der Geschäfte in Marktumgebungen mit hoher Volatilität zu reduzieren.
  4. Einführung eines Positionsmanagementmodells zur dynamischen Anpassung der Positionsgröße jedes Handels auf der Grundlage der jüngsten Marktentwicklung und des Nettokontos.
  5. Eine Trendverfolgungslogik kann hinzugefügt werden, um weiterhin Positionen im Trendmarkt zu halten, um die Fähigkeit der Strategie zu verbessern, große Trends zu erfassen.

Zusammenfassung

Diese Strategie basiert auf dem TSI-Indikator und erzeugt Handelssignale durch die Kreuzung von TSI und seiner Signallinie. Gleichzeitig begrenzt sie die Handelszeit und -Frequenz, um Risiken zu kontrollieren. Der Vorteil der Strategie besteht darin, dass die Logik einfach und klar ist und Verluste und Gewinne rechtzeitig stoppt. Der Nachteil ist jedoch das Fehlen von Trendbeurteilung und Positionsmanagement, die Empfindlichkeit gegenüber TSI-Parametern und kann nur Trendumkehrmarkt erfassen, während der Markt fehlt. In Zukunft kann die Strategie aus Aspekten wie Trend- und Volatilitätsbeurteilung, Positionsmanagement und Parameteroptimierung verbessert werden.


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


Verwandt

Mehr