mtcli 3.0.0.dev1__tar.gz → 3.1.0__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 (68) hide show
  1. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/PKG-INFO +1 -1
  2. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/commands/bars.py +126 -126
  3. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/commands/conf.py +50 -52
  4. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/conf.py +1 -4
  5. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/logger.py +1 -1
  6. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/models/bar_model.py +105 -105
  7. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/models/bars_model.py +25 -25
  8. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/models/chart_model.py +155 -155
  9. mtcli-3.0.0.dev1/mtcli/models/model_conf.py → mtcli-3.1.0/mtcli/models/conf_model.py +33 -33
  10. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/models/consecutive_bars_model.py +77 -77
  11. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/models/rates_model.py +41 -41
  12. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/models/signals_model.py +102 -102
  13. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/models/unconsecutive_bar_model.py +67 -67
  14. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/media_movel/command.py +99 -99
  15. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/range_medio/__init__.py +2 -2
  16. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/range_medio/command.py +32 -32
  17. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/range_medio/models/average_range_model.py +29 -29
  18. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/volume_medio/command.py +42 -42
  19. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/volume_medio/models/model_average_volume.py +31 -31
  20. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/close_view.py +37 -37
  21. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/full_view.py +65 -65
  22. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/high_view.py +37 -37
  23. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/low_view.py +37 -37
  24. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/min_view.py +42 -42
  25. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/open_view.py +37 -37
  26. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/ranges_view.py +43 -43
  27. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/rates_view.py +41 -41
  28. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/vars_view.py +53 -53
  29. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/volumes_view.py +52 -52
  30. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/pyproject.toml +1 -1
  31. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/LICENSE +0 -0
  32. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/README.md +0 -0
  33. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/__init__.py +0 -0
  34. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/commands/__init__.py +0 -0
  35. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/commands/logs.py +0 -0
  36. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/conecta.py +0 -0
  37. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/data/__init__.py +0 -0
  38. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/data/base.py +0 -0
  39. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/data/csv.py +0 -0
  40. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/data/mt5.py +0 -0
  41. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/models/__init__.py +0 -0
  42. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/mt.py +0 -0
  43. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugin.py +0 -0
  44. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/__init__.py +0 -0
  45. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/agressao/__init__.py +0 -0
  46. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/agressao/command.py +0 -0
  47. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/agressao/conf.py +0 -0
  48. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/agressao/models/__init__.py +0 -0
  49. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/agressao/models/model_agressao.py +0 -0
  50. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/agressao/views/__init__.py +0 -0
  51. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/agressao/views/view_agressao.py +0 -0
  52. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/media_movel/__init__.py +0 -0
  53. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/media_movel/conf.py +0 -0
  54. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/media_movel/models/__init__.py +0 -0
  55. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/media_movel/models/model_media_movel.py +0 -0
  56. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/media_movel/tests/__init__.py +0 -0
  57. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/media_movel/tests/test_mm.py +0 -0
  58. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/media_movel/tests/test_model_media_movel.py +0 -0
  59. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/range_medio/conf.py +0 -0
  60. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/range_medio/models/__init__.py +0 -0
  61. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/range_medio/tests/__init__.py +0 -0
  62. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/range_medio/tests/test_rm.py +0 -0
  63. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/volume_medio/__init__.py +0 -0
  64. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/volume_medio/conf.py +0 -0
  65. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/volume_medio/models/__init__.py +0 -0
  66. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/volume_medio/tests/__init__.py +0 -0
  67. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/plugins/volume_medio/tests/test_vm.py +0 -0
  68. {mtcli-3.0.0.dev1 → mtcli-3.1.0}/mtcli/views/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mtcli
