Arc*_*rma 6 simulation modeling stock
我一直在使用PHP进行虚拟股票市场游戏.我用来决定股票价格的公式是
$price += $ran*0.001*$price + $ratio*0.005*$price
Run Code Online (Sandbox Code Playgroud)
哪里
$ran = rand(-1*$intensity, 2*$intensity)
Run Code Online (Sandbox Code Playgroud)
$ intensity是介于-5到5之间的数字,具体取决于新闻对公司的好坏
$ratio = (1.0*($buy-$sell))/($buy + $sell)
Run Code Online (Sandbox Code Playgroud)
$ buy和$ sell分别代表一家公司买卖的股票数量.
这个公式的问题在于,即使强度为负(甚至-5),比率项也总是加到使总体术语增加的价格上.价格每10秒更新一次,上面的公式会继续增加价格,永不降价.那么,任何人都可以帮我解决这个公式,使其与实际股票市场的关系更加密切吗?
如果我理解正确的话,您正在尝试定义一种算法来根据当前价格、一些市场活动和随机输入确定逻辑下一个价格。这称为随机游走,链接页面信息丰富。
在经济学中,“随机游走假设”用于对股价和其他因素进行建模。实证研究发现与该理论模型存在一些偏差,特别是在短期和长期相关性方面。
我们很难为您提供精确的函数,因为您期望的此类函数的确切行为本质上是特定于应用程序的。但是,可以通过将其拉出到自己的方法中并对其进行调整,直到看到所需的行为来测试该行为并对其进行改进。
我建议将您定义的这种行为拉入SSCCE(或单元测试,但假设您还没有设置 PHP 单元测试框架,一个示例就可以了)并创建一些测试用例,然后您可以在真空中调整你的算法并找到你喜欢的行为。
以下是一些入门样板:
<?php
function nextPrice($price, $intensity, $buy, $sell, $rand) {
// TODO
}
// Can tweak these values between runs, or put them in a loop if you want
$testPrice = 10.0;
$testBuy = 10000;
$testSell = 10000;
for ($i = -5; $i <= 5; $i++) {
// random float, from http://stackoverflow.com/a/14155720/113632
// set to a constant if you want to isolate the randomness and test other variables
$testRand = mt_rand(0, mt_getrandmax() - 1) / mt_getrandmax();
echo "<p>Intensity: $i - Rand: $testRand = ".
nextPrice($testPrice, $i, $testBuy, $testSell, $testRand)."</p>";
}
?>
Run Code Online (Sandbox Code Playgroud)
一些额外的想法:
$ran定义肯定有缺陷,如果$intensity您-5正在执行$ran = rand(5, -10);它会生成警告并且不会返回您想要的值。 这可能是您问题的根源,因为任何负值$intensity基本上都会设置$ran为零。$ran定义偏向于正数,这意味着即使有坏消息,价格也会相当快地上涨。我建议确保你的随机值降低股票的可能性与提高股票的可能性相同,如果你打算让股票随着时间的推移而升值(这对我来说似乎是一个坏主意),那么设置一个单独的值总是会$longTermGrowthFactor增加股票的价值。库存按该因素计算,与随机性分开。rand()调用相关的警告,所以您可能关闭了警告和其他错误类型,这很可能意味着您的代码中隐藏着您不知道的其他错误,如果没有报告,他们将很难被发现。mt_rand()而不是rand(),后者已被弃用,并且mt_rand()是提供更好随机性的直接替代品。