mtcli 3.2.0.dev0__tar.gz → 3.2.0.dev2__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.
Files changed (70) hide show
  1. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/PKG-INFO +1 -1
  2. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/commands/bars.py +118 -126
  3. mtcli-3.2.0.dev2/mtcli/conecta.py +41 -0
  4. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/data/mt5.py +18 -20
  5. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/mt5_context.py +3 -3
  6. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/pyproject.toml +1 -1
  7. mtcli-3.2.0.dev0/mtcli/conecta.py +0 -18
  8. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/LICENSE +0 -0
  9. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/README.md +0 -0
  10. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/__init__.py +0 -0
  11. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/commands/__init__.py +0 -0
  12. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/commands/conf.py +0 -0
  13. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/commands/logs.py +0 -0
  14. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/conf.py +0 -0
  15. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/data/__init__.py +0 -0
  16. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/data/base.py +0 -0
  17. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/data/csv.py +0 -0
  18. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/logger.py +0 -0
  19. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/models/__init__.py +0 -0
  20. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/models/bar_model.py +0 -0
  21. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/models/bars_model.py +0 -0
  22. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/models/chart_model.py +0 -0
  23. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/models/conf_model.py +0 -0
  24. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/models/consecutive_bars_model.py +0 -0
  25. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/models/rates_model.py +0 -0
  26. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/models/signals_model.py +0 -0
  27. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/models/unconsecutive_bar_model.py +0 -0
  28. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/mt.py +0 -0
  29. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugin.py +0 -0
  30. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/__init__.py +0 -0
  31. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/agressao/__init__.py +0 -0
  32. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/agressao/command.py +0 -0
  33. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/agressao/conf.py +0 -0
  34. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/agressao/models/__init__.py +0 -0
  35. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/agressao/models/model_agressao.py +0 -0
  36. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/agressao/views/__init__.py +0 -0
  37. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/agressao/views/view_agressao.py +0 -0
  38. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/media_movel/__init__.py +0 -0
  39. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/media_movel/command.py +0 -0
  40. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/media_movel/conf.py +0 -0
  41. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/media_movel/models/__init__.py +0 -0
  42. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/media_movel/models/model_media_movel.py +0 -0
  43. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/media_movel/tests/__init__.py +0 -0
  44. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/media_movel/tests/test_mm.py +0 -0
  45. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/media_movel/tests/test_model_media_movel.py +0 -0
  46. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/range_medio/__init__.py +0 -0
  47. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/range_medio/command.py +0 -0
  48. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/range_medio/conf.py +0 -0
  49. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/range_medio/models/__init__.py +0 -0
  50. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/range_medio/models/average_range_model.py +0 -0
  51. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/range_medio/tests/__init__.py +0 -0
  52. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/range_medio/tests/test_rm.py +0 -0
  53. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/volume_medio/__init__.py +0 -0
  54. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/volume_medio/command.py +0 -0
  55. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/volume_medio/conf.py +0 -0
  56. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/volume_medio/models/__init__.py +0 -0
  57. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/volume_medio/models/model_average_volume.py +0 -0
  58. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/volume_medio/tests/__init__.py +0 -0
  59. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/plugins/volume_medio/tests/test_vm.py +0 -0
  60. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/__init__.py +0 -0
  61. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/close_view.py +0 -0
  62. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/full_view.py +0 -0
  63. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/high_view.py +0 -0
  64. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/low_view.py +0 -0
  65. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/min_view.py +0 -0
  66. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/open_view.py +0 -0
  67. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/ranges_view.py +0 -0
  68. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/rates_view.py +0 -0
  69. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/vars_view.py +0 -0
  70. {mtcli-3.2.0.dev0 → mtcli-3.2.0.dev2}/mtcli/views/volumes_view.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mtcli
3
- Version: 3.2.0.dev0
3
+ Version: 3.2.0.dev2
4
4
  Summary: Aplicativo CLI para exibir gráficos do MetaTrader 5 em texto acessível ao leitor de telas
5
5
  License: GPL-3.0
6
6
  Keywords: MetaTrader 5,trading,CLI
