我想尝试编写一个程序来跟踪投资组合的股票/期权持仓情况。
我有一个大致的想法,关于哪些对象会是良好的候选项(投资组合、股票、期权等)以及方法(买入、卖出、更新数据等)。
一个多头头寸会买入开仓,卖出平仓,而空头头寸则是卖出开仓,买入平仓。
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)
那么,一旦调用了这个方法,我该如何存储信息?起初,我认为我会有一个Position对象,其属性如Symbol、OpenDate、OpenPrice等。但是考虑到更新持仓以考虑销售变得棘手,因为购买和销售发生在不同的时间和数量。
- 购买100股开盘价,1次,1价格。4次不同的价格出售。
- 购买100股。每天卖1股,共100天。
- 4次不同的价格购买。以1次价格全部卖出。
可能的解决方案是为每一股股票创建一个对象,这样每一股股票都会有不同的日期和价格。这会产生太多的开销吗?投资组合可能会有数千或数百万个小股票对象。如果您想找出一个头寸的总市值,您需要像这样的东西:
sum([trade.last_price for trade in portfolio.positions if trade.symbol == "ABC"])
如果您有一个位置对象,计算就很简单:
position.last * position.qty
感谢您的帮助。从其他帖子中看来,显然SO是为“提供帮助”而不是“为您编写程序”。我认为我只需要一些指导,指引正确的方向。
附加信息: 目的: 该程序将跟踪所有头寸,包括开放和关闭;能够查看详细的盈利和亏损情况。
当我思考详细的P&L时,我想看到... - 所有的开放日期(和关闭日期) - 持有时间 - 开盘价(关闭日期) - 自开仓以来的盈亏 - 每日盈亏
@Senderle
我认为你可能过于字面地理解了“对象”这个比喻,所以试图把股票(在某些方面似乎很像对象)变成编程意义下的对象。如果是这样,那就是一个错误,这就是 juxtapose 的观点。
这是我的失误。考虑到“对象”,一个“股票”对象似乎是自然候选人。直到可能有数百万,这个想法才显得疯狂。我将在本周末有一些空闲的编码时间,并尝试创建一个带有数量的对象。