Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

import zipline/pyfolio/TejToolAPI時出現MissingSchema: Invalid URL 'None/datatables/TWN/TRADEDAY_TWSE': #19

Closed
Ricky05250525 opened this issue Jan 4, 2024 · 0 comments
Labels

Comments

@Ricky05250525
Copy link
Collaborator

Ricky05250525 commented Jan 4, 2024

Description of Issue:

import zipline/pyfolio/TejToolAPI時出現錯誤

詳細錯誤訊息
---------------------------------------------------------------------------
MissingSchema                             Traceback (most recent call last)
Input In [1], in <cell line: 10>()
      7 os.environ['ticker'] = '1213 2330 2337'
      8 os.environ['mdate'] = '20170101 20230701'
---> 10 from zipline.pipeline import Pipeline
     11 from zipline.pipeline.data import TWEquityPricing

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\zipline\__init__.py:21, in <module>
     17 import numpy as np
     19 # This is *not* a place to dump arbitrary classes/modules for convenience,
     20 # it is a place to expose the public interfaces.
---> 21 from zipline.utils.calendar_utils import get_calendar
     23 from . import data
     24 from . import finance

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\zipline\utils\calendar_utils.py:24, in <module>
      6 # NOTE:
      7 # trading-calendars is no longer maintained and does not support pandas > 1.2.5.
      8 # exchange-calendars is a fork that retained the same functionalities,
   (...)
     20 # Some calendars like for instance the Korean exchange have been extensively updated and might no longer
     21 # work as expected
     23 try:
---> 24     from exchange_calendars import ExchangeCalendar as TradingCalendar
     25     from exchange_calendars.calendar_utils import (
     26         ExchangeCalendarDispatcher,
     27         _default_calendar_factories,
     28         _default_calendar_aliases,
     29     )
     30     from exchange_calendars.errors import InvalidCalendarName

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\exchange_calendars\__init__.py:16, in <module>
      1 #
      2 # Copyright 2018 Quantopian, Inc.
      3 #
   (...)
     13 # See the License for the specific language governing permissions and
     14 # limitations under the License.
---> 16 from .calendar_utils import (
     17     clear_calendars,
     18     deregister_calendar,
     19     get_calendar,
     20     get_calendar_names,
     21     register_calendar,
     22     register_calendar_alias,
     23     register_calendar_type,
     24     resolve_alias,
     25     names_to_aliases,
     26     aliases_to_names,
     27 )
     28 from .exchange_calendar import ExchangeCalendar
     30 __all__ = [
     31     "clear_calendars",
     32     "deregister_calendar",
   (...)
     41     "ExchangeCalendar",
     42 ]

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\exchange_calendars\calendar_utils.py:61, in <module>
     59 from .exchange_calendar_xwar import XWARExchangeCalendar
     60 from .exchange_calendar_xwbo import XWBOExchangeCalendar
---> 61 from .exchange_calendar_tejxtai import TEJ_XTAIExchangeCalendar
     62 from .exchange_calendar_tejxtai_morning_future import TEJ_morning_future_XTAIExchangeCalendar # 20230921
     63 from .us_futures_calendar import QuantopianUSFuturesCalendar

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\exchange_calendars\exchange_calendar_tejxtai.py:2179, in <module>
   2176     dynamic_close_dates = data.loc[data['tradeday_cno'] == 0,'zdate'].apply(lambda x : x.tz_localize(None)).tolist()
   2177     return dynamic_close_dates
-> 2179 dynamic_close_dates = get_dynamic_close_days(_close_dates)
   2181 dynamic_close_dates = pd.to_datetime(dynamic_close_dates)
   2183 class TEJ_XTAIExchangeCalendar(ExchangeCalendar):

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\exchange_calendars\exchange_calendar_tejxtai.py:2174, in get_dynamic_close_days(static_close_dates)
   2171 def get_dynamic_close_days(static_close_dates):
   2172     current_date = pd.to_datetime((datetime.today()+relativedelta(years= 1)).strftime('%Y%m%d'))
-> 2174     data = tejapi.get('TWN/TRADEDAY_TWSE',zdate= {'gt':static_close_dates[-1],'lte':current_date},opts = {'columns':['zdate','day_week','tradeday_cno']},paginate=True)
   2176     dynamic_close_dates = data.loc[data['tradeday_cno'] == 0,'zdate'].apply(lambda x : x.tz_localize(None)).tolist()
   2177     return dynamic_close_dates

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\tejapi\get.py:30, in get(datatable_code, **options)
     28 while True:
     29     next_options = copy.deepcopy(options)
---> 30     next_data = Datatable(datatable_code).data(params=next_options)
     32     if data is None:
     33         data = next_data

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\tejapi\model\datatable.py:16, in Datatable.data(self, **options)
     14 def data(self, **options):       
     15     updated_options = Util.convert_options(**options)