@@ -1,126 +1,118 @@
1
- """Exibe o gráfico de barras."""
2
-
3
- import click
4
-
5
- from mtcli import conf
6
- from mtcli.models.rates_model import RatesModel
7
- from mtcli.models.bars_model import BarsModel
8
- from mtcli.views.full_view import FullView
9
- from mtcli.views.min_view import MinView
10
- from mtcli.views.ranges_view import RangesView
11
- from mtcli.views.volumes_view import VolumesView
12
- from mtcli.views.vars_view import VarsView
13
- from mtcli.views.rates_view import RatesView
14
- from mtcli.views.open_view import OpenView
15
- from mtcli.views.high_view import HighView
16
- from mtcli.views.low_view import LowView
17
- from mtcli.views.close_view import CloseView
18
- from mtcli.logger import setup_logger
19
-
20
-
21
- logger = setup_logger("mtcli") # Cria o logger
22
-
23
-
24
- @click.command(
25
- "bars",
26
- help="Mostra o gráfico de candles em texto para o ativo e período especificados.",
27
- )
28
- @click.argument("symbol")
29
- @click.option(
30
- "--view",
31
- "-v",
32
- type=click.Choice(
33
- [
34
- "ch",
35
- "m",
36
- "hl",
37
- "f",
38
- "full",
39
- "r",
40
- "range",
41
- "v",
42
- "volume",
43
- "va",
44
- "percentual",
45
- "oh",
46
- "ohlc",
47
- "o",
48
- "open",
49
- "h",
50
- "high",
51
- "l",
52
- "low",
53
- "c",
54
- "close",
55
- ],
56
- case_sensitive=False,
57
- ),
58
- default=conf.view,
59
- help="Formato de exibicao, default m. Opcoes: ch ou m - minima; f - completa; r - ranges; v - volumes; va - variações percentuais; oh - OHLC; o - aberturas; h - maximas; l - minimas; c - fechamentos",
60
- )
61
- @click.option(
62
- "--period",
63
- "-p",
64
- type=click.Choice(conf.timeframes, case_sensitive=False),
65
- default=conf.period,
66
- help="Tempo grafico, default D1.",
67
- )
68
- @click.option(
69
- "--count",
70
- "-c",
71
- type=int,
72
- default=conf.periodos,
73
- help="Quantidade de barras, default 20.",
74
- )
75
- @click.option(
76
- "--date", "-d", default=conf.date, help="Data para intraday, formato AAAA-MM-DD."
77
- )
78
- @click.option("--numerator", "-n", is_flag=True, help="Ativa a numeracao das barras.")
79
- @click.option("--show-date", "-sd", is_flag=True, help="Ativa a datacao das barras.")
80
- @click.option(
81
- "--volume",
82
- "-vo",
83
- type=click.Choice(["tick", "real"], case_sensitive=False),
84
- default=conf.volume,
85
- help="Tipo de volume, default tick.",
86
- )
87
- def bars(symbol, view, period, count, date, numerator, show_date, volume):
88
- """Exibe o grafico do MetaTrader 5."""
89
- period = period.lower()
90
- view = view.lower()
91
- logger.info(
92
- f"Iniciando exibição do gráfico MT5: {symbol} view {view} no {period} data {date} numerador {numerator} data {show_date} volume {volume}."
93
- )
94
- rates = RatesModel(symbol, period, count).get_data()
95
- bars = BarsModel(rates, date).get_bars()
96
- views = []
97
- if view in ["m", "ch", "hl"]: # máximas e mínimas
98
- views = MinView(bars, count, period, date, numerator, show_date).views()
99
- elif view in ["r", "range"]: # ranges
100
- views = RangesView(bars, count, period, date, numerator, show_date).views()
101
- elif view in ["oh", "ohlc"]: # OHLC
102
- views = RatesView(bars, count, period, date, numerator, show_date).views()
103
- elif view in ["va", "percentual"]: # variações percentuais
104
- views = VarsView(bars, count, period, date, numerator, show_date).views()
105
- elif view in ["o", "open"]: # abertura
106
- views = OpenView(bars, count, period, date, numerator, show_date).views()
107
- elif view in ["h", "high"]: # máximas
108
- views = HighView(bars, count, period, date, numerator, show_date).views()
109
- elif view in ["l", "low"]: # mínimas
110
- views = LowView(bars, count, period, date, numerator, show_date).views()
111
- elif view in ["c", "close"]: # fechamentos
112
- views = CloseView(bars, count, period, date, numerator, show_date).views()
113
- elif view in ["v", "volume"]: # volumes
114
- views = VolumesView(
115
- bars, count, period, date, numerator, show_date, volume
116
- ).views()
117
- else: # completo
118
- views = FullView(bars, count, period, date, numerator, show_date).views()
119
- if views:
120
- for view in views:
121
- click.echo(view)
122
- logger.info("Exibição do gráfico MT5 finalizada.")
123
-
124
-
125
- if __name__ == "__main__":
126
- bars()
1
+ """Exibe o gráfico de barras."""
2
+
3
+ import click
4
+
5
+ from mtcli import conf
6
+ from mtcli.models.rates_model import RatesModel
7
+ from mtcli.models.bars_model import BarsModel
8
+ from mtcli.views.full_view import FullView
9
+ from mtcli.views.min_view import MinView
10
+ from mtcli.views.ranges_view import RangesView
11
+ from mtcli.views.volumes_view import VolumesView
12
+ from mtcli.views.vars_view import VarsView
13
+ from mtcli.views.rates_view import RatesView
14
+ from mtcli.views.open_view import OpenView
15
+ from mtcli.views.high_view import HighView
16
+ from mtcli.views.low_view import LowView
17
+ from mtcli.views.close_view import CloseView
18
+
19
+
20
+ @click.command(
21
+ "bars",
22
+ help="Mostra o gráfico de candles em texto para o ativo e período especificados.",
23
+ )
24
+ @click.argument("symbol")
25
+ @click.option(
26
+ "--view",
27
+ "-v",
28
+ type=click.Choice(
29
+ [
30
+ "ch",
31
+ "m",
32
+ "hl",
33
+ "f",
34
+ "full",
35
+ "r",
36
+ "range",
37
+ "v",
38
+ "volume",
39
+ "va",
40
+ "percentual",
41
+ "oh",
42
+ "ohlc",
43
+ "o",
44
+ "open",
45
+ "h",
46
+ "high",
47
+ "l",
48
+ "low",
49
+ "c",
50
+ "close",
51
+ ],
52
+ case_sensitive=False,
53
+ ),
54
+ default=conf.view,
55
+ help="Formato de exibicao, default m. Opcoes: ch ou m - minima; f - completa; r - ranges; v - volumes; va - variações percentuais; oh - OHLC; o - aberturas; h - maximas; l - minimas; c - fechamentos",
56
+ )
57
+ @click.option(
58
+ "--period",
59
+ "-p",
60
+ type=click.Choice(conf.timeframes, case_sensitive=False),
61
+ default=conf.period,
62
+ help="Tempo grafico, default D1.",
63
+ )
64
+ @click.option(
65
+ "--count",
66
+ "-c",
67
+ type=int,
68
+ default=conf.periodos,
69
+ help="Quantidade de barras, default 20.",
70
+ )
71
+ @click.option(
72
+ "--date", "-d", default=conf.date, help="Data para intraday, formato AAAA-MM-DD."
73
+ )
74
+ @click.option("--numerator", "-n", is_flag=True, help="Ativa a numeracao das barras.")
75
+ @click.option("--show-date", "-sd", is_flag=True, help="Ativa a datacao das barras.")
76
+ @click.option(
77
+ "--volume",
78
+ "-vo",
79
+ type=click.Choice(["tick", "real"], case_sensitive=False),
80
+ default=conf.volume,
81
+ help="Tipo de volume, default tick.",
82
+ )
83
+ def bars(symbol, view, period, count, date, numerator, show_date, volume):
84
+ """Exibe o grafico do MetaTrader 5."""
85
+ period = period.lower()
86
+ view = view.lower()
87
+ rates = RatesModel(symbol, period, count).get_data()
88
+ bars = BarsModel(rates, date).get_bars()
89
+ views = []
90
+ if view in ["m", "ch", "hl"]: # máximas e mínimas
91
+ views = MinView(bars, count, period, date, numerator, show_date).views()
92
+ elif view in ["r", "range"]: # ranges
93
+ views = RangesView(bars, count, period, date, numerator, show_date).views()
94
+ elif view in ["oh", "ohlc"]: # OHLC
95
+ views = RatesView(bars, count, period, date, numerator, show_date).views()
96
+ elif view in ["va", "percentual"]: # variações percentuais
97
+ views = VarsView(bars, count, period, date, numerator, show_date).views()
98
+ elif view in ["o", "open"]: # abertura
99
+ views = OpenView(bars, count, period, date, numerator, show_date).views()
100
+ elif view in ["h", "high"]: # máximas
101
+ views = HighView(bars, count, period, date, numerator, show_date).views()
102
+ elif view in ["l", "low"]: # mínimas
103
+ views = LowView(bars, count, period, date, numerator, show_date).views()
104
+ elif view in ["c", "close"]: # fechamentos
105
+ views = CloseView(bars, count, period, date, numerator, show_date).views()
106
+ elif view in ["v", "volume"]: # volumes
107
+ views = VolumesView(
108
+ bars, count, period, date, numerator, show_date, volume
109
+ ).views()
110
+ else: # completo
111
+ views = FullView(bars, count, period, date, numerator, show_date).views()
112
+ if views:
113
+ for view in views:
114
+ click.echo(view)
115
+
116
+
117
+ if __name__ == "__main__":
118
+ bars()
@@ -0,0 +1,41 @@
1
+ """
2
+ Gerencia a conexão direta com o terminal MetaTrader 5.
3
+ Usado internamente pelo contexto mt5_conexao().
4
+ """
5
+
6
+ import MetaTrader5 as mt5
7
+ from mtcli.logger import setup_logger
8
+
9
+ log = setup_logger()
10
+
11
+
12
+ def conectar() -> bool:
13
+ """
14
+ Inicializa a conexão com o MetaTrader 5.
15
+
16
+ Retorna:
17
+ bool: True se conectado com sucesso, False caso contrário.
18
+
19
+ Levanta:
20
+ ConnectionError: se a inicialização do MT5 falhar.
21
+ """
22
+ log.debug("Tentando inicializar conexao com MetaTrader 5...")
23
+
24
+ if not mt5.initialize():
25
+ erro = mt5.last_error()
26
+ log.error(f"Erro ao conectar ao MetaTrader 5: {erro}")
27
+ raise ConnectionError(f"Falha ao conectar ao MetaTrader 5: {erro}")
28
+
29
+ log.info("Conexao com MetaTrader 5 estabelecida com sucesso.")
30
+ return True
31
+
32
+
33
+ def shutdown():
34
+ """
35
+ Encerra a conexão com o MetaTrader 5 de forma segura.
36
+ """
37
+ try:
38
+ mt5.shutdown()
39
+ log.debug("Conexao com MetaTrader 5 encerrada.")
40
+ except Exception as e:
41
+ log.error(f"Erro ao encerrar conexao com MetaTrader 5: {e}")
@@ -5,11 +5,11 @@ from datetime import datetime
5
5
  import MetaTrader5 as mt5
