简单算法模拟股市行为

7

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

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

where

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

$intensity是介于-5到5之间的一个数字,取决于新闻对公司的影响是好还是坏。

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

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

这个公式存在的问题是,即使强度为负数(甚至是-5),比率项仍会添加到价格中,从而使整体项增加。价格每10秒钟刷新一次,使用上述公式它们继续上涨并且从不下降。因此,有谁能帮我修改这个公式,使其更接近实际股市变化?


4
你要求我们提供一个算法来近似股市的行为? - Mike Brant
1
如果$sell > $buy,或者卖方多于买方,则比率将为负。这时股票价格下降是有道理的。此外,您将比率的权重放大了5倍,而随机强度的权重较小,因此您的模型将更加偏向于买入/卖出而不是新闻。 - Dillon Welch
1
如果 $itensity 可能为负数,那么你最终可能会得到一个无效的参数集 rand(5,-10)。最大值不能小于最小值。 - Marc B
这是一个数学/经济学问题,不是一个编程问题。 - Étienne Miret
1
嗯,它们不总是必须相等吗?除非有人出售,否则您无法购买任何东西。 - RBarryYoung
显示剩余7条评论
1个回答

4
如果我理解正确,您正在尝试定义一种算法,以基于当前价格、一些市场活动和随机输入来确定逻辑下一个价格。这被称为随机漫步,链接的页面非常信息丰富。
在经济学中,“随机漫步假说”用于模拟股票价格和其他因素。实证研究发现,在短期和长期相关性方面,该理论模型存在一些偏差。
对于我们来说,很难为您提供确切的函数,因为这样的函数所期望的确切行为本质上是应用程序特定的。但是,通过将其提取到自己的方法中并进行微调,可以测试其行为并对其进行改进。
我建议将您定义的此行为提取到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 https://dev59.com/pc8D0IgBFxS5KdRjkOQA#14155720
  // 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()是一个提供更好随机性的即插即用替代品。

感谢指出关于$ran定义的主要缺陷。 - Archit Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接