面向对象的设计,用于Python中的投资/股票和期权组合

Jas*_*rth 7 python projects-and-solutions trading stocks

我是初学者/中级Python程序员,但我还没有编写应用程序,只编写脚本.我目前没有使用很多面向对象的设计,所以我希望这个项目能够帮助我建立自己的OOD技能.问题是,我不知道从设计角度开始(我知道如何创建对象和所有东西).对于它的价值,我也是自学成才,没有正式的CS教育.

我想尝试编写一个程序来跟踪投资组合股票/期权头寸.

关于什么会成为好的候选对象(投资组合,股票,期权等)和方法(买入,卖出,更新数据等),我有一个大概的想法.

多头头寸可以买入开仓,卖出收盘,而空头仓位可以卖出,买入收盘.

portfolio.PlaceOrder(type="BUY", symbol="ABC", date="01/02/2009", price=50.00, qty=100)
portfolio.PlaceOrder(type="SELL", symbol="ABC", date="12/31/2009", price=100.00, qty=25)
portfolio.PlaceOrder(type="SELLSHORT", symbol="XYZ", date="1/2/2009", price=30.00, qty=50)
portfolio.PlaceOrder(type="BUY", symbol="XYZ", date="2/1/2009", price=10.00, qty=50)
Run Code Online (Sandbox Code Playgroud)

然后,一旦调用此方法,我该如何存储信息?起初我以为我会有一个Position对象,其中包含Symbol,OpenDate,OpenPrice等属性,但考虑更新位置以考虑销售变得棘手,因为购买和销售发生在不同的时间和数量.

  • 买100股开,1次,1个价.卖4种不同的时间,4种不同的价格.
  • 买100股.每天卖1股,持续100天.
  • 买4种不同的时间,4种不同的价格.一次性卖出全部头寸,1个价格.

一种可能的解决方案是为每股股票创建一个对象,这样每个股票就会有不同的日期和价格.这会是太多开销吗?该投资组合可能有数千或数百万个小共享对象.如果您想了解某个头寸的总市值,您需要以下内容:

sum([trade.last_price for trade in portfolio.positions if trade.symbol == "ABC"])
Run Code Online (Sandbox Code Playgroud)

如果你有一个位置对象,计算将很简单:

position.last * position.qty
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.看看其他帖子显然是"帮助"不要"为你编写程序".我觉得我只需要一些方向,指向正确的道路.

反思的附加信息 目的 该程序将跟踪所有开放和关闭的位置; 能够看到详细的盈亏.

当我想到详细的损益时,我希望看到... - 所有开放日期(和关闭日期) - 持有的时间 - 开盘价(关闭日期) - 自开盘以来的损益 - 每天的损益

@Senderle

我想也许你的字面意思也是"对象"隐喻,所以试图在某种程度上将这种看似非常像对象的共享转化为该字的编程意义上的对象.如果是这样,那就是一个错误,这就是我所认为的并列的重点.

这是我的错.思考"物体"一个share物体似乎是自然的候选者.直到有数百万人认为这个想法似乎很疯狂.我本周末会有一些免费的编码时间,并会尝试创建一个有数量的对象.

eat*_*mon 1

避免物体。面向对象的设计是有缺陷的。将您的程序视为对数据(列表和字典)进行操作的行为的集合。然后将相关行为分组为模块中的函数。每个功能都应该有明确的输入和输出。将您的数据全局存储在每个模块中。为什么要在没有物体的情况下进行呢?因为它映射得更接近问题空间。面向对象编程为解决问题创造了太多的间接性。不必要的间接会导致软件膨胀和错误。

一种可能的解决方案是为每一股股票创建一个对象,这样每一股都有不同的日期和价格。这会不会造成太大的开销?该投资组合可能有数千或数百万个小共享对象。如果您想找出某个职位的总市场价值,您需要以下内容:

是的,这会带来太多的开销。这里的解决方案是将数据存储在数据库中。除非您使用 NOSQL 方案,否则查找头寸的总市场价值将在 SQL 中完成。

不要尝试为未来所有可能的结果进行设计。只需让您的程序按照现在需要的方式运行即可。

  • 我同意“将数据存储在数据库中”和“不要对所有事情进行过度设计”;我完全不同意“面向对象设计是有缺陷的”。有可能做得很糟糕,但任何事都是如此。 (4认同)