6
6
 
7
7
  from mtcli.logger import setup_logger
8
- from mtcli.conecta import conectar, shutdown
8
+ from mtcli.mt5_context import mt5_conexao
9
9
 
10
10
  from .base import DataSourceBase
11
11
 
12
- logger = setup_logger()
12
+ log = setup_logger()
13
13
 
14
14
 
15
15
  class MT5DataSource(DataSourceBase):
@@ -18,8 +18,8 @@ class MT5DataSource(DataSourceBase):
18
18
  def get_data(self, symbol, period, count=100):
19
19
  """Retorna uma lista de lista de cotações do MetaTrader."""
20
20
  period = period.upper()
21
- logger.info(
22
- f"Iniciando coleta de dados via API MT5: {symbol} no período {period}."
21
+ log.info(
22
+ f"Iniciando coleta de dados via API MT5: {symbol} no timeframe {period}"
23
23
  )
24
24
  tf_map = {
25
25
  "M1": mt5.TIMEFRAME_M1,
@@ -46,12 +46,9 @@ class MT5DataSource(DataSourceBase):
46
46
  }
47
47
 
48
48
  if period.upper() not in tf_map:
49
- logger.error(f"Timeframe inválido: {period}.")
49
+ log.error(f"Timeframe inválido: {period}.")
50
50
  raise ValueError(f"Timeframe '{period}' inválido.")
51
51
 
52
- conectar()
53
-
54
- # Verifica corretoras B3 e aplica tratamento a symbol
55
52
  corretoras_b3 = [
56
53
  "clear",
57
54
  "xp",
@@ -61,21 +58,22 @@ class MT5DataSource(DataSourceBase):
61
58
  "btg",
62
59
  "toro",
63
60
  ]
64
- for corretora in corretoras_b3:
65
- symbol = (
66
- symbol.upper()
67
- if corretora in mt5.account_info().company.lower()
68
- else symbol
61
+
62
+ with mt5_conexao():
63
+ for corretora in corretoras_b3:
64
+ symbol = (
65
+ symbol.upper()
66
+ if corretora in mt5.account_info().company.lower()
67
+ else symbol
68
+ )
69
+ log.info(
70
+ f"Finalizada verificacao da corretora para tratar symbol: {symbol}."
69
71
  )
70
- logger.info(
71
- f"Finalizada verificação da corretora para tratar symbol: {symbol}."
72
- )
73
72
 
74
- rates = mt5.copy_rates_from_pos(symbol, tf_map[period], 0, count)
75
- shutdown()
73
+ rates = mt5.copy_rates_from_pos(symbol, tf_map[period], 0, count)
76
74
 
77
75
  if rates is None:
78
- logger.warning("Nenum dado retornado da API MT5.")
76
+ log.warning("Nenum dado retornado da API MT5.")
79
77
  raise ValueError("Nenhum dado retornado da API MT5.")
80
78
 
81
79
  result = []
@@ -95,5 +93,5 @@ class MT5DataSource(DataSourceBase):
95
93
  ]
96
94
  )