3
- Version: 3.0.0.dev1
3
+ Version: 3.1.0
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,126 @@
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
+ 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,52 +1,50 @@
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
- @click.command(
11
- "conf",
12
- help="Gerencia as configurações salvas no arquivo mtcli.ini (adicionar, editar, listar).",
13
- )
14
- @click.option("--list", "list_", is_flag=True, help="Lista todas as configurações.")
15
- @click.option("--set", "set_", nargs=2, help="Define o valor de uma configuração.")
16
- @click.option("--get", help="Exibe o valor de uma configuração.")
17
- @click.option("--reset", is_flag=True, help="Redefine as configurações padrão.")
18
- def conf(list_, set_, get, reset):
19
- """Gerencia configurações registradas no mtcli.ini."""
20
- conf = ConfModel("mtcli.ini")
21
- config = conf.carregar()
22
-
23
- if list_:
24
- for key in config["DEFAULT"]:
25
- click.echo(f"{key} = {config['DEFAULT'][key]}")
26
-
27
- elif set_:
28
- chave, valor = set_
29
- config["DEFAULT"][chave] = valor
30
- conf.salvar(config)
31
- click.echo(f"Configuração '{chave}' definida como '{valor}'.")
32
-
33
- elif get:
34
- valor = config["DEFAULT"].get(get)
35
- if valor is not None:
36
- click.echo(f"{get} = {valor}")
37
- else:
38
- click.echo(f"Configuração '{get}' não encontrada.")
39
-
40
- elif reset:
41
- config["DEFAULT"].clear()
42
- conf.salvar(config)
43
- click.echo("Configurações redefinidas.")
44
-
45
- else:
46
- click.echo(
47
- "Nenhuma opção fornecida. Use --help para ver as opções disponíveis."
48
- )
49
-
50
-
51
- if __name__ == "__main__":
52
- conf()
1
+ """Gerencia configurações registradas no mtcli.ini."""
2
+
3
+ import os
4
+ import click
5
+ from mtcli.models.conf_model import ConfModel
6
+
7
+
8
+ @click.command(
9
+ "conf",
10
+ help="Gerencia as configurações salvas no arquivo mtcli.ini (adicionar, editar, listar).",
11
+ )
12
+ @click.option("--list", "list_", is_flag=True, help="Lista todas as configurações.")
13
+ @click.option("--set", "set_", nargs=2, help="Define o valor de uma configuração.")
14
+ @click.option("--get", help="Exibe o valor de uma configuração.")
15
+ @click.option("--reset", is_flag=True, help="Redefine as configurações padrão.")
16
+ def conf(list_, set_, get, reset):
17
+ """Gerencia configurações registradas no mtcli.ini."""
18
+ conf = ConfModel("mtcli.ini")
19
+ config = conf.carregar()
20
+
21
+ if list_:
22
+ for key in config["DEFAULT"]:
23
+ click.echo(f"{key} = {config['DEFAULT'][key]}")
24
+
25
+ elif set_:
26
+ chave, valor = set_
27
+ config["DEFAULT"][chave] = valor
28
+ conf.salvar(config)
29
+ click.echo(f"Configuração '{chave}' definida como '{valor}'.")
30
+
31
+ elif get:
32
+ valor = config["DEFAULT"].get(get)
33
+ if valor is not None:
34
+ click.echo(f"{get} = {valor}")
35
+ else:
36
+ click.echo(f"Configuração '{get}' não encontrada.")
37
+
38
+ elif reset:
39
+ config["DEFAULT"].clear()
40
+ conf.salvar(config)
41
+ click.echo("Configurações redefinidas.")
42
+
43
+ else:
44
+ click.echo(
45
+ "Nenhuma opção fornecida. Use --help para ver as opções disponíveis."
46
+ )
47
+
48
+
49
+ if __name__ == "__main__":
50
+ conf()
@@ -1,10 +1,7 @@
1
- """Gerencia configurações registradas no mtcli.ini."""
2
-
3
1
  import os
4
- import click
5
2
  import MetaTrader5 as mt5
6
3
  from mtcli.conecta import conectar, shutdown
7
- from mtcli.models.model_conf import ConfModel
4
+ from mtcli.models.conf_model import ConfModel
8
5
 
9
6
 
10
7
  config = ConfModel("mtcli.ini").carregar()
@@ -24,6 +24,6 @@ def setup_logger(name="mtcli"):
24
24
  logger.setLevel(logging.DEBUG)
25
25
  if not logger.handlers:
26
26
  logger.addHandler(handler)
27
- logger.propagate = False
27
+ logger.propagate = True
28
28
 
29
29
  return logger
