如果我理解正确,您正在尝试定义一个算法来根据当前价格、一些市场活动和随机输入来确定一个合乎逻辑的下一个价格。这称为Random Walk,链接的页面信息量很大。
在经济学中,“随机游走假设”用于对股价和其他因素进行建模。实证研究发现该理论模型存在一些偏差,尤其是在短期和长期相关性方面。
我们很难为您提供准确的功能,因为您对此类函数的期望的准确行为本质上是特定于应用程序的。但是,可以通过将其拉出到自己的方法中并对其进行调整来测试行为并对其进行改进,直到您看到所需的行为。
我建议将您定义的这种行为拉入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>";
}
?>
一些额外的想法:
- 你的
$ran
定义肯定是有缺陷的,如果$intensity
你-5
正在执行$ran = rand(5, -10);
它会产生一个警告并且不返回你想要的值。 这可能是您问题的根源,因为任何负数$intensity
基本上都会设置$ran
为零。
- 此外,您的
$ran
定义偏向于正数,这意味着即使有坏消息,价格也会很快上涨。我$longTermGrowthFactor
建按该因素进行库存,与随机性分开。
- 在 PHP 中打开警告报告- 因为您可能没有看到与您的
rand()
调用相关的警告,您可能已经关闭了警告和其他错误类型,这很可能意味着您的代码中隐藏了其他您不知道的错误,如果没有报告,他们将很难被发现。
- 使用
mt_rand()
代替rand()
,后者已被弃用,并且mt_rand()
是提供更好随机性的直接替代品。