生成虚构的股票期权价格变化

时间:2012-02-19 22:32:36

标签: php math

我做什么

我正在制作虚构股票期权的图表。 使用此功能

,价格每秒更新
function stockVariation($price,$max_up,$max_down)
{
    // Price > 1
    if($price > 1)
    {
        // Calculate
        $ratio=(mt_rand(0,$max_up/2)-mt_rand(0,$max_down/2))/1000;
        $price+=$ratio;
    }
    // Price <=1 (we don't want 0 or negative price...)
    else
    $price+=mt_rand(1,$max_up)/1000;

    return round($price,3);
}

我使用max_up和max_down值(从10到100)逐步改变价格并模拟一些波动。

例如,使用max_up:40和max_down:45,价格会逐渐下降。

我的问题

但问题在于,即使max_up = max_down,生成的价格也会过于波动。 结果是“非自然的”。 (例如,一天内基本价格为15,000点+10点)。

24小时内每小时价格演变的结果 price evolution per hour in 24 hour

也许更好地围绕($ price,4)和除以10 000而不是1 000?

如果有人有想法或建议产生“自然”价格演变,请提前感谢。

2 个答案:

答案 0 :(得分:2)

一天有86400秒,因此您需要除以更大的数字。而不是加减,您可能希望将当前价格乘以略大于或小于1的因子。这将模拟百分比的增加或减少,而不是绝对的收益或损失。

function stockVariation($price, $max_up, $max_down)
{
  // Convert up/down to fractions of the current price.
  // These will be very small positive numbers.
  $random_up = mt_rand(0, $max_up) / $price;
  $random_down = mt_rand(0, $max_down) / $price;

  // Increase the price based on $max_up and decrease based on $max_down.
  // This calculates the daily change that would result, which is slightly
  // larger or smaller than 1.
  $daily_change = (1 + $random_up) / (1 + $random_down);

  // Since we're calling this function every second, we need to convert
  // from change-per-day to change-per-second.  This will make only a
  // tiny change to $price.
  $price = $price * $daily_change / 86400;

  return round($price, 3);
}

答案 1 :(得分:0)

在此想法的基础上,您可以使用实际的波动率数字。如果你想要,例如波动率为35%/年,您可以找到每秒的波动率。在伪代码中:

vol_yr = 0.35
vol_month = vol_yr * sqrt(1.0/12)
vol_second = vol_yr * sqrt(1.0/(252 * 86400)) # or 365 * 86400

然后,每一秒,你都会翻转一枚硬币&#34;并将当前股票价格乘以或除以(1 + vol_second)。这是如何创建二叉树来评估外来股票期权的原则。