97
95
 
98
- logger.info("Coleta de dados via API MT5 finalizada.")
96
+ log.info("Coleta de dados via API MT5 finalizada.")
99
97
  return result
@@ -19,7 +19,7 @@ def mt5_conexao():
19
19
  - Loga falhas e garante fechamento seguro.
20
20
  """
21
21
  try:
22
- log.debug("Inicializando conexão com MetaTrader 5...")
22
+ log.debug("Inicializando conexao com MetaTrader 5...")
23
23
  conectar()
24
24
  yield
25
25
  except Exception as e:
@@ -28,6 +28,6 @@ def mt5_conexao():
28
28
  finally:
29
29
  try:
30
30
  shutdown()
31
- log.debug("Conexão com MetaTrader 5 encerrada.")
31
+ log.debug("Conexao com MetaTrader 5 encerrada.")
32
32
  except Exception as e:
33
- log.error(f"Erro ao encerrar conexão MT5: {e}")
33
+ log.error(f"Erro ao encerrar conexao MT5: {e}")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mtcli"
3
- version = "3.2.0-dev0"
3
+ version = "3.2.0-dev2"
4
4
  description = "Aplicativo CLI para exibir gráficos do MetaTrader 5 em texto acessível ao leitor de telas"
5
5
  authors = [
6
6
  {name = "Valmir França da Silva",email = "vfranca3@gmail.com"}
@@ -1,18 +0,0 @@
1
- """Módulo de conexão com o MetaTrader 5."""
2
-
3
- import MetaTrader5 as mt5
4
- from mtcli.logger import setup_logger
5
-
6
- logger = setup_logger()
7
-
8
-
9
- def conectar():
10
- if not mt5.initialize():
11
- click.echo(f"❌ Erro ao conectar ao MT5: {mt5.last_error()}")
12
- logger.error(f"Erro ao conectar ao MT5: {mt5.last_error()}")
13
- exit()
14
- return True
15
-
16
-
17
- def shutdown():
18
- mt5.shutdown()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes