用户订单(买入/卖出)导致股票期权价格的变化。

4

在回答此问题生成虚构的股票期权价格变化

我希望模拟价格变化,就像真正的股票交易一样,在用户下单买入或卖出时。(这里有一个用户案例帮助您理解。)

初始状态“股票期权示例”:

X公司,股票期权价格为20000美元。

一个CRON任务使用此PHP脚本每秒钟进行价格变化:

function stockVariation($price,$max_up,$max_down)
{
    // Variation calculate, with volatility max (10 to 100)
    $ratio=(mt_rand(0,$max_up)-mt_rand(0,$max_down))/10000;
    // New price
    $price+=$ratio; 

    return round($price,5);
}

波动性由随机新闻造成,这会导致$max_up > $max_down或$max_up < max_down,在这些情况下,$max_up = $max_down。如图所示(每小时一次)。
用户案例“购买示例”:
- 用户发送一个订单以购买1000份该期权,价格为18,000美元。 - 系统将订单存储在数据库中。 - CRON任务每分钟验证一次,如果该期权的价格小于或等于上一分钟的购买订单,则执行以下操作。 - 当该期权的价格小于或等于该订单时,用户获得该股票期权。
用户案例“出售示例”:
- 用户发送一个订单以卖出1000份该期权,价格为22,000美元。 - 系统将订单存储在数据库中。 - CRON任务每分钟验证一次,如果该期权的价格大于或等于上一分钟的出售订单,则执行以下操作。 - 当该期权的价格大于或等于该订单时,用户出售该股票期权。
我的问题是:如何通过订单的价格和数量来产生价格波动?类似于“供需法则”。例如(关于彼得的回答的编辑)。
function stockOrder($orderPrice,$orderQuantity,$type)//$type= buy or sell
{
    // Record the order in database (ok)
    // Compare with other orders (ok) 
    // $orderPrice<=$dbSellPrice or $orderPrice>=$dbBuyPrice
    if checks
       // Buy and sell at the best prices 
       // for quantities available holded by users (ok)
       // Record/update the holding of the stock (ok)
       // Update the price of the stock
    end if       
}

也许我有点疯狂,认为自动化可能是可能的,但我相信它,非常感谢您的帮助。

1
我不想让别人帮我写代码,我只是想知道应该使用哪个数学函数!非常感谢您的反对,我的问题很明确清晰。您的评论真的没有意义! - Valky
你把它删掉了... ^^ - Valky
1
只是一些想法:看起来你打算让buyOrder()sellOrder()函数都接受一个价格,这意味着它们实际上是限价单。考虑到这一点,逻辑应该是这样的:在收到给定价格的订单时,搜索数据库以寻找相应的“匹配”订单,并以“正确”的价格履行订单,即每个订单限价内的价格。然后执行订单,从数据库中删除条目并更新最后售价。 - Peter
1
使用无限制(市场价格)订单,您只需立即查看开放订单数据库中可用的内容并执行/履行。问题在于当您有多个未履行的市价订单时会出现什么情况。如何确定这种情况下的价格?这几乎就像模拟缺乏流动性,可能导致巨大的价格波动。 - Peter
你的评论非常有趣,我没有从这个角度看过这件事。用户之间通过订单直接买卖价格,这更加一致!但是最终价格应该怎么办?就像你所说的那样,它会引起巨大的价格波动。用户之间的平均价格和行动价格也许可以解决这个问题? - Valky
买入/卖出/当前的比例是多少?以成交量/数量为基础。 - Valky
1个回答

3
我想进一步解释我的评论。以下是一个基本情景:假设我们从数据库/系统中的零未执行订单开始。
1. 用户A提交了一个限价卖出订单,20个X股票,价格为$10。 2. 用户B提交了一个限价买入订单,10个X股票,价格为$12。
在第1步之后,系统中将有一个未执行的订单,因为没有开放的订单可以匹配。
在第2步之后,用户B提交的订单可以通过系统中的一个开放订单被执行(为简单起见,假设用户A的订单可以分拆,即不是全数或无)。
用户B的购买订单之所以能够被执行,有两个原因:
1. 有一个开放的卖出订单,其数量大于等于购买订单数量。 2. 限价买入价格大于等于限价卖出价格,因此可以达成交易价格。
用户A不想以低于$10的价格出售,用户B不想以高于$12的价格购买。因此,在这种情况下,有一系列合适的交易价格,即任何介于$10-12之间的价格都是合适的。
问题在于如何确定适当的交易价格。怎么办?选择价格范围的中间值?这只是其中的一个解决方案。(在具有很多流动性的市场中,您可能不会遇到这种相同的问题,因为不同价格的许多开放订单以及某些市场价格已经存在。)
出于示例的目的,假设您选择了一个交易价格为$11,即合适范围的中间值。用户B的订单现在将被执行,并且由于用户A的订单仅部分执行,仍将有一个未执行订单留在系统中:用户A以$10的价格出售其剩余的10个单位。上一次交易价格将更新为$11。

非常感谢!我已经开发了一个销售“全部或部分”数量的系统。所以在你描述的情况下,无论目前股票价格如何?;-)用户来制定市场?例如,A订单购买$20 * 10,B订单销售$10 * 20,C订单销售$15 * 5。结果将是:A以$17.5 * 5(给C)和A以$15 * 5(给B)购买,因此他获得了10个单位的股票$16.25,并且这也将是股票的市场价格,不是吗? - Valky
一般情况下,“股票价格”指的是最后交易执行的价格,因此这是有意义的。然而,股票价格/最后交易价格通常是下一笔交易价格的指示,特别是在波动性/低流动性市场中。 - Peter
我已经更新了有关您工作的问题中的算法。如果我还想通过买卖量来获取当前价格变化怎么办?因为10个单位的订单和10000个单位的订单对股票价格的影响不应该是相同的,对吧? - Valky
好观点。然而,在实际市场中,使用“最后交易价格”通常是有意义的,因为交易速度非常快,小规模交易对价格的影响被其他交易的数量所抵消。回答你的问题:在异常情况下,小交易可能会对股票价格产生巨大影响。请参阅有关2010年5月“闪崩”的文章:http://www.thestreet.com/story/10757383/how-pg-plunge-derailed-one-investor.html - Peter
谢谢您的文章,非常有趣。因此,交易量只对市场产生心理影响,而不是对股票价格产生数学影响吗?(对我的糟糕英语感到抱歉...) - Valky
显示剩余2条评论

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