mtcli 2.6.0__tar.gz → 2.7.0.dev0__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 (69) hide show
  1. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/PKG-INFO +1 -1
  2. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/__init__.py +1 -1
  3. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/commands/bars.py +8 -4
  4. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/commands/conf.py +4 -1
  5. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/commands/logs.py +1 -1
  6. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/conf.py +104 -104
  7. mtcli-2.6.0/mtcli/models/model_bars.py → mtcli-2.7.0.dev0/mtcli/models/bars_model.py +4 -4
  8. mtcli-2.6.0/mtcli/models/model_rates.py → mtcli-2.7.0.dev0/mtcli/models/rates_model.py +1 -2
  9. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/mt.py +1 -1
  10. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugin.py +9 -9
  11. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/media_movel/command.py +5 -3
  12. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/range_medio/__init__.py +0 -1
  13. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/range_medio/command.py +7 -7
  14. mtcli-2.6.0/mtcli/plugins/range_medio/models/model_average_range.py → mtcli-2.7.0.dev0/mtcli/plugins/range_medio/models/average_range_model.py +5 -7
  15. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/volume_medio/command.py +6 -3
  16. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/volume_medio/models/model_average_volume.py +5 -5
  17. mtcli-2.7.0.dev0/mtcli/plugins/volume_medio/tests/__init__.py +0 -0
  18. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/pyproject.toml +1 -1
  19. mtcli-2.6.0/mtcli/plugins/range_medio/models/__init__.py +0 -1
  20. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/LICENSE +0 -0
  21. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/README.md +0 -0
  22. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/commands/__init__.py +0 -0
  23. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/conecta.py +0 -0
  24. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/data/__init__.py +0 -0
  25. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/data/base.py +0 -0
  26. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/data/csv.py +0 -0
  27. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/data/mt5.py +0 -0
  28. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/logger.py +0 -0
  29. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/models/__init__.py +0 -0
  30. /mtcli-2.6.0/mtcli/models/model_bar.py → /mtcli-2.7.0.dev0/mtcli/models/bar_model.py +0 -0
  31. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/models/model_chart.py +0 -0
  32. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/models/model_conf.py +0 -0
  33. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/models/model_consecutive_bars.py +0 -0
  34. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/models/model_signals.py +0 -0
  35. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/models/model_unconsecutive_bar.py +0 -0
  36. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/__init__.py +0 -0
  37. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/agressao/__init__.py +0 -0
  38. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/agressao/command.py +0 -0
  39. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/agressao/conf.py +0 -0
  40. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/agressao/models/__init__.py +0 -0
  41. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/agressao/models/model_agressao.py +0 -0
  42. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/agressao/views/__init__.py +0 -0
  43. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/agressao/views/view_agressao.py +0 -0
  44. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/media_movel/__init__.py +0 -0
  45. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/media_movel/conf.py +0 -0
  46. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/media_movel/models/__init__.py +0 -0
  47. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/media_movel/models/model_media_movel.py +0 -0
  48. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/media_movel/tests/__init__.py +0 -0
  49. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/media_movel/tests/test_mm.py +0 -0
  50. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/media_movel/tests/test_model_media_movel.py +0 -0
  51. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/range_medio/conf.py +0 -0
  52. {mtcli-2.6.0/mtcli/plugins/range_medio/tests → mtcli-2.7.0.dev0/mtcli/plugins/range_medio/models}/__init__.py +0 -0
  53. {mtcli-2.6.0/mtcli/plugins/volume_medio → mtcli-2.7.0.dev0/mtcli/plugins/range_medio}/tests/__init__.py +0 -0
  54. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/range_medio/tests/test_rm.py +0 -0
  55. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/volume_medio/__init__.py +0 -0
  56. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/volume_medio/conf.py +0 -0
  57. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/volume_medio/models/__init__.py +0 -0
  58. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/plugins/volume_medio/tests/test_vm.py +0 -0
  59. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/__init__.py +0 -0
  60. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_close.py +0 -0
  61. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_full.py +0 -0
  62. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_high.py +0 -0
  63. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_low.py +0 -0
  64. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_min.py +0 -0
  65. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_open.py +0 -0
  66. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_ranges.py +0 -0
  67. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_rates.py +0 -0
  68. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_vars.py +0 -0
  69. {mtcli-2.6.0 → mtcli-2.7.0.dev0}/mtcli/views/view_volumes.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mtcli
