6

我一直在使用 PHP 开发一个虚拟股票市场游戏。我用来决定股票价格的公式是

$price += $ran*0.001*$price + $ratio*0.005*$price

在哪里

$ran = rand(-1*$intensity, 2*$intensity)

$intensity 是一个介于 -5 到 5 之间的数字,取决于新闻对公司是好是坏,并​​且

$ratio = (1.0*($buy-$sell))/($buy + $sell)

$buy 和 $sell 分别代表公司买入和卖出的股票数量。

这个公式的问题在于,即使强度为负(甚至 -5),比率项也总是被添加到价格中,这使得整体项增加。价格每 10 秒刷新一次,根据上述公式,价格不断上涨,永不下降。那么,任何人都可以帮助我解决这个公式,使其更接近实际股票市场吗?

4

1 回答 1

4

如果我理解正确,您正在尝试定义一个算法来根据当前价格、一些市场活动和随机输入来确定一个合乎逻辑的下一个价格。这称为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()是提供更好随机性的直接替代品。
于 2013-10-10T17:34:30.243 回答