Ablaufzeiten von Insights mit Leans Expiry Helper planen
Zusammenfassung
Dieses Beispiel für das Lean-Framework zeigt, wie ein Alpha-Modell mithilfe einer Ablaufhilfsfunktion festlegen kann, wann generierte Trading-Insights geschlossen werden sollen. Der Algorithmus verwendet ein manuell ausgewähltes US-Aktienuniversum mit SPY, Stundendaten, gleichgewichteter Portfoliozusammenstellung, sofortiger Ausführung und einem Drawdown-Limit pro Wertpapier. Sein Alpha-Modell wartet bis zu einem festgelegten Aktualisierungszeitpunkt, bevor es weitere Insights generiert.
Das Beispiel wählt die Ablaufzeit nach dem Wochentag: in einem Monat, am Monatsende, am Ende der Woche oder am Tagesende. Außerdem protokolliert es den Schließzeitpunkt und den Wochentag des erzeugten Insights, um den resultierenden Zeitplan nachvollziehen zu können. Dies sind Funktionen des Frameworks und kein getestetes Handelssignal: Das Modell weist immer eine Aufwärtsrichtung zu, und das Dokument berichtet weder Anlageperformance noch Belege dafür, dass die gewählten Zeitpunkte profitabel sind. Der kurze Datumsbereich und das Universum mit nur einem Symbol schränken mögliche Schlussfolgerungen zusätzlich ein. Der Nutzen liegt im Implementierungsbeispiel zur Verwaltung der Laufzeiten von Insights, nicht in einer vollständigen Strategieempfehlung.
Kernaussagen
- Ein Alpha Model kann Ablaufzeit-Helfer verwenden, um festzulegen, wann erzeugte Insights geschlossen werden sollen.
- Das Beispiel wählt je nach aktuellem Wochentag ein Ablaufintervall.
- Ein geplanter nächster Aktualisierungszeitpunkt verhindert, dass das Modell bei jeder Datenaktualisierung Insights ausgibt.
- Die Schließzeitpunkte erzeugter Insights können protokolliert werden, um das Ablaufverhalten zu prüfen.
- Das Beispiel veranschaulicht die Verwendung des Frameworks und liefert keine Belege für Handelsperformance.
Schlagwörter
Volltext
# ExpiryHelperAlphaModelFrameworkAlgorithm
# ExpiryHelperAlphaModelFrameworkAlgorithm
Expiry Helper framework algorithm uses Expiry helper class in an Alpha Model
Expiry Helper algorithm uses Expiry helper class in an Alpha Model
## Source (Apache-2.0)
```python
# QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
# Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from AlgorithmImports import *
### <summary>
### Expiry Helper algorithm uses Expiry helper class in an Alpha Model
### </summary>
class ExpiryHelperAlphaModelFrameworkAlgorithm(QCAlgorithm):
'''Expiry Helper framework algorithm uses Expiry helper class in an Alpha Model'''
def initialize(self) -> None:
''' Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
# Set requested data resolution
self.universe_settings.resolution = Resolution.HOUR
self.set_start_date(2013,10,7) #Set Start Date
self.set_end_date(2014,1,1) #Set End Date
self.set_cash(100000) #Set Strategy Cash
symbols = [ Symbol.create("SPY", SecurityType.EQUITY, Market.USA) ]
# set algorithm framework models
self.set_universe_selection(ManualUniverseSelectionModel(symbols))
self.set_alpha(self.ExpiryHelperAlphaModel())
self.set_portfolio_construction(EqualWeightingPortfolioConstructionModel())
self.set_execution(ImmediateExecutionModel())
self.set_risk_management(MaximumDrawdownPercentPerSecurity(0.01))
self.insights_generated += self.on_insights_generated
def on_insights_generated(self, s: IAlgorithm, e: GeneratedInsightsCollection) -> None:
for insight in e.insights:
self.log(f"{e.date_time_utc.isoweekday()}: Close Time {insight.close_time_utc} {insight.close_time_utc.isoweekday()}")
class ExpiryHelperAlphaModel(AlphaModel):
_next_update = None
_direction = InsightDirection.UP
def update(self, algorithm: QCAlgorithm, data: Slice) -> list[Insight]:
if self._next_update and self._next_update > algorithm.time:
return []
expiry = Expiry.END_OF_DAY
# Use the Expiry helper to calculate a date/time in the future
self._next_update = expiry(algorithm.time)
weekday = algorithm.time.isoweekday()
insights = []
for symbol in data.bars.keys():
# Expected CloseTime: next month on the same day and time
if weekday == 1:
insights.append(Insight.price(symbol, Expiry.ONE_MONTH, self._direction))
# Expected CloseTime: next month on the 1st at market open time
elif weekday == 2:
insights.append(Insight.price(symbol, Expiry.END_OF_MONTH, self._direction))
# Expected CloseTime: next Monday at market open time
elif weekday == 3:
insights.append(Insight.price(symbol, Expiry.END_OF_WEEK, self._direction))
# Expected CloseTime: next day (Friday) at market open time
elif weekday == 4:
insights.append(Insight.price(symbol, Expiry.END_OF_DAY, self._direction))
return insights
```Vollständig mit Quellenangabe unter der Lizenz der Quelle angezeigt. Lizenz: Apache-2.0
Diese Zusammenfassung wurde vom Research-Agenten von Stratmill anhand des Originals verfasst; sie ist keine Kopie der Quelle.