"""
Helpers and examples for supported API Requests that each Celery
Task supports:
- analysis_engine.work_tasks.get_new_pricing_data
- analysis_engine.work_tasks.handle_pricing_update_task
- analysis_engine.work_tasks.publish_pricing_update
"""
import datetime
import pandas as pd
import analysis_engine.consts as ae_consts
import analysis_engine.utils as ae_utils
import analysis_engine.iex.consts as iex_consts
import analysis_engine.td.consts as td_consts
import analysis_engine.options_dates as opt_dates
[docs]def get_ds_dict(
ticker,
base_key=None,
ds_id=None,
label=None,
service_dict=None):
"""get_ds_dict
Get a dictionary with all cache keys for a ticker and return
the dictionary. Use this method to decouple your apps
from the underlying cache key implementations (if you
do not need them).
:param ticker: ticker
:param base_key: optional - base key that is prepended
in all cache keys
:param ds_id: optional - dataset id (useful for
external database id)
:param label: optional - tracking label in the logs
:param service_dict: optional - parent call functions and Celery
tasks can use this dictionary to seed the
common service routes and endpoints. Refer
to ``analysis_engine.consts.SERVICE_VALS``
for automatically-copied over keys by this
helper.
"""
if not ticker:
raise Exception('please pass in a ticker')
use_base_key = base_key
if not use_base_key:
last_str = ae_utils.get_last_close_str(
fmt=ae_consts.COMMON_DATE_FORMAT)
use_base_key = f'{ticker}_{last_str}'
date_str = ae_utils.utc_date_str(
fmt=ae_consts.COMMON_DATE_FORMAT)
now_str = ae_utils.utc_now_str(
fmt=ae_consts.COMMON_TICK_DATE_FORMAT)
daily_redis_key = (
f'{use_base_key}_{ae_consts.DAILY_S3_BUCKET_NAME}')
minute_redis_key = (
f'{use_base_key}_{ae_consts.MINUTE_S3_BUCKET_NAME}')
quote_redis_key = (
f'{use_base_key}_{ae_consts.QUOTE_S3_BUCKET_NAME}')
stats_redis_key = (
f'{use_base_key}_{ae_consts.STATS_S3_BUCKET_NAME}')
peers_redis_key = (
f'{use_base_key}_{ae_consts.PEERS_S3_BUCKET_NAME}')
news_iex_redis_key = (
f'{use_base_key}_{ae_consts.NEWS_S3_BUCKET_NAME}1')
financials_redis_key = (
f'{use_base_key}_{ae_consts.FINANCIALS_S3_BUCKET_NAME}')
earnings_redis_key = (
f'{use_base_key}_{ae_consts.EARNINGS_S3_BUCKET_NAME}')
dividends_redis_key = (
f'{use_base_key}_{ae_consts.DIVIDENDS_S3_BUCKET_NAME}')
company_redis_key = (
f'{use_base_key}_{ae_consts.COMPANY_S3_BUCKET_NAME}')
options_yahoo_redis_key = (
f'{use_base_key}_{ae_consts.OPTIONS_S3_BUCKET_NAME}')
call_options_yahoo_redis_key = (
f'{use_base_key}_calls')
put_options_yahoo_redis_key = (
f'{use_base_key}_puts')
pricing_yahoo_redis_key = (
f'{use_base_key}_{ae_consts.PRICING_S3_BUCKET_NAME}')
news_yahoo_redis_key = (
f'{use_base_key}_{ae_consts.NEWS_S3_BUCKET_NAME}')
call_options_td_redis_key = (
f'{use_base_key}_tdcalls')
put_options_td_redis_key = (
f'{use_base_key}_tdputs')
ds_cache_dict = {
'daily': daily_redis_key,
'minute': minute_redis_key,
'quote': quote_redis_key,
'stats': stats_redis_key,
'peers': peers_redis_key,
'news1': news_iex_redis_key,
'financials': financials_redis_key,
'earnings': earnings_redis_key,
'dividends': dividends_redis_key,
'company': company_redis_key,
'options': options_yahoo_redis_key,
'calls': call_options_yahoo_redis_key,
'puts': put_options_yahoo_redis_key,
'pricing': pricing_yahoo_redis_key,
'news': news_yahoo_redis_key,
'tdcalls': call_options_td_redis_key,
'tdputs': put_options_td_redis_key,
'ticker': ticker,
'ds_id': ds_id,
'label': label,
'created': now_str,
'date': date_str,
'manifest_key': use_base_key,
'version': ae_consts.CACHE_DICT_VERSION
}
# set keys/values for redis/minio from the
# service_dict - helper method for
# launching job chains
if service_dict:
for k in ae_consts.SERVICE_VALS:
if k in service_dict:
ds_cache_dict[k] = service_dict[k]
return ds_cache_dict
# end of get_ds_dict
[docs]def build_get_new_pricing_request(
label=None):
"""build_get_new_pricing_request
Build a sample Celery task API request:
analysis_engine.work_tasks.get_new_pricing_data
Used for testing: run_get_new_pricing_data(work)
:param label: log label to use
"""
ticker = ae_consts.TICKER
ticker_id = ae_consts.TICKER_ID
base_key = f'''{ticker}_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.S3_BUCKET
s3_key = base_key
redis_key = base_key
use_strike = None
contract_type = 'C'
get_pricing = True
get_news = True
get_options = True
work = {
'ticker': ticker,
'ticker_id': ticker_id,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
'strike': use_strike,
'contract': contract_type,
'get_pricing': get_pricing,
'get_news': get_news,
'get_options': get_options
}
if label:
work['label'] = label
return work
# end of build_get_new_pricing_request
[docs]def build_cache_ready_pricing_dataset(
label=None):
"""build_cache_ready_pricing_dataset
Build a cache-ready pricing dataset to replicate
the ``get_new_pricing_data`` task
:param label: log label to use
"""
pricing_dict = {
'ask': 0.0,
'askSize': 8,
'averageDailyVolume10Day': 67116380,
'averageDailyVolume3Month': 64572187,
'bid': 0.0,
'bidSize': 10,
'close': 287.6,
'currency': 'USD',
'esgPopulated': False,
'exchange': 'PCX',
'exchangeDataDelayedBy': 0,
'exchangeTimezoneName': 'America/New_York',
'exchangeTimezoneShortName': 'EDT',
'fiftyDayAverage': 285.21735,
'fiftyDayAverageChange': 2.8726501,
'fiftyDayAverageChangePercent': 0.010071794,
'fiftyTwoWeekHigh': 291.74,
'fiftyTwoWeekHighChange': -3.649994,
'fiftyTwoWeekHighChangePercent': -0.012511119,
'fiftyTwoWeekLow': 248.02,
'fiftyTwoWeekLowChange': 40.069992,
'fiftyTwoWeekLowChangePercent': 0.16155952,
'fiftyTwoWeekRange': '248.02 - 291.74',
'financialCurrency': 'USD',
'fullExchangeName': 'NYSEArca',
'gmtOffSetMilliseconds': -14400000,
'high': 289.03,
'language': 'en-US',
'longName': 'SPDR S&P 500 ETF',
'low': 287.88,
'market': 'us_market',
'marketCap': 272023797760,
'marketState': 'POSTPOST',
'messageBoardId': 'finmb_6160262',
'open': 288.74,
'postMarketChange': 0.19998169,
'postMarketChangePercent': 0.06941398,
'postMarketPrice': 288.3,
'postMarketTime': 1536623987,
'priceHint': 2,
'quoteSourceName': 'Delayed Quote',
'quoteType': 'ETF',
'region': 'US',
'regularMarketChange': 0.48999023,
'regularMarketChangePercent': 0.17037213,
'regularMarketDayHigh': 289.03,
'regularMarketDayLow': 287.88,
'regularMarketDayRange': '287.88 - 289.03',
'regularMarketOpen': 288.74,
'regularMarketPreviousClose': 287.6,
'regularMarketPrice': 288.09,
'regularMarketTime': 1536609602,
'regularMarketVolume': 50210903,
'sharesOutstanding': 944232000,
'shortName': 'SPDR S&P 500',
'sourceInterval': 15,
'symbol': 'SPY',
'tradeable': True,
'trailingThreeMonthNavReturns': 7.71,
'trailingThreeMonthReturns': 7.63,
'twoHundredDayAverage': 274.66153,
'twoHundredDayAverageChange': 13.428467,
'twoHundredDayAverageChangePercent': 0.048890963,
'volume': 50210903,
'ytdReturn': 9.84
}
calls_df_as_json = pd.DataFrame([{
'ask': 106,
'bid': 105.36,
'change': 4.0899963,
'contractSize': 'REGULAR',
'contractSymbol': 'SPY181019P00380000',
'currency': 'USD',
'expiration': 1539907200,
'impliedVolatility': 1.5991230981,
'inTheMoney': True,
'lastPrice': 91.82,
'lastTradeDate': 1539027901,
'openInterest': 0,
'percentChange': 4.4543633,
'strike': 380,
'volume': 37
}]).to_json(
orient='records')
puts_df_as_json = pd.DataFrame([{
'ask': 106,
'bid': 105.36,
'change': 4.0899963,
'contractSize': 'REGULAR',
'contractSymbol': 'SPY181019P00380000',
'currency': 'USD',
'expiration': 1539907200,
'impliedVolatility': 1.5991230981,
'inTheMoney': True,
'lastPrice': 91.82,
'lastTradeDate': 1539027901,
'openInterest': 0,
'percentChange': 4.4543633,
'strike': 380,
'volume': 37
}]).to_json(
orient='records')
news_list = [
{
'd': '16 hours ago',
's': 'Yahoo Finance',
'sp': 'Some Title 1',
'sru': 'http://news.google.com/news/url?values',
't': 'Some Title 1',
'tt': '1493311950',
'u': 'http://finance.yahoo.com/news/url1',
'usg': 'ke1'
},
{
'd': '18 hours ago',
's': 'Yahoo Finance',
'sp': 'Some Title 2',
'sru': 'http://news.google.com/news/url?values',
't': 'Some Title 2',
'tt': '1493311950',
'u': 'http://finance.yahoo.com/news/url2',
'usg': 'key2'
}
]
options_dict = {
'exp_date': '2018-10-19',
'calls': calls_df_as_json,
'puts': puts_df_as_json,
'num_calls': 1,
'num_puts': 1
}
cache_data = {
'news': news_list,
'options': options_dict,
'pricing': pricing_dict
}
return cache_data
# end of build_cache_ready_pricing_dataset
[docs]def build_publish_pricing_request(
label=None):
"""build_publish_pricing_request
Build a sample Celery task API request:
analysis_engine.work_tasks.publisher_pricing_update
Used for testing: run_publish_pricing_update(work)
:param label: log label to use
"""
ticker = ae_consts.TICKER
ticker_id = ae_consts.TICKER_ID
base_key = f'''{ticker}_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.S3_BUCKET
s3_key = base_key
redis_key = base_key
use_strike = None
contract_type = 'C'
use_data = build_cache_ready_pricing_dataset()
work = {
'ticker': ticker,
'ticker_id': ticker_id,
'strike': use_strike,
'contract': contract_type,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
'df_compress': True,
'data': use_data
}
if label:
work['label'] = label
return work
# end of build_publish_pricing_request
[docs]def build_publish_from_s3_to_redis_request(
label=None):
"""build_publish_from_s3_to_redis_request
Build a sample Celery task API request:
analysis_engine.work_tasks.publish_from_s3_to_redis
Used for testing: run_publish_from_s3_to_redis(work)
:param label: log label to use
"""
ticker = ae_consts.TICKER
ticker_id = ae_consts.TICKER_ID
base_key = f'''{ticker}_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.S3_BUCKET
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ticker': ticker,
'ticker_id': ticker_id,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_publish_from_s3_to_redis_request
def build_publish_ticker_aggregate_from_s3_request(
label=None):
"""build_publish_ticker_aggregate_from_s3_request
Build a sample Celery task API request:
analysis_engine.work_tasks.publish_ticker_aggregate_from_s3
Used for testing: run_publish_ticker_aggregate_from_s3(work)
:param label: log label to use
"""
ticker = ae_consts.TICKER
ticker_id = ae_consts.TICKER_ID
s3_bucket_name = ae_consts.S3_BUCKET
s3_compiled_bucket_name = ae_consts.S3_COMPILED_BUCKET
s3_key = f'{ticker}_latest'
redis_key = f'{ticker}_latest'
s3_enabled = True
redis_enabled = True
work = {
'ticker': ticker,
'ticker_id': ticker_id,
's3_bucket': s3_bucket_name,
's3_compiled_bucket': s3_compiled_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_publish_ticker_aggregate_from_s3_request
[docs]def build_prepare_dataset_request(
label=None):
"""build_prepare_dataset_request
Build a sample Celery task API request:
analysis_engine.work_tasks.prepare_pricing_dataset
Used for testing: run_prepare_pricing_dataset(work)
:param label: log label to use
"""
ticker = ae_consts.TICKER
ticker_id = ae_consts.TICKER_ID
base_key = f'''{ticker}_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.S3_BUCKET
s3_key = base_key
redis_key = base_key
s3_prepared_bucket_name = ae_consts.PREPARE_S3_BUCKET_NAME
s3_prepared_key = f'{base_key}.csv'
redis_prepared_key = f'{base_key}'
ignore_columns = None
s3_enabled = True
redis_enabled = True
work = {
'ticker': ticker,
'ticker_id': ticker_id,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
'prepared_s3_key': s3_prepared_key,
'prepared_s3_bucket': s3_prepared_bucket_name,
'prepared_redis_key': redis_prepared_key,
'ignore_columns': ignore_columns,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_prepare_dataset_request
[docs]def build_analyze_dataset_request(
label=None):
"""build_analyze_dataset_request
Build a sample Celery task API request:
analysis_engine.work_tasks.analyze_pricing_dataset
Used for testing: run_analyze_pricing_dataset(work)
:param label: log label to use
"""
ticker = ae_consts.TICKER
ticker_id = ae_consts.TICKER_ID
base_key = f'''{ticker}_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.PREPARE_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_analyzed_bucket_name = ae_consts.ANALYZE_S3_BUCKET_NAME
s3_analyzed_key = f'{base_key}.csv'
redis_analyzed_key = f'{base_key}'
ignore_columns = None
s3_enabled = True
redis_enabled = True
work = {
'ticker': ticker,
'ticker_id': ticker_id,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
'analyzed_s3_key': s3_analyzed_key,
'analyzed_s3_bucket': s3_analyzed_bucket_name,
'analyzed_redis_key': redis_analyzed_key,
'ignore_columns': ignore_columns,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_analyze_dataset_request
"""
IEX API Requests
"""
def build_iex_fetch_daily_request(
label=None):
"""build_iex_fetch_daily_request
Fetch `daily
data <https://iexcloud.io/docs/api/#historical-prices>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_daily_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.DAILY_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_DAILY,
'fd_type': iex_consts.DATAFEED_DAILY,
'ticker': ticker,
'timeframe': '5y',
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_daily_request
def build_iex_fetch_minute_request(
label=None):
"""build_iex_fetch_minute_request
Fetch `minute
data <https://iexcloud.io/docs/api/#historical-prices>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_minute_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.MINUTE_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_MINUTE,
'fd_type': iex_consts.DATAFEED_MINUTE,
'ticker': ticker,
'timeframe': '1d',
'last_close': None,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_minute_request
def build_iex_fetch_quote_request(
label=None):
"""build_iex_fetch_quote_request
Fetch `quote
data <https://iexcloud.io/docs/api/#quote>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_quote_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.QUOTE_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_QUOTE,
'fd_type': iex_consts.DATAFEED_QUOTE,
'ticker': ticker,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_quote_request
def build_iex_fetch_stats_request(
label=None):
"""build_iex_fetch_stats_request
Fetch `stats
data <https://iexcloud.io/docs/api/#key-stats>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_stat_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.STATS_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_STATS,
'fd_type': iex_consts.DATAFEED_STATS,
'ticker': ticker,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_stats_request
def build_iex_fetch_peers_request(
label=None):
"""build_iex_fetch_peers_request
Fetch `peers
data <https://iexcloud.io/docs/api/#peers>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_peer_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.PEERS_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_PEERS,
'fd_type': iex_consts.DATAFEED_PEERS,
'ticker': ticker,
'timeframe': '1d',
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_peers_request
def build_iex_fetch_news_request(
label=None):
"""build_iex_fetch_news_request
Fetch `news
data <https://iexcloud.io/docs/api/#news>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_news_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.NEWS_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_NEWS,
'fd_type': iex_consts.DATAFEED_NEWS,
'ticker': ticker,
'timeframe': '1d',
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_news_request
def build_iex_fetch_financials_request(
label=None):
"""build_iex_fetch_financials_request
Fetch `financials
data <https://iexcloud.io/docs/api/#financials>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_financial_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.FINANCIALS_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_FINANCIALS,
'fd_type': iex_consts.DATAFEED_FINANCIALS,
'ticker': ticker,
'timeframe': '1d',
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_financials_request
def build_iex_fetch_earnings_request(
label=None):
"""build_iex_fetch_earnings_request
Fetch `earnings
data <https://iexcloud.io/docs/api/#earnings>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_earning_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.EARNINGS_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_EARNINGS,
'fd_type': iex_consts.DATAFEED_EARNINGS,
'ticker': ticker,
'timeframe': '1d',
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_earnings_request
def build_iex_fetch_dividends_request(
label=None):
"""build_iex_fetch_dividends_request
Fetch `dividends
data <https://iexcloud.io/docs/api/#dividends>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_dividend_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.DIVIDENDS_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_DIVIDENDS,
'fd_type': iex_consts.DATAFEED_DIVIDENDS,
'ticker': ticker,
'timeframe': '2y',
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_dividends_request
def build_iex_fetch_company_request(
label=None):
"""build_iex_fetch_company_request
Fetch `company
data <https://iexcloud.io/docs/api/#company>`__
from IEX
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_company_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = ae_consts.COMPANY_S3_BUCKET_NAME
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
work = {
'ft_type': iex_consts.FETCH_COMPANY,
'fd_type': iex_consts.DATAFEED_COMPANY,
'ticker': ticker,
'timeframe': '1d',
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_iex_fetch_company_request
[docs]def build_screener_analysis_request(
ticker=None,
tickers=None,
fv_urls=None,
fetch_mode='iex',
iex_datasets=ae_consts.IEX_DATASETS_DEFAULT,
determine_sells=None,
determine_buys=None,
label='screener'):
"""build_screener_analysis_request
Build a dictionary request for the task:
``analysis_engine.work_tasks.run_screener_analysis``
:param ticker: ticker to add to the analysis
:param tickers: tickers to add to the analysis
:param fv_urls: finviz urls
:param fetch_mode: supports pulling from ``iex``,
``yahoo``, ``all`` (defaults to ``iex``)
:param iex_datasets: datasets to fetch from
``iex`` (defaults to ``analysis_engine.con
sts.IEX_DATASETS_DEFAULT``)
:param determine_sells: string custom Celery task
name for handling sell-side processing
:param determine_buys: string custom Celery task
name for handling buy-side processing
:param label: log tracking label
:return: initial request dictionary:
::
req = {
'tickers': use_tickers,
'fv_urls': use_urls,
'fetch_mode': fetch_mode,
'iex_datasets': iex_datasets,
's3_bucket': s3_bucket_name,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled,
'determine_sells': determine_sells,
'determine_buys': determine_buys,
'label': label
}
"""
use_urls = []
if fv_urls:
for f in fv_urls:
if f not in use_urls:
use_urls.append(f)
use_tickers = tickers
if ticker:
if not tickers:
use_tickers = [
ticker
]
if ticker.upper() not in use_tickers:
use_tickers.append(ticker.upper())
s3_bucket_name = ae_consts.SCREENER_S3_BUCKET_NAME
s3_enabled = True
redis_enabled = True
req = {
'tickers': use_tickers,
'urls': use_urls,
'fetch_mode': fetch_mode,
'iex_datasets': iex_datasets,
's3_bucket': s3_bucket_name,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled,
'determine_sells': determine_sells,
'determine_buys': determine_buys,
'label': label
}
return req
# end build_screener_analysis_request
"""
Tradier API Requests
"""
def build_td_fetch_calls_request(
label=None):
"""build_td_fetch_calls_request
Fetch tradier calls
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_tdcalls_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = 'tdcalls'
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
exp_date = opt_dates.option_expiration().strftime(
ae_consts.COMMON_DATE_FORMAT)
work = {
'ft_type': td_consts.FETCH_TD_CALLS,
'fd_type': td_consts.DATAFEED_TD_CALLS,
'ticker': ticker,
'exp_date': exp_date,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_td_fetch_calls_request
def build_td_fetch_puts_request(
label=None):
"""build_td_fetch_puts_request
Fetch tradier puts
:param label: log label to use
"""
ticker = ae_consts.TICKER
base_key = f'''{ticker}_tdputs_{datetime.datetime.utcnow().strftime(
'%Y_%m_%d_%H_%M_%S')}'''
s3_bucket_name = 'tdputs'
s3_key = base_key
redis_key = base_key
s3_enabled = True
redis_enabled = True
exp_date = opt_dates.option_expiration().strftime(
ae_consts.COMMON_DATE_FORMAT)
work = {
'ft_type': td_consts.FETCH_TD_PUTS,
'fd_type': td_consts.DATAFEED_TD_PUTS,
'ticker': ticker,
'exp_date': exp_date,
's3_bucket': s3_bucket_name,
's3_key': s3_key,
'redis_key': redis_key,
's3_enabled': s3_enabled,
'redis_enabled': redis_enabled
}
if label:
work['label'] = label
return work
# end of build_td_fetch_puts_request