【发布时间】:2011-03-23 01:26:21
【问题描述】:
我是一名初级/中级 Python 程序员,但我还没有编写应用程序,只是编写了脚本。我目前没有使用很多面向对象的设计,所以我希望这个项目能够帮助我培养我的 OOD 技能。问题是,我不知道从设计角度从哪里开始(我知道如何创建对象和所有这些东西)。不管怎样,我也是自学成才,没有接受过正规的 CS 教育。
我想尝试编写一个程序来跟踪投资组合中的股票/期权头寸。
我大致了解什么是好的候选对象(投资组合、股票、期权等)和方法(购买、销售、UpdateData 等)。
多头头寸有买入开仓和卖出平仓,而空头头寸有卖出开仓和买入平仓。
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)
那么,一旦调用了这个方法,我该如何存储信息呢?起初我以为我会有一个带有 Symbol、OpenDate、OpenPrice 等属性的 Position 对象,但考虑更新仓位以考虑销售变得很棘手,因为买卖发生在不同的时间和金额。
- 买入100股开盘,1次,1价。销售 4 个不同的时间,4 个不同的价格。
- 购买 100 股。每天卖出 1 股,持续 100 天。
- 购买4个不同的时间,4个不同的价格。以 1 次、1 个价格卖出全部仓位。
一种可能的解决方案是为每一股股票创建一个对象,这样每一股就会有不同的日期和价格。这会不会有太多开销?投资组合可能有成千上万个小 Share 对象。如果您想了解某个头寸的总市值,您需要以下内容:
sum([trade.last_price for trade in portfolio.positions if trade.symbol == "ABC"])
如果你有一个位置对象,计算会很简单:
position.last * position.qty
提前感谢您的帮助。查看其他帖子,很明显 SO 是“帮助”而不是“为您编写程序”。我觉得我只需要一些方向,指明正确的道路。
反思后的附加信息 目的 该程序将跟踪所有未平仓头寸;能够查看详细的损益。
当我想到详细的损益表时,我想查看... - 所有开放日期(和关闭日期) - 举行时间 - 开盘价(收盘日期) - 自开盘以来的损益 - 每天的损益
@Senderle
我想也许你对“对象”的比喻过于字面化了,因此正试图将在某些方面看起来非常像对象的共享变成编程意义上的对象。如果是这样,那是一个错误,这就是我认为并列的观点。
这是我的错误。考虑share 对象的“对象”似乎很自然。直到可能有数百万人,这个想法才显得疯狂。这个周末我会有一些空闲的编码时间,并会尝试创建一个有数量的对象。
【问题讨论】:
-
您需要一个用于此类应用的数据库层。
-
出于好奇,对这个术语不太熟悉,“未平仓”头寸只是持有特定股票的非零(对空头头寸为正或负),我说得对吗?
-
是的,未平仓头寸将是非零的。基本上有两种类型的头寸:多头和空头。做多是大多数人在投资时想到的。低买高卖。空头头寸与做多相反。你从你的经纪人那里借入股票并在市场上出售,产生了一种责任,你必须将股票归还给你坏掉的股票(或者当他要求退还股票时)。过程是(借入股票)高卖低买(将它们归还给您的经纪人)。
-
我知道这篇文章已经很老了,但我很想知道你是否在这里取得了任何进展,因为我正在考虑同样的问题,而你距离我还有 2 年的时间。
标签: python projects-and-solutions stocks trading