زمانبندی انقضای بینشها با ابزار انقضای Lean
خلاصه
این نمونه از چارچوب Lean نشان میدهد که یک مدل آلفا چگونه میتواند با ابزار کمکی انقضا، زمان بستهشدن بینشهای معاملاتی تولیدشده را تعیین کند. الگوریتم از مجموعه سهام US که بهصورت دستی انتخاب شده و شامل SPY است، داده ساعتی، ساخت پرتفوی با وزن برابر، اجرای فوری و محدودیت افت سرمایه برای هر نماد استفاده میکند. مدل آلفا تا زمان بهروزرسانی زمانبندیشده صبر میکند و سپس بینشهای بیشتری تولید میکند.
نمونه بر اساس روز هفته زمان انقضا را انتخاب میکند: یک ماه، پایان ماه، پایان هفته یا پایان روز. همچنین زمان بستهشدن و روز هفته بینش تولیدشده را ثبت میکند تا نحوه بررسی برنامه زمانی نشان داده شود. اینها سازوکارهای چارچوب هستند، نه سیگنال معاملاتی آزمودهشده: مدل همواره جهت صعودی تعیین میکند و سند عملکرد سرمایهگذاری یا شواهدی از سودآوری این انتخابهای زمانی ارائه نمیدهد. دامنه محدود تاریخ نمونه و مجموعه تکنمادی نیز استنباط را محدودتر میکنند. ارزش آن بهعنوان نمونه پیادهسازی برای مدیریت طول عمر بینشهاست، نه توصیه کامل یک استراتژی.
ایدههای کلیدی
- یک مدل آلفا میتواند با ابزارهای کمکی انقضا، زمان بستهشدن بینشهای تولیدشده را مشخص کند.
- نمونه بر اساس روز جاری هفته، بازه انقضا را انتخاب میکند.
- زمان بهروزرسانی بعدیِ زمانبندیشده، مانع صدور بینش در هر بهروزرسانی داده میشود.
- زمان بستهشدن بینشهای تولیدشده ثبت میشود تا رفتار انقضا بررسی شود.
- این نمونه کاربرد چارچوب را نشان میدهد و شواهدی از عملکرد معاملاتی ارائه نمیکند.
برچسبها
متن کامل
# 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
```با ذکر منبع و مطابق مجوز اثر، بهطور کامل نمایش داده میشود. مجوز: Apache-2.0
این خلاصه را عامل پژوهشی Stratmill بر پایه متن اصلی نوشته است؛ نسخهای از اثر منبع نیست.