mtcli 3.8.0.dev16__tar.gz → 3.8.0.dev17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/PKG-INFO +1 -1
- mtcli-3.8.0.dev17/mtcli/utils/time.py +65 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/pyproject.toml +1 -1
- mtcli-3.8.0.dev16/mtcli/utils/time.py +0 -16
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/LICENSE +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/README.md +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/__main__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/cli.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/cli_dev.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/backfill.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/bars.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/conf.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/doctor.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands/ticks.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands_dev/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/commands_dev/migrate.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/conecta.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/conf.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/config_registre.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/data/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/data/base.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/data/csv.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/data/mt5.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/database.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/domain/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/domain/timeframe.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/logger.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/backfill_engine.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_bus.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_cache.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_engine.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_repository.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/tick_writer.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/marketdata/trade_tick_filter.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/001_initial_schema.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/002_ticks_time_msc.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/003_optimize_ticks_without_rowid.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/004_ticks_pk_time_msc.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/005_tick_price_compression.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/006_add_index_ticks_symbol_time.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/007_deduplicate_ticks_and_add_unique_index.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/008_fix_ticks_unique_index.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/009_keep_only_trade_ticks.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/__main__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/runner.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/bar_model.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/bars_model.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/chart_model.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/conf_model.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/consecutive_bars_model.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/rates_model.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/signals_model.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/models/unconsecutive_bar_model.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/mt5_context.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugin.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugin_loader.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugin_manager.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/exemplo.py-dist +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/cli.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/conf.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/models/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/models/model_media_movel.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/tests/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/tests/test_mm.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/tests/test_model_media_movel.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/cli.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/conf.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/models/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/models/average_range_model.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/tests/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/tests/test_rm.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/cli.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/conf.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/models/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/models/model_average_volume.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/tests/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/tests/test_vm.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/services/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/services/maintenance_service.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/services/tick_service.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/utils/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/utils/pidfile.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/__init__.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/close_view.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/full_view.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/high_view.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/low_view.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/min_view.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/open_view.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/ranges_view.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/rates_view.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/vars_view.py +0 -0
- {mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/views/volumes_view.py +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Utilitários de conversão de tempo para o mtcli.
|
|
3
|
+
|
|
4
|
+
Este módulo fornece funções para:
|
|
5
|
+
- Obter o horário atual em UTC
|
|
6
|
+
- Converter datas de UTC para o timezone da B3 (Brasil)
|
|
7
|
+
- Converter datas da B3 para UTC
|
|
8
|
+
|
|
9
|
+
Todas as funções trabalham com objetos datetime timezone-aware.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from datetime import datetime
|
|
13
|
+
from zoneinfo import ZoneInfo
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Timezones padrão
|
|
17
|
+
UTC = ZoneInfo("UTC")
|
|
18
|
+
B3_TZ = ZoneInfo("America/Sao_Paulo")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def now_utc():
|
|
22
|
+
"""
|
|
23
|
+
Retorna o horário atual em UTC.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
datetime: Data/hora atual com timezone UTC (aware).
|
|
27
|
+
"""
|
|
28
|
+
return datetime.now(tz=UTC)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def utc_to_b3(dt):
|
|
32
|
+
"""
|
|
33
|
+
Converte um datetime em UTC para o timezone da B3.
|
|
34
|
+
|
|
35
|
+
Caso o datetime seja naive (sem timezone), assume-se que ele já está em UTC.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
dt (datetime): Data/hora em UTC (aware ou naive).
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
datetime: Data/hora convertida para o timezone da B3.
|
|
42
|
+
"""
|
|
43
|
+
if dt.tzinfo is None:
|
|
44
|
+
dt = dt.replace(tzinfo=UTC)
|
|
45
|
+
|
|
46
|
+
return dt.astimezone(B3_TZ)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def b3_to_utc(dt):
|
|
50
|
+
"""
|
|
51
|
+
Converte um datetime do timezone da B3 para UTC.
|
|
52
|
+
|
|
53
|
+
Caso o datetime seja naive (sem timezone), assume-se que ele já está
|
|
54
|
+
no horário da B3 (America/Sao_Paulo).
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
dt (datetime): Data/hora no timezone da B3 (aware ou naive).
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
datetime: Data/hora convertida para UTC.
|
|
61
|
+
"""
|
|
62
|
+
if dt.tzinfo is None:
|
|
63
|
+
dt = dt.replace(tzinfo=B3_TZ)
|
|
64
|
+
|
|
65
|
+
return dt.astimezone(UTC)
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
from datetime import datetime
|
|
2
|
-
from zoneinfo import ZoneInfo
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
UTC = ZoneInfo("UTC")
|
|
6
|
-
B3_TZ = ZoneInfo("America/Sao_Paulo")
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def now_utc():
|
|
10
|
-
return datetime.now(tz=UTC)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def utc_to_b3(dt):
|
|
14
|
-
if dt.tzinfo is None:
|
|
15
|
-
dt = dt.replace(tzinfo=UTC)
|
|
16
|
-
return dt.astimezone(B3_TZ)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/migrations/003_optimize_ticks_without_rowid.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/models/model_media_movel.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/media_movel/tests/test_model_media_movel.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/range_medio/models/average_range_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mtcli-3.8.0.dev16 → mtcli-3.8.0.dev17}/mtcli/plugins/volume_medio/models/model_average_volume.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|