简单算法模拟股市行为

时间:2013-10-10 17:28:46

标签: simulation modeling stock

我一直在使用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秒更新一次,上面的公式会继续增加价格,永不降价。那么,任何人都可以帮我解决这个公式,使其与实际股票市场的关系更加密切吗?

1 个答案:

答案 0 :(得分: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定义偏向于正数,这意味着即使有坏消息,价格也会很快上升。我建议你确保你的随机价值同样有可能降低股票价格,如果你打算随着时间推移股票价值上涨而不管(这对我来说似乎是一个坏主意)设置一个单独的{{1}总是通过该因子增加库存,与随机性分开。
  • Turn on warning reporting in PHP - 由于您可能没有看到与$longTermGrowthFactor电话相关的警告,因此您可能会关闭警告和其他错误类型,这很可能意味着您的隐藏了其他错误您不知道的代码,如果没有报告,他们将难以发现。
  • 使用mt_rand()代替rand(),后者已被弃用,rand()是替代品,可提供更好的随机性。