الانتقال إلى المحتوى
جميع مستندات المكتبة

جدولة انتهاء صلاحية الإشارات بمساعد Lean

مقال Strategy library · المؤلف: QuantConnect

الملخص

يوضح هذا المثال في إطار Lean كيف يمكن لنموذج Alpha استخدام مساعد انتهاء الصلاحية لتحديد موعد إغلاق الإشارات التداولية المنشأة. وتستخدم الخوارزمية مجموعة أسهم أمريكية محددة يدويًا تضم SPY من فئة US، وبيانات ساعية، وبناء محفظة بأوزان متساوية، وتنفيذًا فوريًا، وحدًا للتراجع لكل ورقة مالية. وينتظر نموذج Alpha حتى موعد تحديث مجدول قبل إنشاء إشارات إضافية.

يختار المثال موعد انتهاء الصلاحية استنادًا إلى يوم الأسبوع: بعد شهر، أو في نهاية الشهر، أو نهاية الأسبوع، أو نهاية اليوم. كما يسجل وقت إغلاق الإشارة المنشأة ويوم الأسبوع، موضحًا كيفية فحص الجدول الناتج. هذه آليات إطار عمل وليست إشارة تداول مختبرة: فالنموذج يحدد اتجاهًا صعوديًا دائمًا، ولا يقدم المستند أداءً استثماريًا أو دليلًا على ربحية خيارات التوقيت. كما يحد النطاق الزمني الضيق للعينة واقتصارها على رمز واحد مما يمكن استنتاجه. وتكمن فائدته في كونه مثالًا تنفيذيًا لإدارة مدد صلاحية الإشارات، لا توصية استراتيجية متكاملة.

الأفكار الرئيسية

  • يمكن لنموذج Alpha استخدام مساعدات انتهاء الصلاحية لتحديد موعد إغلاق الإشارات المنشأة.
  • يختار المثال فترة انتهاء الصلاحية بحسب يوم الأسبوع الحالي.
  • يمنع موعد التحديث التالي المجدول النموذج من إصدار إشارات عند كل تحديث للبيانات.
  • يمكن تسجيل أوقات إغلاق الإشارات المنشأة لفحص سلوك انتهاء الصلاحية.
  • يوضح المثال استخدام إطار العمل ولا يقدم دليلًا على أداء التداول.

الوسوم

النص الكامل
# 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 هذا الملخص استنادًا إلى المصدر الأصلي؛ وهو ليس نسخة منه.