He instalado en mi foro el Vault MOD (en su version bbtonuke, pues yo uso un phpbb integrado en nuke), el cual incluye una seccion en que se puede simular un juego de bolsa (el MOD lo llama originalmente stock). Se crean empresas, se les pone un precio inicial, se establece un minimo y máximo de variacion por unidad de tiempo (tambien definible) y los valores de las acciones se mueven de forma aleatoria cada vez q transcurre esa unidad de tiempo, siempre respetando los limites minimos y maximos de variacion. Asi de esta forma los usuarios pueden comprar y vender acciones (con dinero del cashmod) como en un juego de bolsa.
El problema es que las variaciones son totalmente aleatorias, y no responden a ningun tipo de logica, lo cual está frenando un poco la participación en el juego. Mi idea seria cambiar esa aleatoriedad por una funcion proporcionalmente directa al numero de acciones compradas de la empresa, es decir, a mayor demanda (nº de usarios q compran acciones) mayor precio; y a mayor oferta (nº de usuarios que venden acciones) menor precio (aunqe en la realidad no contabiliza las ventas, sino solo la cantidad de acciones que se posee).
Pongo el MOD entero por si alguien necesita (o quiere) exar un vistazo más en profundidad, pero basicamente voy a desgranar las partes que realmente afectan (o eso creo) a lo que quiero hacer:
El MOD original (el archivo de lenguaje está traducido por mi): AQUI
LINEAS DE CODIGO RESPONSABLES: en el functions_vault.php
<?php
if ( $vault_general['stock_min_change'] > $vault_general['stock_max_change'] )
{
$vault_general['stock_min_change'] = $vault_general['stock_max_change'];
}
$variation = rand($vault_general['stock_min_change'] , $vault_general['stock_max_change']);
$hazard = rand(1,2);
if ( $hazard == '2' )
{
$variation = - $variation ;
}
$new_price = ceil($exchange[$i]['stock_price'] * ( 1 + ( $variation / 100 )));
$old_price = $exchange[$i]['stock_price'] ;
$best_price = ( $new_price > $exchange[$i]['stock_best_price'] ) ? $new_price : $exchange[$i]['stock_best_price'];
$worst_price = ( $new_price < $exchange[$i]['stock_worst_price'] ) ? $new_price : $exchange[$i]['stock_worst_price'];
if ( $vault_general['stock_min_change'] > $vault_general['stock_max_change'] )
{
$vault_general['stock_min_change'] = $vault_general['stock_max_change'];
}
$variation = rand($vault_general['stock_min_change'] , $vault_general['stock_max_change']);
$hazard = rand(1,2);
if ( $hazard == '2' )
{
$variation = - $variation ;
}
$new_price = ceil($exchange[$i]['stock_price'] * ( 1 + ( $variation / 100 )));
$old_price = $exchange[$i]['stock_price'] ;
$best_price = ( $new_price > $exchange[$i]['stock_best_price'] ) ? $new_price : $exchange[$i]['stock_best_price'];
$worst_price = ( $new_price < $exchange[$i]['stock_worst_price'] ) ? $new_price : $exchange[$i]['stock_worst_price'];
Más concretamente estaríamos hablando de la linea 5 donde define la variable $variation como un random que varia entre el minimo y maximo preestablecido. Habría que redefinir esa variacion en funcion de los parametros que he dicho de demanda/oferta.
Luego se encuentra en la linea 11 la variable $new_price que es la que realmente define el precio, y que aquí lo hace multiplicando el precio actual por la variacion anteriormente definida.
Entre las lineas 6 y 10 creo que lo que intenta definir es la posibilidad de una variación negativa, pero no reconozco bien el codigo.
Los usuarios y nº de acciones poseidas se obtienen de la tabla nuke_bbvault_exchange_users que tiene las siguientes variables:
stock_id --------------------> esta es la empresa (esta definida en otra tabla) de la cual se posee acciones
user_id ---------------------> el id del usuario que tiene acciones
stock_amount --------------> cantidad de acciones q tiene de esa empresa
price_transaction ----------> precio al que se compró la acción
Bueno, como lo veis? Tiene facil solucion??

¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ FIRMA ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬



















