Files
quantconnect--lean/PythonToolbox/tests/test_symbol.py
AlexCatarino d5c64dee54 Adds symbol decoder
Adds Lean Symbol object decoder. Given a string with ticker + security ID, returns some of the security properties (market, security type, etc)

Closes #2909

Some users have the Symbol string object but don't know what the ID means. This python class can be used to translate the ID.

Added unit test.
2019-02-14 17:35:45 +00:00

64 lines
3.0 KiB
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.
import pytest
from datetime import datetime
from quantconnect.symbol import Symbol
# noinspection PyPep8
spot_price_securities_cases = (
( 'security_id', 'ticker', 'security_type', 'market', 'date_arg'),
[('SPY R735QTJ8XC9X', 'SPY', 'Equity', 'USA', [1998, 1, 2]),
('AAPL R735QTJ8XC9X', 'AAPL', 'Equity', 'USA', [1998, 1, 2]),
('EURUSD 5O', 'EURUSD', 'Forex', 'FXCM', None),
('USDJPY 8G', 'USDJPY', 'Forex', 'Oanda', None),
('WTICOUSD 8I', 'WTICOUSD', 'Cfd', 'Oanda', None),
('BTCUSD XJ', 'BTCUSD', 'Crypto', 'GDAX', None),
('ED XKDEAL18BYP5', 'ED', 'Future', 'USA', [2020, 12, 15]),
])
option_security_cases = (
( 'security_id', 'ticker', 'security_type', 'market', 'date_arg', 'underlying_id', 'option_right', 'option_style', 'strike_price'),
[('SPY 3033WWUF8MUH2|SPY R735QTJ8XC9X', 'SPY', 'Option', 'USA', [2015, 9, 18], 'SPY R735QTJ8XC9X', 'Put', 'European', 195.5)])
@pytest.mark.parametrize(*spot_price_securities_cases)
def test_spot_price_securities(security_id, ticker, security_type, market, date_arg):
symbol = Symbol(security_id)
assert symbol.ID == security_id
assert symbol.Symbol == ticker
assert symbol.SecurityType == security_type
assert symbol.Market == market
if symbol.SecurityType == 'Equity' or symbol.SecurityType == 'Future':
assert symbol.Date == datetime(*date_arg)
else:
assert symbol.Date == None
@pytest.mark.parametrize(*option_security_cases)
def test_option_securities(security_id, ticker, security_type, market, date_arg, underlying_id,
option_right, option_style, strike_price):
symbol = Symbol(security_id)
assert symbol.ID == security_id
assert symbol.Symbol == ticker
assert symbol.SecurityType == security_type
assert symbol.Market == market
assert symbol.Date == datetime(*date_arg)
assert symbol.Underlying == Symbol(underlying_id)
assert symbol.OptionRight == option_right
assert symbol.StrikePrice == strike_price
assert symbol.OptionStyle == option_style
def test_equal_symbols_are_equal():
assert Symbol('SPY R735QTJ8XC9X') == Symbol('SPY R735QTJ8XC9X')