我做什么
我正在制作虚构股票期权的图表。 使用此功能
,价格每秒更新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,4)和除以10 000而不是1 000?
如果有人有想法或建议产生“自然”价格演变,请提前感谢。
答案 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)。这是如何创建二叉树来评估外来股票期权的原则。