Skip to content

Instantly share code, notes, and snippets.

@renzon
Created August 22, 2018 01:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save renzon/a4cc7170bcaea97ba4a7ea259d086d06 to your computer and use it in GitHub Desktop.
Save renzon/a4cc7170bcaea97ba4a7ea259d086d06 to your computer and use it in GitHub Desktop.
import datetime
data = [
{
'C01_tipo_de_registro': 1, 'C02_numero_de_negocios_por_codigo_de_negociacao': 10,
'C03_natureza_da_operacao': 'C', 'C04_codigo_de_negociacao': 'AAAA3',
'C05_tipo_de_mercado': 'VIS', 'C06_tipo_da_transacao': 'NOR',
'C07_nome_da_sociedade_emissora': 'Aa Aa Aa', 'C08_especificacao': 'ON NM',
'C09_quantidade_do_negocio': 100, 'C10_1_preco_do_negocio': 3.5,
'C11_codigo_do_usuario_contraparte': 999, 'C12_prazo_de_vencimento': '',
'C13_tipo_de_liquitacao': '',
'C14_hora_e_minuto_do_negocio': datetime.datetime(1900, 1, 1, 12, 27),
'C15_situacao_do_negocio': '', 'C16_codigo_objeto_do_papel': '',
'C17_codigo_do_cliente': 0, 'C18_digito_do_cliente': 0,
'C19_codigo_isin': 'BRAAAAACNOR1', 'C20_distribuicao_do_isin': 0,
'C21_fator_de_cotacao_do_negocio': 1, 'C22_1_preco_do_exercicio_da_serie_left': 0,
'C22_2_preco_do_exercicio_da_serie_right': 0, 'C23_indicador_de_after_market': '',
'C24_reserva': '', 'C25_prazo_de_vencimento': 0, 'C26_reserva': '',
'C27_bolsa_de_movimento': 1, 'C28_tipo_de_liquidacao': 1, 'C29_prazo_de_liquidacao': 3,
'C30_reserva': '000000000000', 'C31_bolsa_onde_foi_efetuado_o_negocio': 1,
'C32_tipo_de_operacao_de_compra': 'N'
},
{
'C01_tipo_de_registro': 1, 'C02_numero_de_negocios_por_codigo_de_negociacao': 10,
'C03_natureza_da_operacao': 'C', 'C04_codigo_de_negociacao': 'AAAA3',
'C05_tipo_de_mercado': 'VIS', 'C06_tipo_da_transacao': 'NOR',
'C07_nome_da_sociedade_emissora': 'Aa Aa Aa', 'C08_especificacao': 'ON NM',
'C09_quantidade_do_negocio': 200, 'C10_1_preco_do_negocio': 4.1,
'C11_codigo_do_usuario_contraparte': 999, 'C12_prazo_de_vencimento': '',
'C13_tipo_de_liquitacao': '',
'C14_hora_e_minuto_do_negocio': datetime.datetime(1900, 1, 1, 12, 27),
'C15_situacao_do_negocio': '', 'C16_codigo_objeto_do_papel': '',
'C17_codigo_do_cliente': 0, 'C18_digito_do_cliente': 0,
'C19_codigo_isin': 'BRAAAAACNOR1', 'C20_distribuicao_do_isin': 0,
'C21_fator_de_cotacao_do_negocio': 1, 'C22_1_preco_do_exercicio_da_serie_left': 0,
'C22_2_preco_do_exercicio_da_serie_right': 0, 'C23_indicador_de_after_market': '',
'C24_reserva': '', 'C25_prazo_de_vencimento': 0, 'C26_reserva': '',
'C27_bolsa_de_movimento': 1, 'C28_tipo_de_liquidacao': 1, 'C29_prazo_de_liquidacao': 3,
'C30_reserva': '000000000000', 'C31_bolsa_onde_foi_efetuado_o_negocio': 1,
'C32_tipo_de_operacao_de_compra': 'N'
},
{
'C01_tipo_de_registro': 1, 'C02_numero_de_negocios_por_codigo_de_negociacao': 10,
'C03_natureza_da_operacao': 'V', 'C04_codigo_de_negociacao': 'AAAA3',
'C05_tipo_de_mercado': 'VIS', 'C06_tipo_da_transacao': 'NOR',
'C07_nome_da_sociedade_emissora': 'Aa Aa Aa', 'C08_especificacao': 'ON NM',
'C09_quantidade_do_negocio': 500, 'C10_1_preco_do_negocio': 5.1,
'C11_codigo_do_usuario_contraparte': 999, 'C12_prazo_de_vencimento': '',
'C13_tipo_de_liquitacao': '',
'C14_hora_e_minuto_do_negocio': datetime.datetime(1900, 1, 1, 12, 27),
'C15_situacao_do_negocio': '', 'C16_codigo_objeto_do_papel': '',
'C17_codigo_do_cliente': 0, 'C18_digito_do_cliente': 0,
'C19_codigo_isin': 'BRAAAAACNOR1', 'C20_distribuicao_do_isin': 0,
'C21_fator_de_cotacao_do_negocio': 1, 'C22_1_preco_do_exercicio_da_serie_left': 0,
'C22_2_preco_do_exercicio_da_serie_right': 0, 'C23_indicador_de_after_market': '',
'C24_reserva': '', 'C25_prazo_de_vencimento': 0, 'C26_reserva': '',
'C27_bolsa_de_movimento': 1, 'C28_tipo_de_liquidacao': 1, 'C29_prazo_de_liquidacao': 3,
'C30_reserva': '000000000000', 'C31_bolsa_onde_foi_efetuado_o_negocio': 1,
'C32_tipo_de_operacao_de_compra': 'N'
}
]
def agregar(data: list):
agregados = {}
for dct in data:
isin = dct['C19_codigo_isin']
agregado = agregados.get(isin, {'operacoes': {}})
agregados[isin] = agregado
agregado['ticker'] = dct['C04_codigo_de_negociacao']
natureza_operacao = dct['C03_natureza_da_operacao']
operacao = agregado['operacoes'].get(
natureza_operacao,
{
'qtd': 0,
'px': 0,
'tx_avg': 0,
}
)
agregado['operacoes'][natureza_operacao] = operacao
operacao['qtd'] += dct['C09_quantidade_do_negocio']
operacao['px'] += dct['C09_quantidade_do_negocio'] * dct['C10_1_preco_do_negocio']
operacao['tx_avg'] = operacao['px'] / operacao['qtd']
return agregados
def test():
agregados = {
'BRAAAAACNOR1': { # 'C19_codigo_isin'
'ticker': 'AAAA3', # 'C04_codigo_de_negociacao'
'operacoes': {
'C': { # 'C03_natureza_da_operacao'
'qtd': 300, # sum('C09_quantidade_do_negocio')
'px': 1170.0, # (100 * 3.5) + (200 * 4.1) #
'tx_avg': 3.9 # px / qtd
},
'V': {
'qtd': 500,
'px': 2550.0,
'tx_avg': 5.1
}
}
}
}
assert agregados == agregar(data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment