Files
MoFin/venv/lib/python3.12/site-packages/exchange_calendars/exchange_calendar_bvmf.py
T
知微 fa45d8aa5f fix: 小果地址统一node122(兼容LAN+EasyTier)
- 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,直连正常
2026-06-30 02:56:35 +08:00

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]),
),
]