Pregunta

Siguiendo esta pregunta Generar una variación de precio de opción de acción ficticia

Deseo simular que el cambio de precio, mientras que los usuarios dan un pedido de compra o venta, como la bolsa de valores real. (Hago un caso de usuario para ayudarlo a comprender).

Estado inicial "Ejemplo de opción de acción" :

Compañía X, precio de la opción de acciones $ 20,000

Una tarea cron hace que la variación del precio cada segundo, con este 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 volatilidad se realiza con noticias aleatorias que fabrica $ max_up> $ max_down o $ max_up <max_down por un tiempo aleatorio. Entre, $ max_up = $ max_down.

Resultar en una imagen (1 hora por minutos)Stock option price variation

Caso de usuario "Comprar ejemplo" :

  • Un usuario envía un pedido para comprar 1000 de esta opción a $ 18,000
  • El sistema almacena el pedido en la base de datos
  • Una tarea cron verificar cada minuto, si el precio era <= a un pedido de compra, el último minuto
  • Cuando el precio de esta opción <= a este pedido, el usuario obtiene esta opción de acciones.

Caso de usuario "Ejemplo de venta" :

  • Un usuario envía un pedido para vender 1000 de esta opción a $ 22,000
  • El sistema almacena el pedido en la base de datos
  • Una tarea cron verificar cada minuto, si el precio era> = a un pedido de venta, el último minuto
  • Cuando el precio de esta opción> = a este pedido, el usuario vende esta opción de acciones.

Mi problema

Funciona bien, pero no es una variación real de un mercado de la bolsa de valores.

Mi pregunta

¿Cómo hacer la variación de precios por los precios y las cantidades de los pedidos?

Como la "Ley de oferta y demanda".

Por ejemplo (editar sobre la respuesta 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       
}

Tal vez estoy un poco loco al pensar que podría ser posible automatizar eso, pero creo que cualquier ayuda será muy apreciada.

¿Fue útil?

Solución

Solo quería ampliar mi comentario un poco más. Aquí hay un escenario básico; Suponga que comenzamos desde órdenes no cumplidos cero en la base de datos/sistema.

  1. El usuario A envía una orden de venta límite para 20 unidades de acciones x @ $ 10.
  2. El usuario B envía un pedido de compra límite para 10 unidades de acciones x @ $ 12.

Después del paso 1, tendrá un pedido no cumplido en el sistema, ya que no hay órdenes abiertas para que coincidan.

Después del paso 2, el usuario del pedido B envió pueden ser cumplido por un orden abierto en el sistema. (Por simplicidad, supongamos que el pedido del usuario A se puede romper, es decir, no es un pedido de todo o no))

La razón por la cual se puede cumplir el pedido de compra del usuario B es por estas dos razones:

  1. Hay un pedido de venta de venta abierta para una cantidad mayor o igual a la cantidad de pedido de compra.
  2. El precio de compra límite es mayor o igual al precio de venta límite, por lo que se puede acordar un precio de transacción.

El usuario A no quiere vender por menos de $ 10, y el usuario B no quiere comprar por más de $ 12. Entonces, en este caso, hay una gama de precios de transacciones adecuados, es decir, cualquier precio entre $ 10-12 es adecuado.

El problema es encontrar el precio de transacción adecuado. ¿Cómo determinarlo? ¿Elige el medio de la gama? Esta es solo una solución. (En un mercado con mucha liquidez, es posible que no tenga este mismo tipo de problema, ya que habrá muchos pedidos abiertos a diferentes precios y algunos a precio de mercado).

En aras del ejemplo, supongamos que eligió un precio de transacción de $ 11, es decir, el centro de la gama adecuada. El pedido del usuario B ahora se cumpliría y, dado que el pedido del usuario A solo se cumplió parcialmente, quedará un orden abierto en el sistema: el usuario A para vender sus 10 unidades restantes a $ 10. El último precio comercial se actualizaría a $ 11.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top