Suponha que temos ainda outro dataframe com dados financeiros:
timestamp,close,security_code,volume,bid_volume,ask_volume
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.383985+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.384040+00:00,4968.5,ES,1,1,0
2024-02-05 01:00:01.385840+00:00,4968.5,ES,2,0,2
2024-02-05 01:00:01.385840+00:00,4968.5,ES,1,0,1
2024-02-05 01:00:01.385840+00:00,4968.5,ES,1,0,1
2024-02-05 01:00:01.385840+00:00,4968.5,ES,1,0,1
2024-02-05 01:00:01.385840+00:00,4968.5,ES,2,0,2
Poderíamos calcular o POC (o ponto de controle, onde a maioria dos contratos foram negociados) assim
def poc(self, df):
""" Calculate the POC. """
return df['close'].expanding().agg({'poc': lambda s:mode(s)[0]})['poc']
No entanto, isso não leva em consideração o volume. Se tiver sido negociado mais volume nesse nível específico, isso deve ser levado em consideração. Como alterar o mode
/ lambda de acordo?
Para levar em conta os volumes, você precisa agrupar
close
e calcular a soma:que retorna
Atualização: Adicionando uma janela contínua
Para fazer isso, você precisará determinar o menor horário de início e o maior horário de término e se preparar para percorrer esse intervalo em blocos (janelas) de x minutos cada (aqui escolhi 5). Em cada loop, calcule o preço de fechamento e some todos os volumes para cada preço.
que vai dar