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?
3 Réponses :
Utilisez la fonction ' wavg ':
q)select qty wavg price from t
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.
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é.
Si vous utilisez une table sans clé:
t[`qty]wavg t[`price]