Die Hauptidee der zeitlich festgelegten Auftragsstrategie besteht darin, Kauf- und Verkaufsaktionen zu benutzerdefinierten Zeitpunkten durchzuführen. Diese Strategie ermöglicht es den Benutzern, einen genauen Zeitpunkt festzulegen. Zu diesem Zeitpunkt verkauft sie zuerst die aktuelle Position und platziert dann einen Limit-Kauf Auftrag bei 1% unter dem aktuellen Preis. Dies ermöglicht das regelmäßige Re-Balancing zu einer bestimmten Zeit jeden Tag.
Die Strategie verwendet zunächst die Eingabefunktion, um die vom Benutzer definierte benutzerdefinierte Stunde und Minute zu erhalten, und generiert dann die Auftragsausführungszeit mit der Zeitstempelfunktion.
Insbesondere prüft die Strategie zuerst, ob die aktuelle Zeit innerhalb des vom Benutzer definierten Start- und Enddatumsbereichs liegt. Wenn ja, wird sie, wenn der angegebene Auftragsausführungszeitpunkt erreicht ist, zuerst die aktuelle Position zum Marktpreis verkaufen und dann einen Limit-Kauf Auftrag zu 99% des aktuellen Preises platzieren. Dies erreicht eine Neuausgewogenheit zu einem Preis, der 1% niedriger ist als der aktuelle Preis zum bestimmten Zeitpunkt.
Der größte Vorteil dieser Strategie besteht darin, dass sie ohne manuelle Intervention die Positionen in bestimmten Zeitpunkten regelmäßig wieder ausgleichen kann, wodurch die Arbeitskosten reduziert werden.
Zu den spezifischen Vorteilen gehören:
Voll automatisierter Betrieb, der die manuellen Kosten verringert.
Ermöglicht eine regelmäßige Neuausgleichung der Positionen zu bestimmten Zeitpunkten.
Gewinnt bei jeder Neuausgewogenheit extrem niedrige Kaufmöglichkeiten um etwa 1% unter den aktuellen Preisen.
Anpassungsfähige Zeitpunkte, flexible Anpassung.
Anpassbare Start- und Enddaten für Neuausgleichszyklen, bequem für die Optimierung des Backtestings.
Die Strategie birgt auch einige Risiken:
Wird der Zeitpunkt der regelmäßigen Neuausgewogenheit nicht richtig gewählt, kann es vorkommen, dass er bessere Kaufmöglichkeiten verpasst oder zu unangemessenen Zeiten ausverkauft wird.
Der Kaufpreis ist nur um 1% niedriger als der Verkaufspreis und kann in jedem Neuausgleichszyklus möglicherweise nicht ausreichend niedrige Kaufpreisdifferenz erzielen.
Sowohl Verkauf als auch Kauf sind Marktordnungen, die unter einem gewissen Grad an Verschiebungen leiden können.
Wenn die Strategie nur zu bestimmten Zeitpunkten funktioniert, kann der Markt zwischen diesen Zeitpunkten nicht verwaltet werden.
Häufige Neuausgleichsmaßnahmen führen zu relativ höheren Handelsgebühren.
Die entsprechenden Lösungen:
Wählen Sie geeignete Zeitpunkte für die Neuausgewogenheit aus und kombinieren Sie sie auch mit anderen technischen Indikatoren.
Erhöhen Sie den Kaufpreis-Spread-Parameter entsprechend.
Wählen Sie Produkte mit guter Tiefe und geringer Volatilität.
Kombination mit anderen Risikomanagementstrategien in Zeiten, in denen keine Neuausgewogenheit besteht.
Regeln Sie die Häufigkeit der Neuausgleichung angemessen, um die Vorteile und die Handelskosten auszugleichen.
Die Strategie kann in folgenden Aspekten optimiert werden:
Optimierung der Auswahl der Zeitpunkte für das Wiederausgleichsverfahren auf der Grundlage der Merkmale des Intraday-Zyklus der Handelsprodukte.
Hinzufügen anderer technischer Indikatoren, um zu ungünstigen Zeiten eine Neuausgewogenheit zu vermeiden, z. B. Kombination von gleitenden Durchschnittstrendindikatoren.
Optimieren Sie den extrem niedrigen Kaufparameter, um den Vorteil und die Handelskosten auszugleichen.
Annahme von Trailing Stop Loss/Take Profit zur Verwaltung von Positionen zwischen Re-Balancements.
Verwenden Sie Machine-Learning-Algorithmen, um auf historischen Daten zu trainieren und automatisch die Zeitpunkte für die Neuausgewogenheit zu optimieren.
Hinzufügen von Anpassungen rund um Aktienverteilungen, Dividenden usw., um zeitlichen Änderungen zu folgen.
Im Allgemeinen kann die zeitgesteuerte Auftragsstrategie den Handelsprozess automatisieren und die manuellen Betriebskosten durch periodisches Re-Balancing reduzieren. Es gibt großen Raum für Optimierungen in Bereichen wie Re-Balancing-Zeitpunktwahl, Kaufparameter-Einstellung, Stop-Loss / Take-Profit und Algorithmusverbesserung. Es müssen auch bestimmte Handelsrisiken beachtet und geeignete Risikomanagementmaßnahmen ergriffen werden. Insgesamt eignet sich diese Strategie für quantitative Trader, die nach effizientem automatisiertem Re-Balancing suchen.
/*backtest start: 2023-08-28 00:00:00 end: 2023-09-27 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © ytrevor //@version=4 strategy("Order At Specified Time", overlay=true) // -- These inputs are for customizing the times of your desired orders -- // customHour = input(title="Hour for Order Execution", type=input.integer, defval=01, minval=00, maxval=24) // customMinute = input(title="Minute for Order Execution", type=input.integer, defval=00, minval=00, maxval=59) targetTime = timestamp("UTC", year, month, dayofmonth, customHour, customMinute, 00) //Order executes at this time inDateRange = (time >= targetTime) and (time <= targetTime) //Orders are placed everyday at 01:00 UTC, or any other time specified via input // -- These inputs are for back testing. Feel free to change the start and end dates via input -- // startDay = input(title="Start Day", type=input.integer, defval=10, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=2, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2021) endDay = input(title="End Day", type=input.integer, defval=22, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=3, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2021) betweenDates = true // -- Order execution -- // if betweenDates buyPrice = close*0.99 //Buy at 1% lower than selling price strategy.entry("Sell", strategy.short, when=inDateRange) //Sell at 01:00 UTC, or at any other time specified via input strategy.entry("Buy", strategy.long, limit=buyPrice, when=inDateRange) //Buy limit order placed at the same time, 1% lower than selling price