Перейти к содержимому
Все документы библиотеки

Настройка срока действия сигналов с помощью Lean Expiry Helper

Статья Strategy library · Автор: QuantConnect

Сводка

В этом примере фреймворка Lean показано, как Alpha Model может использовать помощник срока действия, чтобы задать время закрытия созданных торговых сигналов. Алгоритм использует выбранный вручную набор акций США US, включающий SPY, часовые данные, равновзвешенное формирование портфеля, немедленное исполнение и лимит просадки для каждой бумаги. Alpha Model ждёт запланированного времени обновления, прежде чем создавать новые сигналы.

В примере срок действия выбирается в зависимости от дня недели: один месяц, конец месяца, конец недели или конец дня. Также в журнал записываются время закрытия созданного сигнала и день недели, чтобы показать, как проверить расписание. Это механика фреймворка, а не проверенный торговый сигнал: модель всегда задаёт восходящее направление, а в документе нет сведений об инвестиционных результатах или доказательств прибыльности такого выбора времени. Узкий диапазон дат и набор из одного инструмента дополнительно ограничивают выводы. Пример полезен для реализации управления сроком действия сигналов, но не является готовой рекомендацией по торговой стратегии.

Ключевые идеи

  • Alpha Model может использовать помощники срока действия, чтобы задать, когда созданные сигналы должны закрываться.
  • В примере интервал срока действия выбирается с учётом текущего дня недели.
  • Запланированное время следующего обновления не позволяет модели выпускать сигналы при каждом обновлении данных.
  • Время закрытия созданных сигналов можно записывать в журнал, чтобы проверить работу срока действия.
  • Пример показывает использование фреймворка, но не содержит доказательств торговой эффективности.

Теги

Полный текст
# 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 по оригиналу и не является его копией.