3
- Version: 2.6.0
3
+ Version: 2.7.0.dev0
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 +1 @@
1
- """Aplicativo de linha de comando para exibir graficos do MetaTrader 5 em texto."""
1
+ """Aplicativo de linha de comando para exibir graficos do MetaTrader 5 em texto."""
@@ -3,7 +3,8 @@
3
3
  import click
4
4
 
5
5
  from mtcli import conf
6
- from mtcli.models import model_bars, model_rates
6
+ from mtcli.models.rates_model import RatesModel
7
+ from mtcli.models.bars_model import BarsModel
7
8
  from mtcli.views import (
8
9
  view_close,
9
10
  view_full,
@@ -21,7 +22,10 @@ from mtcli.logger import setup_logger
21
22
  logger = setup_logger("mtcli") # Cria o logger
22
23
 
23
24
 
24
- @click.command()
25
+ @click.command(
26
+ "bars",
27
+ help="Mostra o gráfico de candles em texto para o ativo e período especificados.",
28
+ )
25
29
  @click.argument("symbol")
26
30
  @click.option(
27
31
  "--view",
@@ -88,8 +92,8 @@ def bars(symbol, view, period, count, date, numerator, show_date, volume):
88
92
  logger.info(
89
93
  f"Iniciando exibição do gráfico MT5: {symbol} view {view} no {period} data {date} numerador {numerator} data {show_date} volume {volume}."
90
94
  )
91
- rates = model_rates.RatesModel(symbol, period, count).lista
92
- bars = model_bars.BarsModel(rates, date).lista
95
+ rates = RatesModel(symbol, period, count).get_data()
96
+ bars = BarsModel(rates, date).get_bars()
93
97
  views = []
94
98
  if view in ["m", "ch", "hl"]: # máximas e mínimas
95
99
  views = view_min.MinView(
@@ -7,7 +7,10 @@ from mtcli.conecta import conectar, shutdown
7
7
  from mtcli.models.model_conf import ConfModel
8
8
 
9
9
 
10
- @click.command()
10
+ @click.command(
11
+ "conf",
12
+ help="Gerencia as configurações salvas no arquivo mtcli.ini (adicionar, editar, listar).",
13
+ )
11
14
  @click.option("--list", "list_", is_flag=True, help="Lista todas as configurações.")
12
15
  @click.option("--set", "set_", nargs=2, help="Define o valor de uma configuração.")
13
16
  @click.option("--get", help="Exibe o valor de uma configuração.")
@@ -5,7 +5,7 @@ import click
5
5
  from mtcli.logger import setup_logger
6
6
 
7
7
 
8
- @click.command("logs")
8
+ @click.command("logs", help="Exibe ou limpa os logs de execução do mtcli.")
9
9
  @click.option("--clear", is_flag=True, help="Limpa o arquivo de log.")
10
10
  @click.option("--tail", default=0, type=int, help="Mostra apenas as últimas N linhas.")
11
11
  @click.option("--grep", default="", help="Filtra o log por uma palavra-chave.")
@@ -1,104 +1,104 @@
1
- """Gerencia configurações registradas no mtcli.ini."""
2
-
3
- import os
4
- import click
5
- import MetaTrader5 as mt5
6
- from mtcli.conecta import conectar, shutdown
7
- from mtcli.models.model_conf import ConfModel
8
-
9
-
10
- config = ConfModel("mtcli.ini").carregar()
11
-
12
- section = "DEFAULT"
13
- symbol = os.getenv("SYMBOL", config[section].get("symbol", fallback="WIN$N"))
14
- digitos = int(os.getenv("DIGITOS", config[section].getint("digitos", fallback=2)))
15
- period = os.getenv("PERIOD", config[section].get("period", fallback="D1"))
16
- periodos = count = int(
17
- os.getenv("COUNT", config[section].getint("count", fallback=999))
18
- )
19
- view = os.getenv("VIEW", config[section].get("view", fallback="ch"))
20
- volume = os.getenv("VOLUME", config[section].get("volume", fallback="tick"))
21
- date = os.getenv("DATE", config[section].get("date", fallback=""))
22
-
23
- lateral = os.getenv("LATERAL", config[section].get("lateral", fallback="doji"))
24
- alta = os.getenv("ALTA", config[section].get("alta", fallback="verde"))
25
- baixa = os.getenv("BAIXA", config[section].get("baixa", fallback="vermelho"))
26
- rompimento_alta = os.getenv(
27
- "ROMPIMENTO_ALTA", config[section].get("rompimento_alta", fallback="c")
28
- )
29
- rompimento_baixa = os.getenv(
30
- "ROMPIMENTO_BAIXA", config[section].get("rompimento_baixa", fallback="v")
31
- )
32
- percentual_rompimento = int(
33
- os.getenv(
34
- "PERCENTUAL_ROMPIMENTO",
35
- config[section].getint("percentual_rompimento", fallback=50),
36
- )
37
- )
38
- percentual_doji = int(
39
- os.getenv("PERCENTUAL_DOJI", config[section].getint("percentual_doji", fallback=10))
40
- )
41
- up_bar = os.getenv("UP_BAR", config[section].get("up_bar", fallback="asc"))
42
- down_bar = os.getenv("DOWN_BAR", config[section].get("down_bar", fallback="desc"))
43
- inside_bar = os.getenv("INSIDE_BAR", config[section].get("inside_bar", fallback="ib"))
44
- outside_bar = os.getenv(
45
- "OUTSIDE_BAR", config[section].get("outside_bar", fallback="ob")
46
- )
47
- sombra_superior = os.getenv(
48
- "SOMBRA_SUPERIOR", config[section].get("sombra_superior", fallback="top")
49
- )
50
- sombra_inferior = os.getenv(
51
- "SOMBRA_INFERIOR", config[section].get("sombra_inferior", fallback="bottom")
52
- )
53
- data_source = dados = os.getenv("DADOS", config[section].get("dados", fallback="mt5"))
54
- csv_path = mt5_pasta = os.getenv(
55
- "MT5_PASTA", config[section].get("mt5_pasta", fallback="")
56
- )
57
-
58
-
59
- def get_data_source():
60
- from mtcli.data import CsvDataSource, MT5DataSource
61
-
62
- if data_source.lower() == "csv":
63
- return CsvDataSource()
64
- elif data_source.lower() == "mt5":
65
- return MT5DataSource()
66
- else:
67
- raise ValueError(f"Fonte de dados desconhecida: {data_source}")
68
-
69
-
70
- if not csv_path:
71
- conectar()
72
- terminal_info = mt5.terminal_info()
73
- if terminal_info is None:
74
- raise RuntimeError("Não foi possível obter as informações do terminal.")
75
-
76
- csv_path = terminal_info.data_path + "/MQL5/Files"
77
- shutdown()
78
-
79
- csv_path = csv_path.replace("\\", "/")
80
- csv_path += "/"
81
-
82
- timeframes = [
83
- "mn1",
84
- "w1",
85
- "d1",
86
- "h12",
87
- "h8",
88
- "h6",
89
- "h4",
90
- "h3",
91
- "h2",
92
- "h1",
93
- "m30",
94
- "m20",
95
- "m15",
96
- "m12",
97
- "m10",
98
- "m6",
99
- "m5",
100
- "m4",
101
- "m3",
102
- "m2",
103
- "m1",
104
- ]
1
+ """Gerencia configurações registradas no mtcli.ini."""
2
+
3
+ import os
4
+ import click
5
+ import MetaTrader5 as mt5
6
+ from mtcli.conecta import conectar, shutdown
7
+ from mtcli.models.model_conf import ConfModel
8
+
9
+
10
+ config = ConfModel("mtcli.ini").carregar()
11
+
12
+ section = "DEFAULT"
13
+ symbol = os.getenv("SYMBOL", config[section].get("symbol", fallback="WIN$N"))
14
+ digitos = int(os.getenv("DIGITOS", config[section].getint("digitos", fallback=2)))
15
+ period = os.getenv("PERIOD", config[section].get("period", fallback="D1"))
16
+ periodos = count = int(
17
+ os.getenv("COUNT", config[section].getint("count", fallback=999))
18
+ )
19
+ view = os.getenv("VIEW", config[section].get("view", fallback="ch"))
20
+ volume = os.getenv("VOLUME", config[section].get("volume", fallback="tick"))
21
+ date = os.getenv("DATE", config[section].get("date", fallback=""))
22
+
23
+ lateral = os.getenv("LATERAL", config[section].get("lateral", fallback="doji"))
24
+ alta = os.getenv("ALTA", config[section].get("alta", fallback="verde"))
25
+ baixa = os.getenv("BAIXA", config[section].get("baixa", fallback="vermelho"))
26
+ rompimento_alta = os.getenv(
27
+ "ROMPIMENTO_ALTA", config[section].get("rompimento_alta", fallback="c")
28
+ )
29
+ rompimento_baixa = os.getenv(
30
+ "ROMPIMENTO_BAIXA", config[section].get("rompimento_baixa", fallback="v")
31
+ )
32
+ percentual_rompimento = int(
33
+ os.getenv(
34
+ "PERCENTUAL_ROMPIMENTO",
35
+ config[section].getint("percentual_rompimento", fallback=50),
36
+ )
37
+ )
38
+ percentual_doji = int(
39
+ os.getenv("PERCENTUAL_DOJI", config[section].getint("percentual_doji", fallback=10))
40
+ )
41
+ up_bar = os.getenv("UP_BAR", config[section].get("up_bar", fallback="asc"))
42
+ down_bar = os.getenv("DOWN_BAR", config[section].get("down_bar", fallback="desc"))
43
+ inside_bar = os.getenv("INSIDE_BAR", config[section].get("inside_bar", fallback="ib"))
44
+ outside_bar = os.getenv(
45
+ "OUTSIDE_BAR", config[section].get("outside_bar", fallback="ob")
46
+ )
47
+ sombra_superior = os.getenv(
48
+ "SOMBRA_SUPERIOR", config[section].get("sombra_superior", fallback="top")
49
+ )
50
+ sombra_inferior = os.getenv(
51
+ "SOMBRA_INFERIOR", config[section].get("sombra_inferior", fallback="bottom")
52
+ )
53
+ data_source = dados = os.getenv("DADOS", config[section].get("dados", fallback="mt5"))
54
+ csv_path = mt5_pasta = os.getenv(
55
+ "MT5_PASTA", config[section].get("mt5_pasta", fallback="")
56
+ )
57
+
58
+
59
+ def get_data_source():
60
+ from mtcli.data import CsvDataSource, MT5DataSource
61
+
62
+ if data_source.lower() == "csv":
63
+ return CsvDataSource()
64
+ elif data_source.lower() == "mt5":
65
+ return MT5DataSource()
66
+ else:
67
+ raise ValueError(f"Fonte de dados desconhecida: {data_source}")
68
+
69
+
70
+ if not csv_path:
71
+ conectar()
72
+ terminal_info = mt5.terminal_info()
73
+ if terminal_info is None:
74
+ raise RuntimeError("Não foi possível obter as informações do terminal.")
75
+
76
+ csv_path = terminal_info.data_path + "/MQL5/Files"
77
+ shutdown()
78
+
79
+ csv_path = csv_path.replace("\\", "/")
80
+ csv_path += "/"
81
+
82
+ timeframes = [
83
+ "mn1",
84
+ "w1",
85
+ "d1",
86
+ "h12",
87
+ "h8",
88
+ "h6",
89
+ "h4",
90
+ "h3",
91
+ "h2",
92
+ "h1",
93
+ "m30",
94
+ "m20",
95
+ "m15",
96
+ "m12",
97
+ "m10",
98
+ "m6",
99
+ "m5",
100
+ "m4",
101
+ "m3",
102
+ "m2",
103
+ "m1",
104
+ ]
@@ -1,6 +1,6 @@
1
1
  """Módulo da classe model da lista de barras."""
2
2
 
3
- from mtcli.models import model_bar
3
+ from mtcli.models.bar_model import BarModel
4
4
 
5
5
 
6
6
  class BarsModel:
@@ -10,13 +10,13 @@ class BarsModel:
10
10
  """Model da lista de barras."""
11
11
  self.rates = rates
12
12
  self.date = date
13
- self.lista = self.__lista()
13
+ # self.lista = self.__lista()
14
14
 
15
- def __lista(self):
15
+ def get_bars(self):
16
16
  """Gera a lista das barras."""
17
17
  lista = []
18
18
  for rate in self.rates:
19
- bar = model_bar.BarModel(rate)
19
+ bar = BarModel(rate)
20
20
  if (
21
21
  self.date and str(bar.date) != self.date
22
22
  ): # filtra por data para intraday
@@ -17,9 +17,8 @@ class RatesModel:
17
17
  self.end = end
18
18
  self.limit = limit
19
19
  self.source = conf.get_data_source()
20
- self.lista = self.__get_data()
21
20
 
22
- def __get_data(self):
21
+ def get_data(self):
23
22
  """Obtém a lista das cotações com filtros opcionais."""
24
23
  data = self.source.get_data(self.symbol, self.period, self.count)
25
24
 
@@ -8,7 +8,7 @@ except ImportError:
8
8
  from importlib_metadata import entry_points # Para Python < 3.8
9
9
 
10
10
 
11
- @click.group()
11
+ @click.group(context_settings={"max_content_width": 120})
12
12
  @click.version_option(package_name="mtcli")
13
13
  def mt():
14
14
  """Exibe o grafico do MetaTrader 5 em texto."""
@@ -1,9 +1,9 @@
1
- from mtcli.commands.bars import bars
2
- from mtcli.commands.conf import conf
3
- from mtcli.commands.logs import logs
4
-
5
-
6
- def register(cli):
7
- cli.add_command(bars)
8
- cli.add_command(conf)
9
- cli.add_command(logs)
1
+ from mtcli.commands.bars import bars
2
+ from mtcli.commands.conf import conf
3
+ from mtcli.commands.logs import logs
4
+
5
+
6
+ def register(cli):
7
+ cli.add_command(bars)
8
+ cli.add_command(conf)
9
+ cli.add_command(logs)
@@ -5,7 +5,7 @@ from datetime import datetime
5
5
  import click
6
6
 
7
7
  from mtcli.logger import setup_logger
8
- from mtcli.models.model_rates import RatesModel
8
+ from mtcli.models.rates_model import RatesModel
9
9
 
10
10
  from . import conf
11
11
  from .models.model_media_movel import MediaMovelModel
@@ -13,7 +13,9 @@ from .models.model_media_movel import MediaMovelModel
13
13
  logger = setup_logger()
14
14
 
15
15
 
16
- @click.command()
16
+ @click.command(
17
+ "mm", help="Calcula a média móvel (SMA ou EMA) para o ativo e período especificado."
18
+ )
17
19
  @click.argument("symbol")
18
20
  @click.option(
19
21
  "--period",
@@ -56,7 +58,7 @@ def mm(symbol, period, periodos, tipo, limit, inicio, fim):
56
58
  f"Iniciando cálculo da média móvel: ativo {symbol} período {period} períodos {periodos} tipo {tipo} limite {limit}"
57
59
  )
58
60
 
59
- rates = RatesModel(symbol, period).lista
61
+ rates = RatesModel(symbol, period).get_data()
60
62
  closes = [r[4] for r in rates]
61
63
  datas = [r[0] for r in rates]
62
64
 
@@ -1,3 +1,2 @@
1
1
  from . import command, conf
2
2
  from .command import rm
3
- from .models import model_average_range
@@ -2,13 +2,14 @@
2
2
 
3
3
  import click
4
4
 
5
- from mtcli.models import model_rates
6
-
5
+ from mtcli.models.rates_model import RatesModel
7
6
  from . import conf
8
- from .models import model_average_range
7
+ from .models.average_range_model import AverageRangeModel
9
8
 
10
9
 
11
- @click.command()
10
+ @click.command(
11
+ "rm", help="Calcula o range médio de preços do ativo em um determinado período."
12
+ )
12
13
  @click.argument("symbol")
13
14
  @click.option(
14
15
  "--period",
@@ -22,9 +23,8 @@ from .models import model_average_range
22
23
  )
23
24
  def rm(symbol, period, periodos):
24
25
  """Calcula o range medio do ativo symbol."""
25
- rates = model_rates.RatesModel(symbol, period).lista
26
- rm = model_average_range.AverageRangeModel(rates, periodos)
27
- rm = rm.average()
26
+ rates = RatesModel(symbol, period).get_data()
27
+ rm = AverageRangeModel(rates, periodos).average()
28
28
  click.echo(rm)
29
29
 
30
30
 
@@ -1,7 +1,7 @@
1
1
  """Módulo da classe model para range médio."""
2
2
 
3
3
  from mtcli import conf
4
- from mtcli.models import model_bar
4
+ from mtcli.models.bar_model import BarModel
5
5
 
6
6
 
7
7
  class AverageRangeModel:
@@ -11,15 +11,13 @@ class AverageRangeModel:
11
11
  """Model do range médio."""
12
12
  self.rates = rates
13
13
  self.count = count
14
- self.list = self.__list()
14
+ self.ranges = self.get_ranges()
15
15
 
16
- # self.ar = self.__ar()
17
-
18
- def __list(self):
16
+ def get_ranges(self):
19
17
  """Lista de ranges."""
20
18
  lista = []
21
19
  for rate in self.rates:
22
- bar = model_bar.BarModel(rate)
20
+ bar = BarModel(rate)
23
21
  if bar.open == bar.high and bar.high == bar.low and bar.low == bar.close:
24
22
  continue # elimina doji de 4 preços
25
23
  lista.append(bar.high - bar.low)
@@ -27,5 +25,5 @@ class AverageRangeModel:
27
25
 
28
26
  def average(self):
29
27
  """Calcula o range médio."""
30
- ranges = self.list[-self.count :]
28
+ ranges = self.ranges[-self.count :]
31
29
  return round(sum(ranges) / len(ranges), conf.digitos)
@@ -2,13 +2,16 @@
2
2
 
3
3
  import click
4
4
 
5
- from mtcli.models import model_rates
5
+ from mtcli.models.rates_model import RatesModel
6
6
 
7
7
  from . import conf
8
8
  from .models import model_average_volume
9
9
 
10
10
 
11
- @click.command()
11
+ @click.command(
12
+ "vm",
13
+ help="Calcula o volume médio (em ticks ou financeiro) do ativo em determinado período.",
14
+ )
12
15
  @click.argument("symbol")
13
16
  @click.option(
14
17
  "--period",
@@ -29,7 +32,7 @@ from .models import model_average_volume
29
32
  )
30
33
  def vm(symbol, period, periodos, tipo):
31
34
  """Calcula o volume médio (tick ou real) do ativo symbol."""
32
- rates = model_rates.RatesModel(symbol, period).lista
35
+ rates = RatesModel(symbol, period).get_data()
33
36
  vm = model_average_volume.AverageVolumeModel(rates, periodos, tipo)
34
37
  vm = vm.average()
35
38
  click.echo(vm)
@@ -1,7 +1,7 @@
1
1
  """Módulo da classe model para volume médio."""
2
2
 
3
3
  from mtcli import conf
4
- from mtcli.models import model_bar
4
+ from mtcli.models.bar_model import BarModel
5
5
 
6
6
 
7
7
  class AverageVolumeModel:
@@ -12,13 +12,13 @@ class AverageVolumeModel:
12
12
  self.rates = rates
13
13
  self.count = count
14
14
  self.type = type
15
- self.list = self.__list()
15
+ self.volumes = self.__get_volumes()
16
16
 
17
- def __list(self):
17
+ def __get_volumes(self):
18
18
  """Lista dos volumes."""
19
19
  list = []
20
20
  for rate in self.rates:
21
- bar = model_bar.BarModel(rate)
21
+ bar = BarModel(rate)
22
22
  if self.type == "tick":
23
23
  list.append(bar.volume)
24
24
  if self.type == "real":
@@ -27,5 +27,5 @@ class AverageVolumeModel:
27
27
 
28
28
  def average(self):
29
29
  """Calcula o volume médio."""
30
- volumes = self.list[-self.count :]
30
+ volumes = self.volumes[-self.count :]
31
31
  return round(sum(volumes) / len(volumes), conf.digitos)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mtcli"
3
- version = "2.6.0"
3
+ version = "2.7.0.dev0"
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 +0,0 @@
1
- from . import model_average_range
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes