Created
August 22, 2018 01:20
-
-
Save renzon/a4cc7170bcaea97ba4a7ea259d086d06 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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