رفتن به محتوا
همه اسناد کتابخانه

زمان‌بندی انقضای بینش‌ها با ابزار انقضای Lean

مقاله Strategy library · نویسنده: QuantConnect

خلاصه

این نمونه از چارچوب 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 بر پایه متن اصلی نوشته است؛ نسخه‌ای از اثر منبع نیست.