代码拉取完成,页面将自动刷新
# 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>
### Regression algorithm asserting the behavior of auxiliary data history requests
### </summary>
class HistoryAuxiliaryDataRegressionAlgorithm(QCAlgorithm):
def initialize(self):
'''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.'''
self.set_start_date(2021, 1, 1)
self.set_end_date(2021, 1, 5)
aapl = self.add_equity("AAPL", Resolution.DAILY).symbol
# multi symbol request
spy = Symbol.create("SPY", SecurityType.EQUITY, Market.USA)
multi_symbol_request = self.history(Dividend, [ aapl, spy ], 360, Resolution.DAILY)
if len(multi_symbol_request) != 12:
raise ValueError(f"Unexpected multi symbol dividend count: {len(multi_symbol_request)}")
# continuous future mapping requests
sp500 = Symbol.create(Futures.Indices.SP_500_E_MINI, SecurityType.FUTURE, Market.CME)
continuous_future_open_interest_mapping = self.history(SymbolChangedEvent, sp500, datetime(2007, 1, 1), datetime(2012, 1, 1), data_mapping_mode = DataMappingMode.OPEN_INTEREST)
if len(continuous_future_open_interest_mapping) != 9:
raise ValueError(f"Unexpected continuous future mapping event count: {len(continuous_future_open_interest_mapping)}")
continuous_future_last_trading_day_mapping = self.history(SymbolChangedEvent, sp500, datetime(2007, 1, 1), datetime(2012, 1, 1), data_mapping_mode = DataMappingMode.LAST_TRADING_DAY)
if len(continuous_future_last_trading_day_mapping) != 9:
raise ValueError(f"Unexpected continuous future mapping event count: {len(continuous_future_last_trading_day_mapping)}")
dividend = self.history(Dividend, aapl, 360)
self.debug(str(dividend))
if len(dividend) != 6:
raise ValueError(f"Unexpected dividend count: {len(dividend)}")
for distribution in dividend.distribution:
if distribution == 0:
raise ValueError(f"Unexpected distribution: {distribution}")
split = self.history(Split, aapl, 360)
self.debug(str(split))
if len(split) != 2:
raise ValueError(f"Unexpected split count: {len(split)}")
for splitfactor in split.splitfactor:
if splitfactor == 0:
raise ValueError(f"Unexpected splitfactor: {splitfactor}")
symbol = Symbol.create("BTCUSD", SecurityType.CRYPTO_FUTURE, Market.BINANCE)
margin_interest = self.history(MarginInterestRate, symbol, 24 * 3, Resolution.HOUR)
self.debug(str(margin_interest))
if len(margin_interest) != 8:
raise ValueError(f"Unexpected margin interest count: {len(margin_interest)}")
for interestrate in margin_interest.interestrate:
if interestrate == 0:
raise ValueError(f"Unexpected interestrate: {interestrate}")
# last trading date on 2007-05-18
delisted_symbol = Symbol.create("AAA.1", SecurityType.EQUITY, Market.USA)
delistings = self.history(Delisting, delisted_symbol, datetime(2007, 5, 15), datetime(2007, 5, 21))
self.debug(str(delistings))
if len(delistings) != 2:
raise ValueError(f"Unexpected delistings count: {len(delistings)}")
if delistings.iloc[0].type != DelistingType.WARNING:
raise ValueError(f"Unexpected delisting: {delistings.iloc[0]}")
if delistings.iloc[1].type != DelistingType.DELISTED:
raise ValueError(f"Unexpected delisting: {delistings.iloc[1]}")
# get's remapped:
# 2008-09-30 spwr -> spwra
# 2011-11-17 spwra -> spwr
remapped_symbol = Symbol.create("SPWR", SecurityType.EQUITY, Market.USA)
symbol_changed_events = self.history(SymbolChangedEvent, remapped_symbol, datetime(2007, 1, 1), datetime(2012, 1, 1))
self.debug(str(symbol_changed_events))
if len(symbol_changed_events) != 2:
raise ValueError(f"Unexpected SymbolChangedEvents count: {len(symbol_changed_events)}")
first_event = symbol_changed_events.iloc[0]
if first_event.oldsymbol != "SPWR" or first_event.newsymbol != "SPWRA" or symbol_changed_events.index[0][1] != datetime(2008, 9, 30):
raise ValueError(f"Unexpected SymbolChangedEvents: {first_event}")
second_event = symbol_changed_events.iloc[1]
if second_event.newsymbol != "SPWR" or second_event.oldsymbol != "SPWRA" or symbol_changed_events.index[1][1] != datetime(2011, 11, 17):
raise ValueError(f"Unexpected SymbolChangedEvents: {second_event}")
def on_data(self, data):
'''on_data event is the primary entry point for your algorithm. Each new data point will be pumped in here.
Arguments:
data: Slice object keyed by symbol containing the stock data
'''
if not self.portfolio.invested:
self.set_holdings("AAPL", 1)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。