---> 16     return Data.page(self, **updated_options)

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\tejapi\operations\list.py:38, in ListOperation.page(cls, datatable, **options)
     35     del options['params']
     36     http_verb='post'
---> 38 r = Connection.request(http_verb, path, **options)
     39 response_data = r.json()
     40 Util.convert_to_dates(response_data)

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\tejapi\connection.py:46, in Connection.request(cls, http_verb, url, **options)
     42 options['headers'] = headers
     44 abs_url = '%s/%s' % (ApiConfig.api_base, url)
---> 46 return cls.execute_request(http_verb, abs_url, **options)

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\tejapi\connection.py:63, in Connection.execute_request(cls, http_verb, url, **options)
     61 if e.response:
     62     cls.handle_api_error(e.response)
---> 63 raise e

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\tejapi\connection.py:54, in Connection.execute_request(cls, http_verb, url, **options)
     50 try:
     51     #print(options)
     52     #print(url)
     53     func = getattr(requests, http_verb)
---> 54     response = func(url, **options)
     56     if response.status_code < 200 or response.status_code >= 300:
     57         cls.handle_api_error(response)

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\requests\api.py:75, in get(url, params, **kwargs)
     64 def get(url, params=None, **kwargs):
     65     r"""Sends a GET request.
     66 
     67     :param url: URL for the new :class:`Request` object.
   (...)
     72     :rtype: requests.Response
     73     """
---> 75     return request('get', url, params=params, **kwargs)

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\requests\api.py:61, in request(method, url, **kwargs)
     57 # By using the 'with' statement we are sure the session is closed, thus we
     58 # avoid leaving sockets open which can trigger a ResourceWarning in some
     59 # cases, and look like a memory leak in others.
     60 with sessions.Session() as session:
---> 61     return session.request(method=method, url=url, **kwargs)

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\requests\sessions.py:515, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    502 # Create the Request.
    503 req = Request(
    504     method=method.upper(),
    505     url=url,
   (...)
    513     hooks=hooks,
    514 )
--> 515 prep = self.prepare_request(req)
    517 proxies = proxies or {}
    519 settings = self.merge_environment_settings(
    520     prep.url, proxies, stream, verify, cert
    521 )

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\requests\sessions.py:443, in Session.prepare_request(self, request)
    440     auth = get_netrc_auth(request.url)
    442 p = PreparedRequest()
--> 443 p.prepare(
    444     method=request.method.upper(),
    445     url=request.url,
    446     files=request.files,
    447     data=request.data,
    448     json=request.json,
    449     headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict),
    450     params=merge_setting(request.params, self.params),
    451     auth=merge_setting(auth, self.auth),
    452     cookies=merged_cookies,
    453     hooks=merge_hooks(request.hooks, self.hooks),
    454 )
    455 return p

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\requests\models.py:318, in PreparedRequest.prepare(self, method, url, headers, files, data, params, auth, cookies, hooks, json)
    315 """Prepares the entire request with the given parameters."""
    317 self.prepare_method(method)
--> 318 self.prepare_url(url, params)
    319 self.prepare_headers(headers)
    320 self.prepare_cookies(cookies)

File ~\Anaconda3\envs\zipline-tej\lib\site-packages\requests\models.py:392, in PreparedRequest.prepare_url(self, url, params)
    389     error = ("Invalid URL {0!r}: No scheme supplied. Perhaps you meant [http://](http:){0}?")
    390     error = error.format(to_native_string(url, 'utf8'))
--> 392     raise MissingSchema(error)
    394 if not host:
    395     raise InvalidURL("Invalid URL %r: No host supplied" % url)

MissingSchema: Invalid URL 'None/datatables/TWN/TRADEDAY_TWSE': No scheme supplied. Perhaps you meant http://none/datatables/TWN/TRADEDAY_TWSE?

Solution:

在import前提供API key即可

os.environ['TEJAPI_KEY'] = "your key" 
os.environ['TEJAPI_BASE'] = "https://api.tej.com.tw"
import zipline
@Ricky05250525 Ricky05250525 changed the title import zipline/pyfolio/TejToolAPI時出現MissingSchema: Invalid URL 'None/datatables/TWN/TRADEDAY_TWSE': No scheme supplied. Perhaps you meant http://None/datatables/TWN/TRADEDAY_TWSE? import zipline/pyfolio/TejToolAPI時出現MissingSchema: Invalid URL 'None/datatables/TWN/TRADEDAY_TWSE': .............. Jan 4, 2024
@Ricky05250525 Ricky05250525 changed the title import zipline/pyfolio/TejToolAPI時出現MissingSchema: Invalid URL 'None/datatables/TWN/TRADEDAY_TWSE': .............. import zipline/pyfolio/TejToolAPI時出現MissingSchema: Invalid URL 'None/datatables/TWN/TRADEDAY_TWSE': Mar 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant