finmath

Essa biblioteca fornece ferramentas de análise financeira de alta compatibilidade com a plataforma do stratsphera. Ela contêm os submódulos ta (Technical Analysis), que permite a implementação de estruturas de análise técnica contínua durante a estratégia, o stats, que provê métodos para análise estatística e o converters, que auxiliar na conversão entre diferentes tipos de barras.

ta

Todos os campos do ta geram objetos do tipo stack. Stacks são pilhas de dados que podem ser preenchidos até certo tamanho máximo. Atingido o máximo, começam a descartar o elemento mais antigo da pilha ao inserir o novo, funcionando como uma janela de tamanho pré-determinado dos últimos dados inseridos.

Stacks são muito úteis para cálculos de estatísticas móveis (médias móveis são o exemplo mais comum). Basta inserir as informações sequencialmente conforme chegam (utilizando o método add() ) e requisitar ao objeto stack que calcule as estatísticas desejadas com as informações mais atuais.

O módulo ta implementa diversos tipos diferentes de stack que permitem cálculos facilitados de diferentes estatísticas e indicadores. Em caso de alguma estatística desejada não estar disponível, são fornecidas também as classes básicas de stack utilizadas pelo ta, permitindo que stacks customizados sejam feitos herdando das classes básicas. Tais classes podem ser importadas diretamente do módulo finmath.

Todas as classes instanciadas em ta possuem os campos descritos abaixo, cuja funcionalidade é definida com o mais conveniente para cada classe. Esta documentação também possui descrições específicas de tais campos para cada classe.

  • add(value): Insere um novo valor na stack.
    • Obs.: Os argumentos deste método variam de acordo com a classe, podendo ser um único número (na maioria dos casos), um objeto bar (em bar_stack, por exemplo), dois números x e y (em lin_reg_stack), etc.
  • value: Para classes que representam uma média móvel ou indicador técnico, retorna dados que representam o valor atual de tal média/indicador (veja a definição específica em cada classe).
    • Obs.: As stacks genéricas basic_stack, numeric_stack e bar_stack não possuem definição de value.
  • reset(): Reinicia a stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • resize(max_len): Altera o tamanho da janela da stack, mantendo as informações já armazenadas.
    • Obs.: Nem todas as classes possuem este método implementado. Muitos indicadores possuem fórmulas que dependem diretamente de max_len, para os quais tal alteração de tamanho não faz sentido.
  • max_len: Tamanho da janela da stack.
  • count: Número de elementos armazenados na stack atualmente.
  • is_stable: Booleano com valor True se e somente se a stack atingiu seu tamanho máximo e quaisquer indicadores já foram inicializados corretamente.
    • Obs.: Recomenda-se usar os dados de uma stack para análise apenas a partir do momento em que a stack se tornou estável.
  • data: Se a classe representa uma stack com um único campo, retorna um numpy.array de valores contidos atualmente em tal stack, em ordem crescente de tempo de inserção. Caso contrário, retorna um dicionário mapeando nomes de campos para os arrays descritos anteriormente.
  • max: Se a classe representa uma stack com um único campo, retorna o máximo valor contido atualmente em tal stack. Caso contrário, retorna um dicionário mapeando nomes de campos para seus respectivos máximos.
  • min: Se a classe representa uma stack com um único campo, retorna o mínimo valor contido atualmente em tal stack. Caso contrário, retorna um dicionário mapeando nomes de campos para seus respectivos mínimos.

Além destes campos gerais, muitas classes possuem os campos de informações númericas sum, mean, variance, std e zscore, cujos valores seguem a estrutura dos campos de max e min descritos acima.

A lista de classes disponíveis atualmente é a seguinte:


basic_stack

Descrição:
Instancia uma stack básica.

Chamada:
ta.basic_stack(max_len, dtype=np.float64)

  • max_len: Número inteiro positivo.
    • Tamanho da janela acompanhada pela basic_stack.
  • dtype: Tipo de variável. Caso não definido, utiliza por default o tipo np.float64 (ponto flutuante de dupla precisão).
    • Define o tipo de variável que será aceita pela basic_stack.

Retorno:
Retorna a basic_stack instanciada.

Campos:

  • basic_stack.add(value): Método.
    • Insere um novo valor na basic_stack. value deve ser compatível com o tipo definido na inicialização por dtype.
  • basic_stack.reset(): Método.
    • Reinicia a basic_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • basic_stack.resize(max_len): Método.
    • Altera o tamanho da janela da basic_stack, mantendo as informações já armazenadas.
  • basic_stack.max_len: Número inteiro.
    • Tamanho da janela da basic_stack.
  • basic_stack.count: Número inteiro.
    • Número de elementos armazenados na basic_stack atualmente.
  • basic_stack.is_stable: Booleano (valor True ou False).
    • Se True, a basic_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • basic_stack.data: numpy.array (lista de dados do numpy).
    • Recupera os valores contidos atualmente na basic_stack, em ordem crescente de tempo de inserção.
  • basic_stack.max: Tipo definido por dtype.
    • Valor máximo contido atualmente na basic_stack.
  • basic_stack.min: Tipo definido por dtype.
    • Valor mínimo contido atualmente na basic_stack.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import ta

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo o stack com tamanho de janela de 20 elementos
        self.stack = ta.stack(max_len=20)

    ...

    def on_bar_close(self, bar):
        # Adicionando o novo preço de VWAP no stack
        self.stack.add(bar.vwap)

        # Se o stack já estiver estável (tamanho máximo de 20 elementos atingido) e se o mínimo dos dados do stack for menor que 50% do máximo, gerar uma ordem
        if self.stack.is_stable and self.stack.min < 0.5 * self.stack.max:
            self.order.create.market(...)


numeric_stack

Descrição:
Instancia uma stack básica com funcionalidades numéricas.

Chamada:
ta.numeric_stack(max_len)

  • max_len: Número inteiro positivo.
    • Tamanho da janela acompanhada pela numeric_stack.

Retorno:
Retorna a numeric_stack instanciada.

Campos:

  • numeric_stack.add(value): Método.
    • Insere um novo valor na numeric_stack.
  • numeric_stack.reset(): Método.
    • Reinicia a numeric_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • numeric_stack.resize(max_len): Método.
    • Altera o tamanho da janela da numeric_stack, mantendo as informações já armazenadas.
  • numeric_stack.max_len: Número inteiro.
    • Tamanho da janela da numeric_stack.
  • numeric_stack.count: Número inteiro.
    • Número de elementos armazenados na numeric_stack atualmente.
  • numeric_stack.is_stable: Booleano (valor True ou False).
    • Se True, a numeric_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • numeric_stack.data: numpy.array (lista de dados do numpy).
    • Recupera os valores contidos atualmente na numeric_stack, em ordem crescente de tempo de inserção.
  • numeric_stack.max: Número.
    • Valor máximo contido atualmente na numeric_stack.
  • numeric_stack.min: Número.
    • Valor mínimo contido atualmente na numeric_stack.
  • numeric_stack.sum: Número.
    • Soma dos elementos atuais da numeric_stack.
  • numeric_stack.mean: Número.
    • Média aritmética dos elementos atuais da numeric_stack.
  • numeric_stack.variance: Número.
    • Variância dos elementos atuais da numeric_stack.
  • numeric_stack.std: Número.
    • Desvio padrão dos elementos atuais da numeric_stack.
  • numeric_stack.zscore: Número.
    • Z-score dos elementos atuais da numeric_stack.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import ta

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo o stack com tamanho de janela de 20 elementos
        self.numeric_stack = ta.numeric_stack(max_len=20)

    ...

    def on_bar_close(self, bar):
        # Adicionando o novo preço de VWAP no stack
        self.numeric_stack.add(bar.vwap)

        # Se o stack já estiver estável (tamanho máximo de 20 elementos atingido) e se o desvio padrão dos dados do stack for menor que 0.2, gerar uma ordem
        if self.numeric_stack.is_stable and self.numeric_stack.std < 0.2:
            self.order.create.market(...)


bar_stack

Descrição:
Instancia uma stack que armazena barras (objetos bar).

Chamada:
ta.bar_stack(max_len, open, high, low, close, vwap, volume, close_time, first_trade_time)

  • max_len: Número inteiro positivo.
    • Tamanho da janela acompanhada pela bar_stack.
  • open: Booleano (valor True ou False), default False.
    • Define se a bar_stack armazena os preços de open das barras adicionadas.
  • high: Booleano (valor True ou False), default False.
    • Define se a bar_stack armazena os preços de high das barras adicionadas.
  • low: Booleano (valor True ou False), default False.
    • Define se a bar_stack armazena os preços de low das barras adicionadas.
  • close: Booleano (valor True ou False), default False.
    • Define se a bar_stack armazena os preços de close das barras adicionadas.
  • vwap: Booleano (valor True ou False), default False.
    • Define se a bar_stack armazena os preços de vwap das barras adicionadas.
  • volume: Booleano (valor True ou False), default False.
    • Define se a bar_stack armazena o volume das barras adicionadas.
  • close_time: Booleano (valor True ou False), default False.
    • Define se a bar_stack armazena o close_time das barras adicionadas.
  • first_trade_time: Booleano (valor True ou False), default False.
    • Define se a bar_stack armazena o first_trade_time das barras adicionadas.

Retorno:
Retorna a bar_stack instanciada.

Campos:

  • bar_stack.add(bar): Método.
    • Insere uma nova barra (objeto bar) na bar_stack.
  • bar_stack.reset(): Método.
    • Reinicia a bar_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • bar_stack.resize(max_len): Método.
    • Altera o tamanho da janela da bar_stack, mantendo as informações já armazenadas.
  • bar_stack.max_len: Número inteiro.
    • Tamanho da janela da bar_stack.
  • bar_stack.count: Número inteiro.
    • Número de barras armazenadas na bar_stack atualmente.
  • bar_stack.is_stable: Booleano (valor True ou False).
    • Se True, a bar_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • bar_stack.data: Dicionário mapeando strings para numpy.arrays (lista de dados do numpy).
    • Retorna os dados contidos na bar_stack, em ordem crescente de tempo de inserção, em forma de dicionário de campo para lista (por exemplo, {'open': [1,2,3], 'vwap': [2,3,4]}).
  • bar_stack.max: Dicionário mapeando strings para números.
    • Retorna o máximo de cada campo na bar_stack em forma de dicionário (por exemplo, {'low': 20.5, 'high': 21.3}).
  • bar_stack.min: Dicionário mapeando strings para números.
    • Retorna o mínimo de cada campo na bar_stack em forma de dicionário (por exemplo, {'low': 15.4, 'high': 16.1}).
  • bar_stack.sum: Dicionário mapeando strings para números.
    • Retorna a soma de cada campo da bar_stack em forma de dicionário (por exemplo, {'open': 10.3, 'close': 11.4}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • bar_stack.mean: Dicionário mapeando strings para números.
    • Retorna a média aritmética de cada campo da bar_stack em forma de dicionário (por exemplo, {'high': 15.3, 'vwap': 14.4}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • bar_stack.variance: Dicionário mapeando strings para números.
    • Retorna a variância de cada campo da bar_stack em forma de dicionário (por exemplo, {'low': 0.25, 'vwap': 0.09}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • bar_stack.std: Dicionário mapeando strings para números.
    • Retorna o desvio padrão de cada campo da bar_stack em forma de dicionário (por exemplo, {'low': 0.5, 'vwap': 0.3}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • bar_stack.zscore: Dicionário mapeando strings para números.
    • Retorna o Z-score de cada campo da bar_stack em forma de dicionário.
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import ta

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo o bar_stack com tamanho de janela de 20 elementos e pedindo que armazene apenas os campos open, close, vwap e time das barras que forem adicionadas
        self.bar_stack = ta.bar_stack(max_len=20, open=True, close=True, vwap=True, close_time=True)

    ...

    def on_bar_close(self, bar):
        # Adicionando a nova barra no bar_stack
        self.bar_stack.add(bar)

        # Se o _stack_ já estiver estável (tamanho máximo de 20 elementos atingido) e se o desvio padrão dos preços de VWAP do bar_stack for menor que 0.2, gerar uma ordem
        if self.bar_stack.is_stable and self.bar_stack.std['vwap'] < 0.2:
            self.order.create.market(...)


lin_reg_stack

Descrição:
Instancia uma stack que armazena pares de coordenadas (x, y) de dados numéricos com métodos para regressão linear.

Chamada:
ta.lin_reg_stack(max_len)

  • max_len: Número inteiro positivo.
    • Tamanho da janela acompanhada pela lin_reg_stack.

Retorno:
Retorna a lin_reg_stack instanciada.

Campos:

  • lin_reg_stack.add(x, y): Método.
    • Insere um novo par de números (x, y) na lin_reg_stack.
  • lin_reg_stack.value: Tupla com dois números.
    • Retorna o par (coeficiente angular, coeficiente linear) da regressão linear.
  • lin_reg_stack.slope: Número.
    • Coeficiente angular da regressão linear.
  • lin_reg_stack.intercept: Número.
    • Coeficiente linear da regressão linear.
  • lin_reg_stack.predict(x): Número ou numpy.array (lista de dados do numpy).
    • Método que, dados valores x, calcula valores y previstos pela regressão linear. x pode ser um único número (nesse caso, o método retorna um número) ou uma lista de números (nesse caso, o método retorna um numpy.array).
  • lin_reg_stack.r_squared: Número.
    • Coeficiente de determinação da regressão linear.
  • lin_reg_stack.r_value: Número.
    • Coeficiente de correlação da regressão linear.
  • lin_reg_stack.p_value: Número.
    • P-Value da regressão linear. O P-Value é a probabilidade bilateral de refutação da hipótese de que o coeficiente angular da regressão é nulo usando o teste de Wald com distribuição T de Student.
  • lin_reg_stack.stderr: Número.
    • Desvio padrão dos resíduos da regressão linear.
  • lin_reg_stack.reset(): Método.
    • Reinicia a lin_reg_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • lin_reg_stack.resize(max_len): Método.
    • Altera o tamanho da janela da lin_reg_stack, mantendo as informações já armazenadas.
  • lin_reg_stack.max_len: Número inteiro.
    • Tamanho da janela da lin_reg_stack.
  • lin_reg_stack.count: Número inteiro.
    • Número de barras armazenadas na lin_reg_stack atualmente.
  • lin_reg_stack.is_stable: Booleano (valor True ou False).
    • Se True, a lin_reg_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • lin_reg_stack.data: Dicionário mapeando as strings 'x' e 'y' para numpy.arrays (lista de dados do numpy).
    • Retorna os dados contidos na lin_reg_stack, em ordem crescente de tempo de inserção, em forma de dicionário (por exemplo, {'x': [1,2,3], 'y': [2,3,4]}).
  • lin_reg_stack.max: Dicionário mapeando as strings 'x' e 'y' para números.
    • Retorna o máximo das coordenadas x e y em forma de dicionário (por exemplo, {'x': 20.5, 'y': 21.3}).
  • lin_reg_stack.min: Dicionário mapeando as strings 'x' e 'y' para números.
    • Retorna o mínimo das coordenadas x e y em forma de dicionário (por exemplo, {'x': 15.4, 'y': 16.1}).
  • lin_reg_stack.sum: Dicionário mapeando as strings 'x' e 'y' para números.
    • Retorna a soma das coordenadas x e y em forma de dicionário (por exemplo, {'x': 30.5, 'y': 33.2}).
  • lin_reg_stack.mean: Dicionário mapeando as strings 'x' e 'y' para números.
    • Retorna a média aritmética das coordenadas x e y em forma de dicionário (por exemplo, {'x': 15.3, 'y': 14.4}).
  • lin_reg_stack.variance: Dicionário mapeando as strings 'x' e 'y' para números.
    • Retorna a variância das coordenadas x e y em forma de dicionário (por exemplo, {'x': 0.25, 'y': 0.09}).
  • lin_reg_stack.std: Dicionário mapeando as strings 'x' e 'y' para números.
    • Retorna o desvio padrão das coordenadas x e y em forma de dicionário (por exemplo, {'x': 0.5, 'y': 0.3}).
  • lin_reg_stack.zscore: Dicionário mapeando as strings 'x' e 'y' para números.
    • Retorna o Z-score das coordenadas x e y em forma de dicionário.
  • lin_reg_stack.covariance: Número.
    • Covariância entre as duas variáveis.


time_value_stack

Descrição:
Instancia uma stack que armazena pares de dados (tempo, valor). Também possui métodos de regressão linear baseados em lin_reg_stack.

Chamada:
ta.time_value_stack(max_len)

  • max_len: Número inteiro positivo.
    • Tamanho da janela acompanhada pela time_value_stack.

Retorno:
Retorna a time_value_stack instanciada.

Campos:

  • time_value_stack.add(time, value): Método.
    • Insere um novo par de tempo (argumento time, datetime.datetime ou numpy.datetime64) e valor (argumento value, numérico) na time_value_stack.
  • time_value_stack.value: Tupla com dois números.
    • Retorna o par (coeficiente angular, coeficiente linear) da regressão linear.
  • time_value_stack.slope: Número.
    • Coeficiente angular da regressão linear.
  • time_value_stack.intercept: Número.
    • Coeficiente linear da regressão linear.
  • time_value_stack.predict_values(times): Número ou numpy.array (lista de dados do numpy).
    • Método que, dados tempos (datetime.datetime ou numpy.datetime64), calcula valores (números) previstos pela regressão linear. times pode ser um único tempo (nesse caso, o método retorna um único valor) ou uma lista de tempos (nesse caso, o método retorna um numpy.array).
  • time_value_stack.r_squared: Número.
    • Coeficiente de determinação da regressão linear.
  • time_value_stack.r_value: Número.
    • Coeficiente de correlação da regressão linear.
  • time_value_stack.p_value: Número.
    • P-Value da regressão linear. O P-Value é a probabilidade bilateral de refutação da hipótese de que o coeficiente angular da regressão é nulo usando o teste de Wald com distribuição T de Student.
  • time_value_stack.stderr: Número.
    • Desvio padrão dos resíduos da regressão linear.
  • time_value_stack.reset(): Método.
    • Reinicia a time_value_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • time_value_stack.resize(max_len): Método.
    • Altera o tamanho da janela da time_value_stack, mantendo as informações já armazenadas.
  • time_value_stack.max_len: Número inteiro.
    • Tamanho da janela da time_value_stack.
  • time_value_stack.count: Número inteiro.
    • Número de barras armazenadas na time_value_stack atualmente.
  • time_value_stack.is_stable: Booleano (valor True ou False).
    • Se True, a time_value_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • time_value_stack.data: Dicionário mapeando as strings 'times' e 'values' para numpy.arrays (lista de dados do numpy).
    • Retorna os dados contidos na time_value_stack, em ordem crescente de tempo de inserção, em forma de dicionário com as chaves times e values.
  • time_value_stack.max: Dicionário mapeando as strings 'times' e 'values' para números.
    • Retorna o máximo dos campos times e values em forma de dicionário.
  • time_value_stack.min: Dicionário mapeando as strings 'times' e 'values' para números.
    • Retorna o mínimo dos campos times e values em forma de dicionário.
  • time_value_stack.sum: Número.
    • Soma dos elementos do campo values da time_value_stack.
  • time_value_stack.mean: Número.
    • Média aritmética dos elementos do campo values da time_value_stack.
  • time_value_stack.variance: Número.
    • Variância dos elementos do campo values da time_value_stack.
  • time_value_stack.std: Número.
    • Desvio padrão dos elementos do campo values da time_value_stack.
  • time_value_stack.zscore: Número.
    • Z-score dos elementos do campo values da time_value_stack.
  • time_value_stack.covariance: Número.
    • Covariância entre os tempos e valores.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import ta

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo o time_value_stack com tamanho de janela de 20 elementos
        self.time_value_stack = ta.time_value_stack(max_len=20)

    ...

    def on_bar_close(self, bar):
        # Adicionando o horário da barra e seu preço de close ao quadrado no time_value_stack
        self.time_value_stack.add(time=bar.close_time, value=bar.close ** 2)

        # Se o _stack_ já estiver estável (tamanho máximo de 20 elementos atingido) e a média dos valores de close elevados ao quadrado armazenados no time_value_stack for menor que 100, gerar uma ordem
        if self.time_value_stack.is_stable and self.time_value_stack.mean < 100:
            self.order.create.market(...)


sma

Descrição:
Instancia uma numeric_stack para o cálculo de média móvel simples (Simple Moving Average).

Chamada:
ta.sma(max_len)

  • max_len: Número inteiro positivo. Default 20.
    • Tamanho da janela acompanhada pela numeric_stack.

Retorno:
Retorna a numeric_stack de SMA instanciada.

Campos:

  • sma.add(value): Método.
    • Insere um novo valor na numeric_stack.
  • sma.value: Número.
    • Retorna a média móvel (SMA) dos elementos da numeric_stack.
  • sma.moving_average_type: String.
    • Retorna 'SMA'.
  • sma.reset(): Método.
    • Reinicia a numeric_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • sma.resize(max_len): Método.
    • Altera o tamanho da janela da numeric_stack, mantendo as informações já armazenadas.
  • sma.max_len: Número inteiro.
    • Tamanho da janela da numeric_stack.
  • sma.count: Número inteiro.
    • Número de elementos armazenados na numeric_stack atualmente.
  • sma.is_stable: Booleano (valor True ou False).
    • Se True, a numeric_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • sma.data: numpy.array (lista de dados do numpy).
    • Recupera os valores contidos atualmente na numeric_stack, em ordem crescente de tempo de inserção.
  • sma.max: Número.
    • Valor máximo contido atualmente na numeric_stack.
  • sma.min: Número.
    • Valor mínimo contido atualmente na numeric_stack.
  • sma.sum: Número.
    • Soma dos elementos atuais da numeric_stack.
  • sma.mean: Número.
    • Média aritmética dos elementos atuais da numeric_stack.
  • sma.variance: Número.
    • Variância dos elementos atuais da numeric_stack.
  • sma.std: Número.
    • Desvio padrão dos elementos atuais da numeric_stack.
  • sma.zscore: Número.
    • Z-score dos elementos atuais da numeric_stack.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import ta

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo o stack com tamanho de janela de 20 elementos
        self.sma = ta.sma(max_len=20)

    ...

    def on_bar_close(self, bar):
        # Adicionando o novo preço de close no stack
        self.sma.add(bar.close)

        # Se o SMA já estiver estável (tamanho máximo de 20 elementos atingido) e se a média móvel simples for menor que 10, gerar uma ordem
        if self.sma.is_stable and self.sma.value <10:
            self.order.create.market(...)


ema

Descrição:
Instancia uma numeric_stack para o cálculo de média móvel exponencial (Exponential Moving Average). Esta média prioriza os elementos mais recentes, reduzindo os pesos dos elementos exponencialmente conformem ficam mais antigos.

Chamada:
ta.ema(max_len, alpha)

  • max_len: Número inteiro positivo. Default 20.
    • Tamanho da janela acompanhada pela numeric_stack.
  • alpha: Número entre 0 e 1, ou None por default.
    • Peso do elemento mais recente no cálculo da média exponencial. Seu complementar é também o fator de decaimento do peso dos elementos mais antigos no cálculo da média exponencial. Por exemplo, se alpha for , o elemento mais recente terá de participação na média e os elementos seguintes decairão com um fator de , tendo pesos de , , e assim por diante.
    • Caso alpha não seja explicitamente fornecido, a constante usada no cálculo da EMA é dada pela fórmula padrão alpha = 2 / (max_len + 1).

Retorno:
Retorna a numeric_stack de EMA instanciada.

Campos:

  • ema.add(value): Método.
    • Insere um novo valor na numeric_stack.
  • ema.value: Número.
    • Valor da média móvel exponencial (EMA).
  • ema.moving_average_type: String.
    • Retorna 'EMA'.
  • ema.alpha: Número.
    • Valor de alpha usado no cálculo da EMA.
  • ema.reset(): Método.
    • Reinicia a stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • ema.resize(max_len): Método.
    • Altera o tamanho da janela da numeric_stack, mantendo as informações já armazenadas.
  • ema.max_len: Número inteiro.
    • Tamanho da janela da stack.
  • ema.count: Número inteiro.
    • Número de elementos armazenados na stack atualmente.
  • ema.is_stable: Booleano (valor True ou False).
    • Se True, a stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • ema.data: numpy.array (lista de dados do numpy).
    • Recupera os valores contidos atualmente na stack, em ordem crescente de tempo de inserção.
  • ema.max: Número.
    • Valor máximo contido atualmente na stack.
  • ema.min: Número.
    • Valor mínimo contido atualmente na stack.
  • ema.sum: Número.
    • Soma dos elementos atuais da stack.
  • ema.mean: Número.
    • Média aritmética dos elementos atuais da stack.
  • ema.variance: Número.
    • Variância dos elementos atuais da stack.
  • ema.std: Número.
    • Desvio padrão dos elementos atuais da stack.
  • ema.zscore: Número.
    • Z-score dos elementos atuais da stack.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import ta

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo o stack com tamanho de janela de 20 elementos
        self.ema = ta.ema(max_len=20, alpha=0.7)

    ...

    def on_bar_close(self, bar):
        # Adicionando o novo preço de close no stack
        self.ema.add(bar.close)

        # Se o EMA já estiver estável (tamanho máximo de 20 elementos atingido) e se a média móvel exponencial for menor que 10, gerar uma ordem
        if self.ema.is_stable and self.ema.value <10:
            self.order.create.market(...)


smma

Descrição:
Instancia uma numeric_stack para o cálculo de média móvel suavizada (Smoothed Moving Average (SMMA), Modified Moving Average (MMA), ou Running Moving Average (RMA)). Intuitivamente, esta média representa uma combinação das médias simples e exponencial, pois o peso do valor mais recente é o mesmo da média simples, mas o peso complementar é atribuído a médias anteriores ao invés de elementos anteriores, de modo a focar em tendências de longo-prazo e remover flutuações de curto-prazo. É equivalente a uma EMA com alpha = 1 / max_len.

Chamada:
ta.smma(max_len)

  • max_len: Número inteiro positivo. Default 20.
    • Tamanho da janela acompanhada pela numeric_stack.

Retorno:
Retorna a numeric_stack de SMMA instanciada.

Campos:

  • smma.add(value): Método.
    • Insere um novo valor na numeric_stack.
  • smma.value: Número.
    • Valor da média móvel exponencial (SMMA).
  • smma.moving_average_type: String.
    • Retorna 'SMMA'.
  • smma.alpha: Número.
    • Valor de alpha usado no cálculo da SMMA (ou seja, 1/max_len).
  • smma.reset(): Método.
    • Reinicia a numeric_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • smma.max_len: Número inteiro.
    • Tamanho da janela da numeric_stack.
  • smma.count: Número inteiro.
    • Número de elementos armazenados na numeric_stack atualmente.
  • smma.is_stable: Booleano (valor True ou False).
    • Se True, a numeric_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • smma.data: numpy.array (lista de dados do numpy).
    • Recupera os valores contidos atualmente na numeric_stack, em ordem crescente de tempo de inserção.
  • smma.max: Número.
    • Valor máximo contido atualmente na numeric_stack.
  • smma.min: Número.
    • Valor mínimo contido atualmente na numeric_stack.
  • smma.sum: Número.
    • Soma dos elementos atuais da numeric_stack.
  • smma.mean: Número.
    • Média aritmética dos elementos atuais da numeric_stack.
  • smma.variance: Número.
    • Variância dos elementos atuais da numeric_stack.
  • smma.std: Número.
    • Desvio padrão dos elementos atuais da numeric_stack.
  • smma.zscore: Número.
    • Z-score dos elementos atuais da numeric_stack.


vama

Descrição:
Instancia uma bar_stack para o cálculo de média móvel ajustada por volume (Volume Adjusted Moving Average, ou VAMA). É uma média móvel ponderada, na qual a contribuição de cada barra na janela atual da bar_stack é calculada de acordo com o volume da barra.

Chamada:
ta.vama(max_len, use_vwap)

  • max_len: Número inteiro positivo. Default 20.
    • Tamanho da janela acompanhada pela bar_stack.
  • use_vwap: Booleano (valor True ou False). Default True.
    • Se True, usa o campo vwap de cada barra para o cálculo da média; se False, usa o campo close para o cálculo.

Retorno:
Retorna a bar_stack de VAMA instanciada.

Campos:

  • vama.add(bar): Método.
    • Insere uma nova barra (objeto bar) na bar_stack.
  • vama.value: Número.
    • Valor da média móvel ajustada por volume (VAMA).
  • vama.moving_average_type: String.
    • Retorna 'VAMA'.
  • vama.reset(): Método.
    • Reinicia a bar_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • vama.resize(max_len): Método.
    • Altera o tamanho da janela da bar_stack, mantendo as informações já armazenadas.
  • vama.max_len: Número inteiro.
    • Tamanho da janela da bar_stack.
  • vama.count: Número inteiro.
    • Número de barras armazenadas na bar_stack atualmente.
  • vama.is_stable: Booleano (valor True ou False).
    • Se True, a bar_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • vama.data: Dicionário mapeando strings para numpy.arrays (lista de dados do numpy).
    • Retorna os dados contidos na bar_stack, em ordem crescente de tempo de inserção, em forma de dicionário de campo para lista (por exemplo, {'volume': [1000,2000,3000], 'vwap': [2,3,4]}).
  • vama.max: Dicionário mapeando strings para números.
    • Retorna o máximo de cada campo na bar_stack em forma de dicionário (por exemplo, {'vwap': 20.5, 'volume': 100000}).
  • vama.min: Dicionário mapeando strings para números.
    • Retorna o mínimo de cada campo na bar_stack em forma de dicionário (por exemplo, {'vwap': 15.4, 'volume': 4000}).
  • vama.sum: Dicionário mapeando strings para números.
    • Retorna a soma de cada campo da bar_stack em forma de dicionário (por exemplo, {'close': 333.3, 'volume': 50000}).
  • vama.mean: Dicionário mapeando strings para números.
    • Retorna a média aritmética de cada campo da bar_stack em forma de dicionário (por exemplo, {'close': 15.3, 'volume': 10000}).
  • vama.variance: Dicionário mapeando strings para números.
    • Retorna a variância de cada campo da bar_stack em forma de dicionário (por exemplo, {'volume': 0.25, 'vwap': 0.09}).
  • vama.std: Dicionário mapeando strings para números.
    • Retorna o desvio padrão de cada campo da bar_stack em forma de dicionário (por exemplo, {'volume': 0.5, 'vwap': 0.3}).
  • vama.zscore: Dicionário mapeando strings para números.
    • Retorna o Z-score de cada campo da bar_stack em forma de dicionário.


bbands

Descrição:
Instancia uma numeric_stack para cálculo de Bandas de Bollinger (Bollinger Bands) usando média móvel simples.

Chamada:
bbands(max_len, zscore)

  • max_len: Número inteiro positivo. Default 20.
    • Tamanho da janela acompanhada pelo numeric_stack.
  • zscore: Número. Default 2.
    • Fator que multiplica o desvio padrão da série para formar as bandas superior e inferior.

Retorno:
Retorna a numeric_stack de Bollinger Bands instanciada.

Campos:

  • bbands.add(value): Método.
    • Insere um novo valor (argumento value) na numeric_stack.
  • bbands.value: Tupla com três números.
    • Retorna a tripla de valores (banda inferior, banda interna, banda superior).
  • bbands.lower_band: Número.
    • Valor atual da banda inferior de Bollinger.
  • bbands.middle_band: Número.
    • Valor atual da banda interna de Bollinger.
  • bbands.upper_band: Número.
    • Valor atual da banda superior de Bollinger.
  • bbands.zscore: Número.
    • Retorna o Z-Score selecionado para o Bollinger Bands.
  • bbands.reset(): Método.
    • Reinicia a numeric_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • bbands.resize(max_len): Método.
    • Altera o tamanho da janela da numeric_stack, mantendo as informações já armazenadas.
  • bbands.max_len: Número inteiro.
    • Tamanho da janela da numeric_stack.
  • bbands.count: Número inteiro.
    • Número de elementos armazenados na numeric_stack atualmente.
  • bbands.is_stable: Booleano (valor True ou False).
    • Se True, a numeric_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • bbands.data: numpy.array (lista de dados do numpy).
    • Recupera os valores contidos atualmente na numeric_stack, em ordem crescente de tempo de inserção.
  • bbands.max: Número.
    • Valor máximo contido atualmente na numeric_stack.
  • bbands.min: Número.
    • Valor mínimo contido atualmente na numeric_stack.
  • bbands.sum: Número.
    • Soma dos elementos atuais da numeric_stack.
  • bbands.mean: Número.
    • Média aritmética dos elementos atuais da numeric_stack.
  • bbands.variance: Número.
    • Variância dos elementos atuais da numeric_stack.
  • bbands.std: Número.
    • Desvio padrão dos elementos atuais da numeric_stack.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import ta

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo o stack de Bollinger Bands com tamanho de janela de 20 elementos
        self.bbands = ta.bbands(max_len=20)

    ...

    def on_bar_close(self, bar):
        # Adicionando o novo preço de VWAP no stack
        self.bbands.add(bar.vwap)

        # Se o stack já estiver estável (tamanho máximo de 20 elementos atingido) e se o preço de fechamento da última barra estiver abaixo da banda inferior de Bollinger
        if self.bbands.is_stable and self.bbands.lower_band > bar.close:
            self.order.create.market(...)


atr

Descrição:
Instancia uma bar_stack para cálculo de média de amplitude de variação (Average True Range).

Chamada:
ta.atr(max_len, moving_average_type, alpha)

  • max_len: Número inteiro positivo. Default 14.
    • Tamanho da janela acompanhada pelo bar_stack.
  • moving_average_type: String. Default 'SMMA'.
    • Define o tipo de média móvel que será aplicada aos dados armazenados de amplitude de variação. As opções são 'SMMA' (média móvel suavizada), 'SMA' (média móvel simples) e 'EMA' (média móvel exponencial).
  • alpha: Número entre 0 e 1. Default None.
    • Este parâmetro só pode ser definido se o parâmetro moving_average_type for 'EMA'. É o peso do elemento mais recente no cálculo da média exponencial. Seu complementar é também o fator de decaimento do peso dos elementos mais antigos no cálculo da média exponencial. Caso alpha não seja explicitamente fornecido para 'EMA', a constante usada no cálculo da EMA é dada pela fórmula padrão alpha = 2 / (max_len + 1).

Retorno:
Retorna a bar_stack de Average True Range instanciada.

Campos:

  • atr.add(bar): Método.
    • Insere uma nova barra (objeto bar) na bar_stack.
  • atr.value: Número.
    • Valor da ATR, ou seja, a amplitude de variação média dos dados inseridos.
  • atr.tr: Número.
    • Valor da amplitude de variação mais recente.
  • atr.moving_average_type: String.
    • Tipo de média móvel usado no cálculo da ATR.
  • atr.alpha: Número.
    • Valor de alpha usado na média móvel.
    • Obs.: Este campo só existe se o tipo de média móvel selecionado for 'EMA' ou 'SMMA'.
  • atr.reset(): Método.
    • Reinicia a stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • atr.resize(max_len): Método.
    • Altera o tamanho da janela da stack, mantendo as informações já armazenadas.
    • Obs.: Este método só pode ser usado se o tipo de média móvel selecionado for 'SMA' ou 'EMA'.
  • atr.max_len: Número inteiro.
    • Tamanho da janela da stack.
  • atr.count: Número inteiro.
    • Número de barras armazenadas na stack atualmente.
  • atr.is_stable: Booleano (valor True ou False).
    • Se True, a média móvel já é estável; se False, a média móvel ainda não é estável.
  • atr.data: Dicionário mapeando strings para numpy.arrays (lista de dados do numpy).
    • Retorna os dados contidos na stack e na média móvel (no campo 'tr') em ordem crescente de tempo de inserção, em forma de dicionário de campo para lista (por exemplo, {'open': [1,2,3], 'vwap': [2,3,4], 'tr': [1,2]}).
  • atr.max: Dicionário mapeando strings para números.
    • Retorna o máximo de cada campo na stack em forma de dicionário (por exemplo, {'low': 20.5, 'high': 21.3}).
  • atr.min: Dicionário mapeando strings para números.
    • Retorna o mínimo de cada campo na stack em forma de dicionário (por exemplo, {'low': 15.4, 'high': 16.1}).
  • atr.sum: Dicionário mapeando strings para números.
    • Retorna a soma de cada campo da stack em forma de dicionário (por exemplo, {'open': 10.3, 'close': 11.4}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • atr.mean: Dicionário mapeando strings para números.
    • Retorna a média aritmética de cada campo da stack em forma de dicionário (por exemplo, {'high': 15.3, 'vwap': 14.4}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • atr.variance: Dicionário mapeando strings para números.
    • Retorna a variância de cada campo da stack em forma de dicionário (por exemplo, {'low': 0.25, 'vwap': 0.09}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • atr.std: Dicionário mapeando strings para números.
    • Retorna o desvio padrão de cada campo da stack em forma de dicionário (por exemplo, {'low': 0.5, 'vwap': 0.3}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • atr.zscore: Dicionário mapeando strings para números.
    • Retorna o Z-score de cada campo da stack em forma de dicionário.
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import ta

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo o bar_stack de ATR com tamanho de janela de 20 elementos e selecionando média exponencial com peso recente de 60%
        self.atr = ta.atr(max_len=20, moving_average_type='EMA', alpha=0.6)

    ...

    def on_bar_close(self, bar):
        # Adicionando a nova barra no bar_stack
        self.atr.add(bar)

        # Se o _stack_ já estiver estável (tamanho máximo de 20 elementos atingido) e se a amplitude de variação das barras armazenadas for menor que 1.5, gerar uma ordem
        if self.atr.is_stable and self.atr.value < 1.5:
            self.order.create.market(...)


atr_chandelier

Descrição:
Instancia uma bar_stack de ATR para cálculo de saída de Chandelier (Chandelier Exit).

Chamada:
ta.atr_chandelier(max_len, moving_average_type, alpha)

  • max_len: Número inteiro positivo. Default 22.
    • Tamanho da janela acompanhada pelo bar_stack.
  • moving_average_type: String, default 'SMMA'.
    • Define o tipo de média móvel que será aplicada aos dados armazenados de amplitude de variação. As opções são 'SMMA' (média móvel suavizada), 'SMA' (média móvel simples) e 'EMA' (média móvel exponencial).
  • alpha: Número entre 0 e 1, default None.
    • Este parâmetro só pode ser definido se o parâmetro moving_average_type for 'EMA'. É o peso do elemento mais recente no cálculo da média exponencial. Seu complementar é também o fator de decaimento do peso dos elementos mais antigos no cálculo da média exponencial. Caso alpha não seja explicitamente fornecido para 'EMA', a constante usada no cálculo da EMA é dada pela fórmula padrão alpha = 2 / (max_len + 1).

Retorno:
Retorna a bar_stack de ATR Chandelier Exit instanciada.

Campos:

  • atr_chandelier.add(bar): Método.
    • Insere uma nova barra (objeto bar) na bar_stack.
  • atr_chandelier.value: Tupla de dois números.
    • Par de valores (saída longa de Chandelier, saída curta de Chandelier).
  • atr_chandelier.exit_long: Número.
    • Atual valor de saída longa de Chandelier.
  • atr_chandelier.exit_short: Número.
    • Atual valor de saída curta de Chandelier.
  • atr_chandelier.atr_value: Número.
    • Valor da ATR, ou seja, a amplitude de variação média dos dados inseridos.
  • atr_chandelier.tr: Número.
    • Valor da amplitude de variação mais recente.
  • atr_chandelier.moving_average_type: String.
    • Tipo de média móvel usado no cálculo da ATR.
  • atr_chandelier.alpha: Número.
    • Valor de alpha usado na média móvel.
    • Obs.: Este campo só existe se o tipo de média móvel selecionado for 'EMA' ou 'SMMA'.
  • atr_chandelier.reset(): Método.
    • Reinicia a stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • atr_chandelier.resize(max_len): Método.
    • Altera o tamanho da janela da stack, mantendo as informações já armazenadas.
    • Obs.: Este método só pode ser usado se o tipo de média móvel selecionado for 'SMA' ou 'EMA'.
  • atr_chandelier.max_len: Número inteiro.
    • Tamanho da janela da stack.
  • atr_chandelier.count: Número inteiro.
    • Número de barras armazenadas na stack atualmente.
  • atr_chandelier.is_stable: Booleano (valor True ou False).
    • Se True, a média móvel já é estável; se False, a média móvel ainda não é estável.
  • atr_chandelier.data: Dicionário mapeando strings para numpy.arrays (lista de dados do numpy).
    • Retorna os dados contidos na stack e na média móvel (no campo 'tr') em ordem crescente de tempo de inserção, em forma de dicionário de campo para lista (por exemplo, {'open': [1,2,3], 'vwap': [2,3,4], 'tr': [1,2]}).
  • atr_chandelier.max: Dicionário mapeando strings para números.
    • Retorna o máximo de cada campo na stack em forma de dicionário (por exemplo, {'low': 20.5, 'high': 21.3}).
  • atr_chandelier.min: Dicionário mapeando strings para números.
    • Retorna o mínimo de cada campo na stack em forma de dicionário (por exemplo, {'low': 15.4, 'high': 16.1}).
  • atr_chandelier.sum: Dicionário mapeando strings para números.
    • Retorna a soma de cada campo da stack em forma de dicionário (por exemplo, {'open': 10.3, 'close': 11.4}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • atr_chandelier.mean: Dicionário mapeando strings para números.
    • Retorna a média aritmética de cada campo da stack em forma de dicionário (por exemplo, {'high': 15.3, 'vwap': 14.4}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • atr_chandelier.variance: Dicionário mapeando strings para números.
    • Retorna a variância de cada campo da stack em forma de dicionário (por exemplo, {'low': 0.25, 'vwap': 0.09}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • atr_chandelier.std: Dicionário mapeando strings para números.
    • Retorna o desvio padrão de cada campo da stack em forma de dicionário (por exemplo, {'low': 0.5, 'vwap': 0.3}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • atr_chandelier.zscore: Dicionário mapeando strings para números.
    • Retorna o Z-score de cada campo da stack em forma de dicionário.
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.


macd

Descrição:
Instancia um conjunto de stacks com médias móveis exponenciais para o cálculo de Convergência e Divergência de Médias Móveis (Moving Average Convergence / Divergence).

Chamada:
ta.macd(short_max_len, long_max_len, signal_max_len)

  • short_max_len: Número inteiro positivo. Default 12.
    • Tamanho da janela acompanhada pela média móvel de curto período.
  • long_max_len: Número inteiro positivo. Default 26.
    • Tamanho da janela acompanhada pela média móvel de longo período.
  • signal_max_len: Número inteiro positivo. Default 9.
    • Tamanho da janela acompanhada pela média móvel do sinal (série do MACD).

Retorno:
Retorna o indicador MACD instanciado.

Campos:

  • macd.add(value): Método.
    • Insere um novo valor nas stacks.
  • macd.value: Número.
    • Valor atual do indicador MACD, ou seja, a diferença entre os valores das médias de curto e longo período.
  • macd.short_value: Número.
    • Valor atual da média móvel de curto período.
  • macd.long_value: Número.
    • Valor atual da média móvel de longo período.
  • macd.signal_value: Número.
    • Valor atual da média movel do sinal (série do MACD).
  • macd.reset(): Método.
    • Reinicia as stacks para seus estados iniciais vazios, ignorando quaisquer dados inseridos previamente.
  • macd.max_len: Dicionário mapeando as strings 'long', 'short' e 'signal' para números.
    • Retorna o tamanho da janela de cada média móvel, em formato de dicionário.
  • macd.short_max_len: Número inteiro.
    • Tamanho da janela da média móvel de curto período.
  • macd.long_max_len: Número inteiro.
    • Tamanho da janela da média móvel de longo período.
  • macd.signal_max_len: Número inteiro.
    • Tamanho da janela da média móvel do sinal.
  • macd.count: Número inteiro.
    • Número de elementos armazenados na média móvel mais longa atualmente.
  • macd.is_stable: Booleano (valor True ou False).
    • Se True, todas as médias móveis já são estáveis; se False, alguma média móvel ainda não é estável.
  • macd.data: Dicionário mapeando as strings 'long', 'short' e 'signal' para numpy.arrays (listas de dados do numpy).
    • Retorna os valores contidos atualmente em cada média móvel, em ordem crescente de tempo de inserção, em formato de dicionário.
  • macd.max: Dicionário mapeando as strings 'long', 'short' e 'signal' para números.
    • Retorna o valor máximo contido atualmente em cada média móvel, em formato de dicionário.
  • macd.min: Dicionário mapeando as strings 'long', 'short' e 'signal' para números.
    • Retorna o valor mínimo contido atualmente em cada média móvel, em formato de dicionário.


rsi

Descrição:
Instancia duas stacks com médias móveis suavizadas para o cálculo do Índice de Força Relativa (Relative Strength Index).

Chamada:
ta.rsi(max_len)

  • max_len: Número inteiro positivo. Default 14.
    • Tamanho da janela acompanhada pelas stacks.

Retorno:
Retorna o indicador RSI instanciado.

Campos:

  • rsi.add(value): Método.
    • Insere um novo valor nas stacks.
  • rsi.value: Número.
    • Valor do índice de força relativa (RSI).
  • rsi.reset(): Método.
    • Reinicia as stacks para seus estados iniciais vazios, ignorando quaisquer dados inseridos previamente.
  • rsi.max_len: Número inteiro.
    • Tamanho da janela acompanhada pelas stacks.
  • rsi.count: Número inteiro.
    • Número de elementos armazenados atualmente.
  • rsi.is_stable: Booleano (valor True ou False).
    • Se True, todas as médias móveis já são estáveis; se False, alguma média móvel ainda não é estável.
  • rsi.data: Dicionário mapeando as strings 'up', e 'down' para numpy.arrays (listas de dados do numpy).
    • Retorna os valores contidos atualmente em cada média móvel, em ordem crescente de tempo de inserção, em formato de dicionário.
  • rsi.max: Dicionário mapeando as strings 'up', e 'down' para números.
    • Retorna o valor máximo contido atualmente em cada média móvel, em formato de dicionário.
  • rsi.min: Dicionário mapeando as strings 'up', e 'down' para números.
    • Retorna o valor mínimo contido atualmente em cada média móvel, em formato de dicionário.


dmi

Descrição:
Instancia um conjunto de stacks com médias móveis para o cálculo do Índice de Movimento Direcional (Directional Movement Index).

Chamada:
ta.dmi(max_len, moving_average_type, alpha)

  • max_len: Número inteiro positivo. Default 14.
    • Tamanho da janela acompanhada pelas stacks.
  • moving_average_type: String. Default 'SMMA'.
    • Define o tipo de média móvel que será aplicada aos dados. As opções são 'SMMA' (média móvel suavizada), 'SMA' (média móvel simples) e 'EMA' (média móvel exponencial).
  • alpha: Número entre 0 e 1. Default None.
    • Este parâmetro só pode ser definido se o parâmetro moving_average_type for 'EMA'. É o peso do elemento mais recente no cálculo da média exponencial. Seu complementar é também o fator de decaimento do peso dos elementos mais antigos no cálculo da média exponencial. Caso alpha não seja explicitamente fornecido para 'EMA', a constante usada no cálculo da EMA é dada pela fórmula padrão alpha = 2 / (max_len + 1).

Retorno:
Retorna o indicador DMI instanciado.

Campos:

  • dmi.add(bar): Método.
    • Insere uma nova barra (objeto bar) nas stacks.
  • dmi.value: Número.
    • Valor atual do Índice de Movimento Direcional (DMI).
  • dmi.pos_di: Número.
    • Valor atual do Indicador Direcional Positivo (+DI).
  • dmi.neg_di: Número.
    • Valor atual do Indicador Direcional Negativo (-DI).
  • dmi.moving_average_type: String.
    • Tipo de média móvel usado no cálculo do DMI.
  • dmi.alpha: Número.
    • Valor de alpha usado nas médias móveis.
    • Obs.: Este campo só existe se o tipo de média móvel selecionado for 'EMA' ou 'SMMA'.
  • dmi.reset(): Método.
    • Reinicia as stacks para seus estados iniciais vazios, ignorando quaisquer dados inseridos previamente.
  • dmi.resize(max_len): Método.
    • Altera o tamanho da janela das stacks, mantendo as informações já armazenadas.
    • Obs.: Este método só pode ser usado se o tipo de média móvel selecionado for 'SMA' ou 'EMA'.
  • dmi.max_len: Número inteiro.
    • Retorna o tamanho da janela acompanhada pelas stacks.
  • dmi.count: Número inteiro.
    • Retorna o número de elementos armazenados atualmente.
  • dmi.is_stable: Booleano (valor True ou False).
    • Se True, todas as médias móveis já são estáveis; se False, alguma média móvel ainda não é estável.
  • dmi.data: Dicionário mapeando as strings '+DM', '-DM' e 'ATR' para numpy.arrays (listas de dados do numpy).
    • Retorna os valores contidos atualmente em cada stack, em ordem crescente de tempo de inserção, em formato de dicionário.
  • dmi.max: Dicionário mapeando as strings '+DM', '-DM' e 'ATR' para números.
    • Retorna o valor máximo contido atualmente em cada stack, em formato de dicionário.
  • dmi.min: Dicionário mapeando as strings '+DM', '-DM' e 'ATR' para números.
    • Retorna o valor mínimo contido atualmente em cada stack, em formato de dicionário.


adx

Descrição:
Instancia um conjunto de stacks com médias móveis para o cálculo do Índice de Movimento Direcional Médio (Average Directional Movement Index).

Chamada:
ta.adx(max_len, moving_average_type, alpha)

  • max_len: Número inteiro positivo. Default 14.
    • Tamanho da janela acompanhada pelas stacks.
  • moving_average_type: String. Default 'SMMA'.
    • Define o tipo de média móvel que será aplicada aos dados. As opções são 'SMMA' (média móvel suavizada), 'SMA' (média móvel simples) e 'EMA' (média móvel exponencial).
  • alpha: Número entre 0 e 1. Default None.
    • Este parâmetro só pode ser definido se o parâmetro moving_average_type for 'EMA'. É o peso do elemento mais recente no cálculo da média exponencial. Seu complementar é também o fator de decaimento do peso dos elementos mais antigos no cálculo da média exponencial. Caso alpha não seja explicitamente fornecido para 'EMA', a constante usada no cálculo da EMA é dada pela fórmula padrão alpha = 2 / (max_len + 1).

Retorno:
Retorna o indicador ADX instanciado.

Campos:

  • adx.add(bar): Método.
    • Insere uma nova barra (objeto bar) nas stacks.
  • adx.value: Número.
    • Valor atual do Índice de Movimento Direcional Médio (ADX).
  • adx.dx: Número.
    • Valor atual do Índice de Movimento Direcional (DX, ou DMI).
  • adx.pos_di: Número.
    • Valor atual do Indicador Direcional Positivo (+DI).
  • adx.neg_di: Número.
    • Valor atual do Indicador Direcional Negativo (-DI).
  • adx.moving_average_type: String.
    • Tipo de média móvel usado no cálculo do ADX.
  • adx.alpha: Número.
    • Valor de alpha usado nas médias móveis.
    • Obs.: Este campo só existe se o tipo de média móvel selecionado for 'EMA' ou 'SMMA'.
  • adx.reset(): Método.
    • Reinicia as stacks para seus estados iniciais vazios, ignorando quaisquer dados inseridos previamente.
  • adx.resize(max_len): Método.
    • Altera o tamanho da janela das stacks, mantendo as informações já armazenadas.
    • Obs.: Este método só pode ser usado se o tipo de média móvel selecionado for 'SMA' ou 'EMA'.
  • adx.max_len: Número inteiro.
    • Retorna o tamanho da janela acompanhada pelas stacks.
  • adx.count: Número inteiro.
    • Retorna o número de elementos armazenados atualmente.
  • adx.is_stable: Booleano (valor True ou False).
    • Se True, todas as médias móveis já são estáveis; se False, alguma média móvel ainda não é estável.
  • adx.data: Dicionário mapeando as strings '+DM', '-DM', 'ATR' e 'DX' para numpy.arrays (listas de dados do numpy).
    • Retorna os valores contidos atualmente em cada stack, em ordem crescente de tempo de inserção, em formato de dicionário.
  • adx.max: Dicionário mapeando as strings '+DM', '-DM' ,'ATR' e 'DX'para números.
    • Retorna o valor máximo contido atualmente em cada stack, em formato de dicionário.
  • adx.min: Dicionário mapeando as strings '+DM', '-DM' ,'ATR' e 'DX'para números.
    • Retorna o valor mínimo contido atualmente em cada stack, em formato de dicionário.


sto

Descrição:
Instancia uma bar_stack e um conjunto de médias móveis para o cálculo do Oscilador Estocástico (Stochastic Oscillator).

Chamada:
ta.sto(max_len, smoothing_period, moving_average_type, alpha)

  • max_len: Número inteiro positivo. Default 14.
    • Tamanho da janela acompanhada pela bar_stack.
  • smoothing_period: Número inteiro positivo. Default 3.
    • Tamanho do período das médias móveis que suavizam os indicadores.
  • moving_average_type: String. Default 'SMA'.
    • Define o tipo de média móvel que será aplicada. As opções são 'SMMA' (média móvel suavizada), 'SMA' (média móvel simples) e 'EMA' (média móvel exponencial).
  • alpha: Número entre 0 e 1. Default None.
    • Este parâmetro só pode ser definido se o parâmetro moving_average_type for 'EMA'. É o peso do elemento mais recente no cálculo da média exponencial. Seu complementar é também o fator de decaimento do peso dos elementos mais antigos no cálculo da média exponencial. Caso alpha não seja explicitamente fornecido para 'EMA', a constante usada no cálculo da EMA é dada pela fórmula padrão alpha = 2 / (max_len + 1).

Retorno:
Retorna o indicador STO instanciado.

Campos:

  • sto.add(bar): Método.
    • Insere uma nova barra (objeto bar) nas stacks.
  • sto.value: Número.
    • Retorna sto.d.
  • sto.k: Número.
    • Valor atual do indicador K (raw K).
  • sto.d: Número.
    • Valor atual do indicador D (raw D ou fast D).
  • sto.d_slow: Número.
    • Valor do indicador D suavizado (smooth D ou slow D).
  • sto.moving_average_type: String.
    • Tipo de média móvel usada.
  • sto.alpha: Número.
    • Valor de alpha usado nas médias móveis.
    • Obs.: Este campo só existe se o tipo de média móvel selecionado for 'EMA' ou 'SMMA'.
  • sto.reset(): Método.
    • Reinicia as stacks para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • sto.max_len: Número inteiro.
    • Tamanho da janela da bar_stack.
  • sto.count: Número inteiro.
    • Número de barras armazenadas na bar_stack atualmente.
  • sto.is_stable: Booleano (valor True ou False).
    • Se True, a bar_stack e as médias móveis são estáveis; se False, alguma stack ainda não é instável.
  • sto.data: Dicionário mapeando strings para numpy.arrays (lista de dados do numpy).
    • Retorna os dados contidos na bar_stack e nas médias móveis dos indicadores (nos campos 'k' e 'd'), em ordem crescente de tempo de inserção, em forma de dicionário de campo para lista.
  • sto.max: Dicionário mapeando strings para números.
    • Retorna o máximo de cada campo na bar_stack e das médias móveis dos indicadores (nos campos 'k' e 'd'), em forma de dicionário.
  • sto.min: Dicionário mapeando strings para números.
    • Retorna o mínimo de cada campo na bar_stack e das médias móveis dos indicadores (nos campos 'k' e 'd'), em forma de dicionário.


smi

Descrição:
Instancia uma bar_stack e um conjunto de médias móveis para o cálculo do Índice de Momento Estocástico (Stochastic Momentum Index).

Chamada:
ta.smi(max_len, smoothing_period, moving_average_type, alpha)

  • max_len: Número inteiro positivo. Default 14.
    • Tamanho da janela acompanhada pela bar_stack.
  • smoothing_period: Número inteiro positivo. Default 3.
    • Tamanho do período das médias móveis que suavizam os indicadores.
  • moving_average_type: String. Default 'SMA'.
    • Define o tipo de média móvel que será aplicada. As opções são 'SMMA' (média móvel suavizada), 'SMA' (média móvel simples) e 'EMA' (média móvel exponencial).
  • alpha: Número entre 0 e 1. Default None.
    • Este parâmetro só pode ser definido se o parâmetro moving_average_type for 'EMA'. É o peso do elemento mais recente no cálculo da média exponencial. Seu complementar é também o fator de decaimento do peso dos elementos mais antigos no cálculo da média exponencial. Caso alpha não seja explicitamente fornecido para 'EMA', a constante usada no cálculo da EMA é dada pela fórmula padrão alpha = 2 / (max_len + 1).

Retorno:
Retorna o indicador SMI instanciado.

Campos:

  • smi.add(bar): Método.
    • Insere uma nova barra (objeto bar) nas stacks.
  • smi.value: Número.
    • Retorna smi.smi.
  • smi.smi: Número.
    • Valor atual do Índice de Momento Estocástico (raw SMI ou fast SMI).
  • smi.smi_slow: Número.
    • Valor suavizado do Índice de Momento Estocástico (smooth SMI ou slow SMI).
  • smi.moving_average_type: String.
    • Tipo de média móvel usada.
  • smi.alpha: Número.
    • Valor de alpha usado nas médias móveis.
    • Obs.: Este campo só existe se o tipo de média móvel selecionado for 'EMA' ou 'SMMA'.
  • smi.reset(): Método.
    • Reinicia as stacks para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • smi.max_len: Número inteiro.
    • Tamanho da janela da bar_stack.
  • smi.count: Número inteiro.
    • Número de barras armazenadas na bar_stack atualmente.
  • smi.is_stable: Booleano (valor True ou False).
    • Se True, a bar_stack e as médias móveis são estáveis; se False, alguma stack ainda não é instável.
  • smi.data: Dicionário mapeando strings para numpy.arrays (lista de dados do numpy).
    • Retorna os dados contidos na bar_stack e na média móvel do SMI (no campo 'smi'), em ordem crescente de tempo de inserção, em forma de dicionário de campo para lista.
  • smi.max: Dicionário mapeando strings para números.
    • Retorna o máximo de cada campo na bar_stack e da média móvel do SMI (no campo 'smi'), em forma de dicionário.
  • smi.min: Dicionário mapeando strings para números.
    • Retorna o mínimo de cada campo na bar_stack e da média móvel do SMI (no campo 'smi'), em forma de dicionário.


psar

Descrição:
Instancia uma bar_stack para o cálculo do indicador Parabolic Stop-And-Reverse (Parabolic SAR).

Chamada:
ta.psar(max_len, acc_factor, max_acc)

  • max_len: Número inteiro positivo. Default 22.
    • Tamanho da janela acompanhada pela bar_stack.
  • acc_factor: Número. Default 0.02.
    • Fator de aceleração (inicial).
  • max_acc: Número. Default 0.2.
    • Aceleração máxima permitida.

Retorno:
Retorna o indicador PSAR inicializado.

Campos:

  • psar.add(bar): Método.
    • Insere uma nova barra (objeto bar) na bar_stack.
  • psar.value: Tupla com um número e uma string.
    • Retorna o par (psar.sar, psar.direction).
  • psar.sar: Número.
    • Valor atual do indicador Parabolic SAR.
  • psar.direction: String.
    • Tendência atual da curva. Pode ser 'up' ou 'down'.
  • psar.ep: Número.
    • Valor do ponto extremo durante a tendência atual. Pode ser psar.hp ou psar.lp, dependendo da direção.
  • psar.hp: Número.
    • Valor do ponto mais alto durante a tendência atual.
  • psar.lp: Número.
    • Valor do ponto mais baixo durante a tendência atual.
  • psar.init_acc: Número.
    • Fator de aceleração inicial.
  • psar.cur_acc: Número.
    • Fator de aceleração atual.
  • psar.max_acc: Número.
    • Máximo fator de aceleração permitido.
  • psar.reset(): Método.
    • Reinicia a bar_stack para seu estado inicial vazio, ignorando quaisquer dados inseridos previamente.
  • psar.resize(max_len): Método.
    • Altera o tamanho da janela da bar_stack, mantendo as informações já armazenadas.
  • psar.max_len: Número inteiro.
    • Tamanho da janela da bar_stack.
  • psar.count: Número inteiro.
    • Número de barras armazenadas na bar_stack atualmente.
  • psar.is_stable: Booleano (valor True ou False).
    • Se True, a bar_stack já atingiu seu tamanho máximo; se False, o tamanho máximo ainda não foi atingido.
  • psar.data: Dicionário mapeando strings para numpy.arrays (lista de dados do numpy).
    • Retorna os dados contidos na bar_stack, em ordem crescente de tempo de inserção, em forma de dicionário de campo para lista (por exemplo, {'open': [1,2,3], 'vwap': [2,3,4]}).
  • psar.max: Dicionário mapeando strings para números.
    • Retorna o máximo de cada campo na bar_stack em forma de dicionário (por exemplo, {'low': 20.5, 'high': 21.3}).
  • psar.min: Dicionário mapeando strings para números.
    • Retorna o mínimo de cada campo na bar_stack em forma de dicionário (por exemplo, {'low': 15.4, 'high': 16.1}).
  • psar.sum: Dicionário mapeando strings para números.
    • Retorna a soma de cada campo da bar_stack em forma de dicionário (por exemplo, {'open': 10.3, 'close': 11.4}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • psar.mean: Dicionário mapeando strings para números.
    • Retorna a média aritmética de cada campo da bar_stack em forma de dicionário (por exemplo, {'high': 15.3, 'vwap': 14.4}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • psar.variance: Dicionário mapeando strings para números.
    • Retorna a variância de cada campo da bar_stack em forma de dicionário (por exemplo, {'low': 0.25, 'vwap': 0.09}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • psar.std: Dicionário mapeando strings para números.
    • Retorna o desvio padrão de cada campo da bar_stack em forma de dicionário (por exemplo, {'low': 0.5, 'vwap': 0.3}).
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.
  • psar.zscore: Dicionário mapeando strings para números.
    • Retorna o Z-score de cada campo da bar_stack em forma de dicionário.
    • Obs.: Mesmo que ativos, os campos close_time e first_trade_time não serão incluídos na resposta.


stats

pair_linreg

Descrição:
Calcula a regressão linear entre duas séries temporais. Apenas os elementos que estiverem nas interseções de tempo das duas séries serão considerados na regressão dos valores.

Chamada:
pair_linreg(x, y, force_null_intercept, half_life, pair_type, upper_barrier, lower_barrier)

  • x: lista, numpy.ndarray, pandas.Series ou pandas.DataFrame contendo valores numéricos.
    • Caso seja um DataFrame, deve possuir duas colunas (preferencialmente nomeadas 'x' e 'y') que serão analisadas na regressão linear. Caso contrário, deverá conter os dados da variável independente da regressão linear. Se for um pandas.Series, somente serão levados em conta os dados que possuírem interseção de índice com os dados de y.
  • y: lista, numpy.ndarray ou pandas.Series, default None.
    • Deve ser especificado se e somente se x for não for um pandas.DataFrame. Nesse caso, deve conter os dados da variável dependente da regressão linear. Se for um pandas.Series, somente serão levados em conta os dados que possuírem interseção de índice com os dados de x. Deve apresentar o mesmo tipo de x.
  • force_null_intercept: Booleano (True ou False), default False.
    • Se True, a regressão linear será feita forçando-se o coeficiente linear para 0, caso contrário o coeficiente angular será calculado normalmente.
  • half_life: Booleano (True ou False), default False.
    • Se True, o período de half_life das divergências da reta regressão será calculado.
  • pair_type: String, default None.
    • Somente pode ser utilizado se half_life for True. Define que tipo de relação entre o par de séries será analisada pelo cálculo do half_life. As opções são 'ratio' (), 'spread' () e 'log spread' (, onde é o coeficiente angular da regressão). Se half_life for True e pair_type não for especificado, assumirá valor 'ratio'.
  • upper_barrier: Número inteiro, default 2.
    • O half_life corresponde à queda da divergência da reta da regressão à metade do seu valor. Se for desejado, em vez disso pode ser calculado o tempo de queda de certo Z-Score superior até certo Z-Score inferior. Este parâmetro define o Z-Score superior.
  • lower_barrier: Número inteiro, default 1.
    • O half_life corresponde à queda da divergência da reta da regressão à metade do seu valor. Se for desejado, em vez disso pode ser calculado o tempo de queda de certo Z-Score superior até certo Z-Score inferior. Este parâmetro define o Z-Score inferior.

Retorno:
Retorna um dicionário com os campos slope (coeficiente angular da regressão linear), intercept (coeficiente linear da regressão linear), r_value (coeficiente de correlação da regressão linear) e, se pedido o campo half_life.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from dorothy import StrategyBase
from finmath import stats, ta

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='PETR4')

        # Definindo um bar stack para armazenar os 20 preços de open e close mais recentes a partir do módulo ta do finmath
        self.stack = ta.bar_stack(20, open=True, close=True)

    ...

    def on_bar_close(self, bar):
        # Inserindo novas barras no stack
        self.stack.add(bar)

        # Se o stack já estiver completo, fazer a regressão linear pareada
        if self.stack.is_stable:
            # Recuperando os dados do stack
            data = self.stack.data

            # Definindo x como os opens e y como os closes mais recentes
            x = data['open']
            y = data['close']

            # Printing paired linear regression results
            print(stats.pair_linreg(x=x, y=y))


converters

As barras providas pela plataforma agrupam as informações por tempo. As barras de minuto, por exemplo, agrupam informações de trade e fecham uma nova barra a cada minuto que passa. Em algumas situações, pode ser mais interessante que as barras fechem não por tempo, mas por outro parâmetro, como por exemplo volume de ações ou volume financeiro negociado. Para isso, o módulo finmath.converters disponibiliza conversores de barras, que recebem barras (normalmente no formato de barras temporais, providas diretamente pela plataforma) e retorna barras em outro formato. Atenção: Indica-se o uso de um conversor por ativo. As informações das barras serão misturadas se o mesmo conversor for usado para mais de um ativo. As conversões disponíveis na plataforma são as seguintes:

volume_bar

Descrição:
Instancia um conversor de barras (normalmente de tempo) para barras de volume de ações.

Chamada:
converters.volume_bar(volume)

  • volume: Número.
    • Volume de ações das barras convertidas

Retorno:
Retorna o conversor instanciado.

Campos:

  • volume_bar.convert(bar): Método.
    • Insere uma nova barra no conversor e retorna (se o volume inserido já for suficiente) uma lista com uma ou mais barras de volume. No caso de o volume ser suficiente para retornar mais de uma barra, os valores das barras retornadas serão obtidos por interpolações lineares dos valores das barras providas.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import converters

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo um conversor para formar barras com volume de 10000 ações
        self.vb = converters.volume_bar(volume=10000)

    ...

    def on_bar_close(self, bar):
        # Adicionando a nova barra no conversor
        volume_bars = self.vb.convert(bar)

        # Rodando algoritmo do on_bar_close com as barras de volume geradas pelo conversor em vez das barras de tempo da plataforma
        for bar in volume_bars:
            ...


dollar_bar

Descrição:
Instancia um conversor de barras (normalmente de tempo) para barras de volume financeiro.

Chamada:
converters.dollar_bar(amount)

  • amount: Número.
    • Volume financeiro das barras convertidas

Retorno:
Retorna o conversor instanciado.

Campos:

  • dollar_bar.convert(bar): Método.
    • Insere uma nova barra no conversor e retorna (se o volume financeiro inserido já for suficiente) uma lista com uma ou mais barras de volume financeiro. No caso de o volume financeiro ser suficiente para retornar mais de uma barra, os valores das barras retornadas serão obtidos por interpolações lineares dos valores das barras providas.

Exemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
from dorothy import StrategyBase
from finmath import converters

class Strategy(StrategyBase):
    def on_init(self, settings):
        # Assinando o instrumento de interesse
        self.instrument = self.data.subscribe.bar_close(instruments='ABEV3')

        # Definindo um conversor para formar barras com volume financeiro de R$100,000.00
        self.db = converters.dollar_bar(volume=100000)

    ...

    def on_bar_close(self, bar):
        # Adicionando a nova barra no conversor
        dollar_bars = self.db.convert(bar)

        # Rodando algoritmo do on_bar_close com as barras de volume financeiro geradas pelo conversor em vez das barras de tempo da plataforma
        for bar in dollar_bars:
            ...