fa45d8aa5f
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
Privoxy对node122:18003返回500,直连正常
234 lines
5.7 KiB
Python
234 lines
5.7 KiB
Python
#
|
|
# Copyright 2018 Quantopian, Inc.
|
|
#
|
|
# 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 datetime import time
|
|
from zoneinfo import ZoneInfo
|
|
|
|
import pandas as pd
|
|
from pandas.tseries.holiday import (
|
|
Day,
|
|
Easter,
|
|
GoodFriday,
|
|
Holiday,
|
|
previous_friday,
|
|
)
|
|
|
|
from .common_holidays import corpus_christi
|
|
from .exchange_calendar import HolidayCalendar, ExchangeCalendar
|
|
|
|
# Universal Confraternization (new years day)
|
|
ConfUniversal = Holiday(
|
|
"Dia da Confraternizacao Universal",
|
|
month=1,
|
|
day=1,
|
|
)
|
|
# Sao Paulo city birthday
|
|
AniversarioSaoPaulo = Holiday(
|
|
"Aniversario de Sao Paulo",
|
|
month=1,
|
|
day=25,
|
|
# in 2022, BVMF was opened on this day
|
|
end_date="2022-01-01",
|
|
)
|
|
# Carnival Monday
|
|
CarnavalSegunda = Holiday(
|
|
"Carnaval Segunda", month=1, day=1, offset=[Easter(), Day(-48)]
|
|
)
|
|
# Carnival Tuesday
|
|
CarnavalTerca = Holiday("Carnaval Terca", month=1, day=1, offset=[Easter(), Day(-47)])
|
|
# Ash Wednesday (short day)
|
|
QuartaCinzas = Holiday(
|
|
"Quarta Cinzas",
|
|
month=1,
|
|
day=1,
|
|
offset=[Easter(), Day(-46)],
|
|
start_date="2016-01-01",
|
|
)
|
|
# Good Friday
|
|
SextaPaixao = GoodFriday
|
|
# Feast of the Most Holy Body of Christ
|
|
CorpusChristi = corpus_christi()
|
|
# Tiradentes Memorial
|
|
Tiradentes = Holiday(
|
|
"Tiradentes",
|
|
month=4,
|
|
day=21,
|
|
)
|
|
# Labor Day
|
|
DiaTrabalho = Holiday(
|
|
"Dia Trabalho",
|
|
month=5,
|
|
day=1,
|
|
)
|
|
# Constitutionalist Revolution
|
|
Constitucionalista_prepandemic = Holiday(
|
|
"Constitucionalista pre-pandemia",
|
|
month=7,
|
|
day=9,
|
|
start_date="1998-01-01",
|
|
end_date="2020-01-01",
|
|
)
|
|
Constitucionalista_pospandemic = Holiday(
|
|
"Constitucionalista pos-pandemia",
|
|
month=7,
|
|
day=9,
|
|
start_date="2021-01-01",
|
|
end_date="2022-01-01",
|
|
)
|
|
# Independence Day
|
|
Independencia = Holiday(
|
|
"Independencia",
|
|
month=9,
|
|
day=7,
|
|
)
|
|
# Our Lady of Aparecida
|
|
Aparecida = Holiday(
|
|
"Nossa Senhora de Aparecida",
|
|
month=10,
|
|
day=12,
|
|
)
|
|
# All Souls' Day
|
|
Finados = Holiday(
|
|
"Dia dos Finados",
|
|
month=11,
|
|
day=2,
|
|
)
|
|
# Proclamation of the Republic
|
|
ProclamacaoRepublica = Holiday(
|
|
"Proclamacao da Republica",
|
|
month=11,
|
|
day=15,
|
|
)
|
|
# Day of Black Awareness
|
|
ConscienciaNegra = Holiday(
|
|
"Dia da Consciencia Negra",
|
|
month=11,
|
|
day=20,
|
|
start_date="2004-01-01",
|
|
end_date="2020-01-01",
|
|
)
|
|
# Day of Black Awareness is now a national holiday, starting 2024
|
|
ConscienciaNegraNacional = Holiday(
|
|
"Dia Nacional de Zumbi e da Consciencia Negra",
|
|
month=11,
|
|
day=20,
|
|
start_date="2024-01-01",
|
|
)
|
|
# Christmas Eve
|
|
VesperaNatal = Holiday(
|
|
"Vespera Natal",
|
|
month=12,
|
|
day=24,
|
|
)
|
|
# Christmas
|
|
Natal = Holiday(
|
|
"Natal",
|
|
month=12,
|
|
day=25,
|
|
)
|
|
# New Year's Eve
|
|
AnoNovo = Holiday(
|
|
"Ano Novo",
|
|
month=12,
|
|
day=31,
|
|
observance=previous_friday,
|
|
)
|
|
|
|
|
|
class BVMFExchangeCalendar(ExchangeCalendar):
|
|
"""
|
|
Exchange calendar for BM&F BOVESPA (BVMF).
|
|
|
|
Open Time: 10:00 AM, Brazil/Sao Paulo
|
|
Close Time:
|
|
- Until 2019-11-01: 5:00 PM, Brazil/Sao Paulo
|
|
- Starting from 2019-11-04: 6:00 PM, Brazil/Sao Paulo
|
|
|
|
Regularly-Observed Holidays:
|
|
- Universal Confraternization (New year's day, Jan 1)
|
|
- Sao Paulo City Anniversary (Jan 25)
|
|
- Carnaval Monday (48 days before Easter)
|
|
- Carnaval Tuesday (47 days before Easter)
|
|
- Ash Wednesday (short day / half day trading) (46 days before Easter)
|
|
- Passion of the Christ (Good Friday, 2 days before Easter)
|
|
- Corpus Christi (60 days after Easter)
|
|
- Tiradentes (April 21)
|
|
- Labor day (May 1)
|
|
- Constitutionalist Revolution (July 9 after 1997)
|
|
- Independence Day (September 7)
|
|
- Our Lady of Aparecida Feast (October 12)
|
|
- All Souls' Day (November 2)
|
|
- Proclamation of the Republic (November 15)
|
|
- Day of Black Awareness (November 20 after 2004)
|
|
- Christmas (December 24 and 25)
|
|
- Business day before New Year's Day
|
|
- December 29 if NYE falls on a Sunday
|
|
- December 30 if NYE falls on a Saturday
|
|
- December 31 if NYE falls on Monday-Friday
|
|
"""
|
|
|
|
name = "BVMF"
|
|
|
|
tz = ZoneInfo("America/Sao_Paulo")
|
|
|
|
regular_late_open = time(13)
|
|
|
|
open_times = ((None, time(10)),)
|
|
|
|
close_times = (
|
|
(None, time(17, 0)),
|
|
(pd.Timestamp("2019-11-04"), time(18, 0)),
|
|
)
|
|
|
|
@property
|
|
def adhoc_holidays(self):
|
|
# CopaDoMundo2014 Brazil hosted World Cup and played Croatia (and won 3-1!)
|
|
return [pd.Timestamp("2014-06-12")]
|
|
|
|
@property
|
|
def regular_holidays(self):
|
|
return HolidayCalendar(
|
|
[
|
|
ConfUniversal,
|
|
AniversarioSaoPaulo,
|
|
CarnavalSegunda,
|
|
CarnavalTerca,
|
|
SextaPaixao,
|
|
CorpusChristi,
|
|
Tiradentes,
|
|
DiaTrabalho,
|
|
Constitucionalista_prepandemic,
|
|
Constitucionalista_pospandemic,
|
|
Independencia,
|
|
Aparecida,
|
|
Finados,
|
|
ProclamacaoRepublica,
|
|
ConscienciaNegra,
|
|
ConscienciaNegraNacional,
|
|
VesperaNatal,
|
|
Natal,
|
|
AnoNovo,
|
|
]
|
|
)
|
|
|
|
@property
|
|
def special_opens(self):
|
|
return [
|
|
(
|
|
self.regular_late_open,
|
|
HolidayCalendar([QuartaCinzas]),
|
|
),
|
|
]
|