2
votes

Existe-t-il une manière plus élégante / fonctionnelle de calculer un prix moyen?

J'ai rencontré cette tâche à quelques reprises et je pense que c'est assez courant dans le trading: calculer le prix moyen pondéré en fonction du volume.

J'ai ce tableau qui représente les exécutions du prix et de la quantité:

(sum exec qty*price from t)%(sum exec qty from t)

La façon dont je calcule habituellement le prix moyen est la suivante:

t:([] qty:500j, 1400j, 1700j, 600j, 1500j, 1500j, 1200j, 1300j, 1600j, 1700j; price:9.96 9.94 10.02 9.91 9.93 10.03 10.09 9.97 9.98 10.08)

Existe-t-il un moyen plus fonctionnel? Peut-être avec des adverbes?

kdb

0 commentaires

3 Réponses :


6
votes

Utilisez la fonction ' wavg ':

 q)select qty wavg price from t


1 commentaires

Je ne savais pas que cette fonction existe. Merci. Toujours impressionnant de voir à quel point q est puissant et vous permet d'exprimer ce que vous voulez exprimer avec si peu de code.



2
votes

Le moyen le plus simple serait d'utiliser select qty wavg price from t , mais remplacer select par exec renverra une valeur atomique plutôt que un tableau qui pourrait mieux répondre à vos besoins

exec qty wavg price from t

wavg a calculé le prix moyen pondéré par quantité.


0 commentaires

3
votes

Si vous utilisez une table sans clé:

t[`qty]wavg t[`price]


0 commentaires