我是一名初学者/中级Python程序员,但我没有编写应用程序,只是脚本。我目前不使用很多面向对象的设计,所以我希望这个项目能够帮助我建立我的OOD技能。问题是,我不知道从设计角度出发(我知道如何创建对象和所有东西)。对于它的价值,我也是自学的,没有正式的CS教育。面向对象的Python中的投资/股票和期权组合设计
我想尝试编写一个程序来跟踪投资组合的股票/期权头寸。
我有一个关于什么可以使良好的对象候选人(投资组合,股票,期权等)和方法(买入,卖出,更新数据等)的粗略想法。
一个多头头寸将买入开盘和卖出结束,而空头头寸有卖出开盘和买入结束。
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次不同的时间,4种不同的价格。
- 买100股。每天卖出1股,持续100天。
- 购买4个不同的时间,4个不同的价格。一次售出全部位置,1个价格。
一个可能的解决方案是为每股股票创建一个对象,这样每个股票都会有不同的日期和价格。这会造成太多的开销吗?该产品组合可能拥有数千或数百万个小共享对象。如果你想找到你需要的东西就像一个位置的总市值:
sum([trade.last_price for trade in portfolio.positions if trade.symbol == "ABC"])
如果你有一个位置对象计算是简单的:提前
position.last * position.qty
感谢帮助。看看其他帖子,很明显,“帮助”不是“为你写程序”。我觉得我只需要一些方向,指向正确的道路。
其他信息在反射 目的 该方案将保留所有位置的轨迹,打开和关闭;有能力看到详细的利润和损失。
当我想到详细的P & L我想看... - 所有的开放时间(和关闭日期) - 召开时间 - 开盘价(关闭日期) - P & l由于开放 - P每天
@Senderle
我&大号想想也许你是从字面上理解了“对象”的隐喻,并且也试图从这个词的编程意义上将一个看起来很像对象的分享转化为一个对象。如果是这样,这是一个错误,这是我认为是并列的观点。
这是我的错。考虑“对象”对象似乎是很自然的选择。直到可能有数百万人认为这个想法看起来很疯狂。本周末我会有一些免费的编码时间,并会尝试创建一个数量的对象。
你想为这种应用程序的数据库层。 – Santa 2011-03-23 01:34:16
由于好奇心,对这个术语不太熟悉,我是否认为持有特定股票的“开放”头寸对于一个非零(正面或负面的空头头寸)是正确的? – senderle 2011-03-25 13:34:01
是的,一个开放的头寸将是非零的。基本上有两种类型的头寸:多头和空头。长期投资是大多数人的想法。低买高卖。空头头寸与持续多头相反。你从你的经纪人那里借入股票并在市场上卖出,创造一个责任,你必须把股票归还给你的破产者(或者当他要求他们回来时)。这个过程是(借入股票)卖高,买低(回到他们的经纪人)。 – 2011-03-29 05:33:46