Variations du prix des options d'achat d'actions par ordre des utilisateurs (achat / vente)

StackOverflow https://stackoverflow.com/questions/9379261

  •  28-10-2019
  •  | 
  •  

Question

Suite à cette question Générer une variation fictive du prix des stock-options

Je souhaite simuler que le prix change, tandis que les utilisateurs donnent un ordre d'achat ou de vente, comme la vraie bourse. (Je fais un cas utilisateur pour vous aider à comprendre.)

État initial "Exemple d'options sur actions" :

Société X, prix de l'option d'achat d'actions 20 000 $

Une tâche CRON fait la variation de prix chaque seconde, avec ce script PHP:

function stockVariation($price,$max_up,$max_down)
{
    // Variation calculate, with volatility max (10 to 100)
    $ratio=(mt_rand(0,$max_up)-mt_rand(0,$max_down))/10000;
    // New price
    $price+=$ratio; 

    return round($price,5);
}

La volatilité est causée par des nouvelles aléatoires qui font $ max_up> $ max_down ou $ max_up

Résultat en image (1heure par minutes) Variation du prix des options sur actions

Cas utilisateur "Exemple d'achat" :

  • Un utilisateur a envoyé une commande pour acheter 1 000 de cette option à 18 000 USD
  • Le système stocke la commande dans la base de données
  • Une tâche CRON vérifie chaque minute, si le prix était <= à un ordre d'achat, la dernière minute
  • Lorsque le prix de cette option <= à cette commande, l'utilisateur obtient cette option d'achat d'actions.

Cas utilisateur "Exemple de vente" :

  • Un utilisateur a envoyé une commande pour vendre 1 000 de cette option à 22 000 USD
  • Le système stocke la commande dans la base de données
  • Une tâche CRON vérifie chaque minute, si le prix était>= à un ordre de vente, à la dernière minute
  • Lorsque le prix de cette option>= à cet ordre, l'utilisateur vend cette option d'achat d'actions.

Mon problème

Cela fonctionne bien, mais ce n'est pas une vraie variation d'un marché boursier.

Ma question

Comment faire la variation de prix par les prix et les quantités des commandes?

Comme la "loi de l'offre et de la demande".

Par exemple ( modifier concernant la réponse de Peter ):

function stockOrder($orderPrice,$orderQuantity,$type)//$type= buy or sell
{
    // Record the order in database (ok)
    // Compare with other orders (ok) 
    // $orderPrice<=$dbSellPrice or $orderPrice>=$dbBuyPrice
    if checks
       // Buy and sell at the best prices 
       // for quantities available holded by users (ok)
       // Record/update the holding of the stock (ok)
       // Update the price of the stock
    end if       
}

Je suis peut-être un peu fou de penser qu'il serait possible d'automatiser cela, mais j'y crois, toute aide sera grandement appréciée.

Était-ce utile?

La solution

Je voulais juste développer un peu plus mon commentaire. Voici un scénario de base; Supposons que nous partions de zéro commande non exécutée dans la base de données / le système.

  1. L'utilisateur A soumet un ordre de vente limité pour 20 unités de stock X à 10 $.
  2. L'utilisateur B soumet un ordre d'achat limité pour 10 unités de Stock X à 12 $.

Après l'étape 1, vous aurez une commande non exécutée dans le système, car il n'y a aucune commande ouverte à égaler.

Après l'étape 2, la commande envoyée par l'utilisateur B peut être exécutée par une commande ouverte dans le système. (Pour simplifier, supposons que l'ordre de l'utilisateur A puisse être fractionné, c'est-à-dire qu'il ne s'agit pas d'un ordre du tout ou rien)

La raison pour laquelle l'ordre d'achat de l'utilisateur B peut être exécuté est pour ces deux raisons:

  1. Il existe un ordre de vente ouvert pour une quantité supérieure ou égale à la quantité de l'ordre d'achat.
  2. Le prix d'achat limite est supérieur ou égal au prix de vente limite, de sorte qu'un prix de transaction peut être convenu.

L'utilisateur A ne veut pas vendre pour moins de 10 $ et l'utilisateur B ne veut pas acheter pour plus de 12 $. Donc, dans ce cas, il existe une gamme de prix de transaction appropriés, c'est-à-dire que tout prix compris entre 10 et 12 $ convient.

Le problème est de trouver le prix de transaction approprié. Comment le déterminer? Choisissez le milieu de gamme? Ce n’est qu’une solution. (Dans un marché avec beaucoup de liquidités, vous n'aurez peut-être pas ce même genre de problème car il y aura beaucoup d'ordres ouverts à des prix différents et certains au prix du marché.)

Pour les besoins de l'exemple, disons que vous avez choisi un prix de transaction de 11 $, c'est-à-dire le milieu de la fourchette appropriée. La commande de l'utilisateur B serait maintenant exécutée et comme la commande de l'utilisateur A n'était que partiellement exécutée, il resterait une commande ouverte dans le système: l'utilisateur A pour vendre ses 10 unités restantes à 10 $. Le dernier cours d'échange serait mis à jour à 11 $.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top