@@ -1,105 +1,105 @@
1
- """Módulo da classe model da barra."""
2
-
3
- from datetime import datetime
4
-
5
- from mtcli import conf
6
-
7
-
8
- class BarModel:
9
- """Classe do model da barra."""
10
-
11
- def __init__(self, rate):
12
- """Model da barra."""
13
- self.datetime = rate[0]
14
- self.date = self.__get_date()
15
- self.time = self.__get_time()
16
- self.open = float(rate[1])
17
- self.high = float(rate[2])
18
- self.low = float(rate[3])
19
- self.close = float(rate[4])
20
- self.volume = int(rate[5])
21
- self.volume_real = int(rate[6])
22
- self.range = self.__get_range()
23
- self.body = self.__get_body()
24
- self.top = self.__get_top()
25
- self.bottom = self.__get_bottom()
26
- self.body_range = self.__get_body_range()
27
- self.trend = self.__get_trend()
28
- self.medium_point = self.__get_medium_point()
29
-
30
- def __get_date(self):
31
- """Obtem a data da barra no formato YYYY-MM-DD."""
32
- data = datetime.strptime(self.datetime, "%Y.%m.%d %H:%M:%S")
33
- return data.date()
34
-
35
- def __get_time(self):
36
- """Obtem o horário da barra no formato HH:MM:SS."""
37
- hora = datetime.strptime(self.datetime, "%Y.%m.%d %H:%M:%S")
38
- hora = hora.time()
39
- return hora.strftime("%H:%M")
40
-
41
- def __get_range(self):
42
- """Obtem o range da barra."""
43
- return self.high - self.low
44
-
45
- def __get_body(self):
46
- """Calcula o range relativo do corpo da barra em porcentagem."""
47
- if self.range == 0:
48
- return 0
49
-
50
- return round((self.close - self.open) / self.range * 100)
51
-
52
- def __get_top(self):
53
- """Calcula o range relativo da sombra superior da barra em porcentagem."""
54
- high = self.high
55
- open = self.open
56
- close = self.close
57
- range = self.range
58
-
59
- if close >= open:
60
- top = high - close
61
- else:
62
- top = high - open
63
-
64
- if range == 0:
65
- return 0
66
-
67
- return round(top / range * 100)
68
-
69
- def __get_bottom(self):
70
- """Obtem o range relativo da sombra inferior da barra em porcentagem."""
71
- low = self.low
72
- open = self.open
73
- close = self.close
74
- range = self.range
75
-
76
- if close >= open:
77
- bottom = open - low
78
- else:
79
- bottom = close - low
80
-
81
- if range == 0:
82
- return 0
83
-
84
- return round(bottom / range * 100)
85
-
86
- def __get_body_range(self):
87
- """Calcula o range do corpo da barra."""
88
- return abs(self.close - self.open)
89
-
90
- def __get_trend(self):
91
- """Obtem a tendência da barra."""
92
- b = self.body
93
-
94
- if b > 0:
95
- trend = conf.alta
96
- elif b < 0:
97
- trend = conf.baixa
98
- else:
99
- trend = conf.lateral
100
-
101
- return trend
102
-
103
- def __get_medium_point(self):
104
- """Obtem o ponto médio da barra."""
105
- return round(self.low + self.range / 2, conf.digitos)
1
+ """Módulo da classe model da barra."""
2
+
3
+ from datetime import datetime
4
+
5
+ from mtcli import conf
6
+
7
+
8
+ class BarModel:
9
+ """Classe do model da barra."""
10
+
11
+ def __init__(self, rate):
12
+ """Model da barra."""
13
+ self.datetime = rate[0]
14
+ self.date = self.__get_date()
15
+ self.time = self.__get_time()
16
+ self.open = float(rate[1])
17
+ self.high = float(rate[2])
18
+ self.low = float(rate[3])
19
+ self.close = float(rate[4])
20
+ self.volume = int(rate[5])
21
+ self.volume_real = int(rate[6])
22
+ self.range = self.__get_range()
23
+ self.body = self.__get_body()
24
+ self.top = self.__get_top()
25
+ self.bottom = self.__get_bottom()
26
+ self.body_range = self.__get_body_range()
27
+ self.trend = self.__get_trend()
28
+ self.medium_point = self.__get_medium_point()
29
+
30
+ def __get_date(self):
31
+ """Obtem a data da barra no formato YYYY-MM-DD."""
32
+ data = datetime.strptime(self.datetime, "%Y.%m.%d %H:%M:%S")
33
+ return data.date()
34
+
35
+ def __get_time(self):
36
+ """Obtem o horário da barra no formato HH:MM:SS."""
37
+ hora = datetime.strptime(self.datetime, "%Y.%m.%d %H:%M:%S")
38
+ hora = hora.time()
39
+ return hora.strftime("%H:%M")
40
+
41
+ def __get_range(self):
42
+ """Obtem o range da barra."""
43
+ return self.high - self.low
44
+
45
+ def __get_body(self):
46
+ """Calcula o range relativo do corpo da barra em porcentagem."""
47
+ if self.range == 0:
48
+ return 0
49
+
50
+ return round((self.close - self.open) / self.range * 100)
51
+
52
+ def __get_top(self):
53
+ """Calcula o range relativo da sombra superior da barra em porcentagem."""
54
+ high = self.high
55
+ open = self.open
56
+ close = self.close
57
+ range = self.range
58
+
59
+ if close >= open:
60
+ top = high - close
61
+ else:
62
+ top = high - open
63
+
64
+ if range == 0:
65
+ return 0
66
+
67
+ return round(top / range * 100)
68
+
69
+ def __get_bottom(self):
70
+ """Obtem o range relativo da sombra inferior da barra em porcentagem."""
71
+ low = self.low
72
+ open = self.open
73
+ close = self.close
74
+ range = self.range
75
+
76
+ if close >= open:
77
+ bottom = open - low
78
+ else:
79
+ bottom = close - low
80
+
81
+ if range == 0:
82
+ return 0
83
+
84
+ return round(bottom / range * 100)
85
+
86
+ def __get_body_range(self):
87
+ """Calcula o range do corpo da barra."""
88
+ return abs(self.close - self.open)
89
+
90
+ def __get_trend(self):
91
+ """Obtem a tendência da barra."""
92
+ b = self.body
93
+
94
+ if b > 0:
95
+ trend = conf.alta
96
+ elif b < 0:
97
+ trend = conf.baixa
98
+ else:
99
+ trend = conf.lateral
100
+
101
+ return trend
102
+
103
+ def __get_medium_point(self):
104
+ """Obtem o ponto médio da barra."""
105
+ return round(self.low + self.range / 2, conf.digitos)
@@ -1,25 +1,25 @@
1
- """Módulo da classe model da lista de barras."""
2
-
3
- from mtcli.models.bar_model import BarModel
4
-
5
-
6
- class BarsModel:
7
- """Classe model da lista de barras."""
8
-
9
- def __init__(self, rates, date=""):
10
- """Model da lista de barras."""
11
- self.rates = rates
12
- self.date = date
13
- # self.lista = self.__lista()
14
-
15
- def get_bars(self):
16
- """Gera a lista das barras."""
17
- lista = []
18
- for rate in self.rates:
19
- bar = BarModel(rate)
20
- if (
21
- self.date and str(bar.date) != self.date
22
- ): # filtra por data para intraday
23
- continue
24
- lista.append(bar)
25
- return lista
1
+ """Módulo da classe model da lista de barras."""
2
+
3
+ from mtcli.models.bar_model import BarModel
4
+
5
+
6
+ class BarsModel:
7
+ """Classe model da lista de barras."""
8
+
9
+ def __init__(self, rates, date=""):
10
+ """Model da lista de barras."""
11
+ self.rates = rates
12
+ self.date = date
13
+ # self.lista = self.__lista()
14
+
15
+ def get_bars(self):
16
+ """Gera a lista das barras."""
17
+ lista = []
18
+ for rate in self.rates:
19
+ bar = BarModel(rate)
20
+ if (
21
+ self.date and str(bar.date) != self.date
22
+ ): # filtra por data para intraday
23
+ continue
24
+ lista.append(bar)
25
+ return lista