Tenho uma tabela com registro de data e hora/símbolo onde cada linha tem um registro de data e hora incremental e um símbolo aleatório.
q)sym:`aapl`tsla`aapl`msft`tsla`qcom`msft`tsla`aapl`qcom
::
q)t:([] ts:.z.p+til count sym;sym)
::
q)t
ts sym
----------------------------------
2025.02.09D14:43:43.054056807 aapl
2025.02.09D14:43:43.054056808 tsla
2025.02.09D14:43:43.054056809 aapl
2025.02.09D14:43:43.054056810 msft
2025.02.09D14:43:43.054056811 tsla
2025.02.09D14:43:43.054056812 qcom
2025.02.09D14:43:43.054056813 msft
2025.02.09D14:43:43.054056814 tsla
2025.02.09D14:43:43.054056815 aapl
2025.02.09D14:43:43.054056816 qcom
Quero adicionar uma coluna com preços aleatórios em que cada linha esteja dentro de +/-(N*delta_unit) do último preço para esse símbolo. Por exemplo, suponha que o preço inicial para aapl
seja $200,00 e delta_unit seja 0,01. Se N for 2, cada preço subsequente para aapl deve estar dentro de $0,02 do último preço:
ts sym
----------------------------------
2025.02.09D14:43:43.054056807 aapl $200.00
2025.02.09D14:43:43.054056808 tsla
2025.02.09D14:43:43.054056809 aapl $199.98
2025.02.09D14:43:43.054056810 msft
2025.02.09D14:43:43.054056811 tsla
2025.02.09D14:43:43.054056812 qcom
2025.02.09D14:43:43.054056813 msft
2025.02.09D14:43:43.054056814 tsla
2025.02.09D14:43:43.054056815 aapl $199.99
Como posso gerar preços aleatórios como esse (talvez dado um mapa do símbolo até o preço inicial)?
Você pode querer ajustar isso ao seu gosto, mas aqui vai um ponto de partida.
genpx abaixo pega delta_unit, N e sym. O preço inicial do dicionário é o primeiro valor que é então unido a uma lista de n-1 de mudanças de preço.
n?-1 1
gera valores +/- multiplicados por um valor N aleatório (por exemplo, 5). Isso é multiplicado pela entrada delta_unit (por exemplo, 0,01) e, finalmente,sums
para obter o resultado final dos preços em movimento para cima/baixo.