小编Jas*_*rth的帖子

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

我是初学者/中级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物体似乎是自然的候选者.直到有数百万人认为这个想法似乎很疯狂.我本周末会有一些免费的编码时间,并会尝试创建一个有数量的对象.

python projects-and-solutions trading stocks

7
推荐指数
1
解决办法
4143
查看次数

Pythonic 循环——如何在迭代列表时获取多个元素

我想迭代我的列表并使用多个元素(而不仅仅是一个元素)执行某些操作。我想获取第一个元素和它后面的一些元素(它们可以是连续的,也可能是返回的第三个元素)。

l = ['a', 'b', 'c', 'd', 'e']
  for items in l:
    print items[:3]
Run Code Online (Sandbox Code Playgroud)

输出应该是:

['a', 'b', 'c'], ['b', 'c', 'd'], ['c', 'd', 'e']
Run Code Online (Sandbox Code Playgroud)

有很多好的答案,如果想跳过元素怎么办?比如说,获取一个元素,跳过下一个元素,然后获取第三个元素?

输出:

('a', 'c'), ('b','d'), ('c', 'e')
Run Code Online (Sandbox Code Playgroud)

我想枚举是处理这个问题的最佳方法?

迭代列表如此简单和优雅,我希望类似的语法允许您在元素本身的 for 循环中使用它,而不是使用范围或枚举。

l = ['a', 'b', 'c', 'd', 'e']
  for items in l:
    print (items[0], items[2])
Run Code Online (Sandbox Code Playgroud)

(是的,我知道如果原始列表是包含列表的列表,这段代码会给出不同的结果。 [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] 将返回 [1 , 3], [4, 6], [7, 9])

python

5
推荐指数
1
解决办法
2万
查看次数

在Python中绘制网络/关系/连接类型图

有没有人知道一个库来绘制各种项目之间的关系,以显示它们在Python中的相互关联性?

我现在甚至不知道这些图表的名称.最好的例子就像Visual Thesaurus.

我对Matplotlib有点熟悉,但还没有看到这种情节.

python plot matplotlib

4
推荐指数
1
解决办法
6718
查看次数

如何使用lxml获取根元素的文本?

我完全难以理解为什么lxml .text会给我一个子标签的文本但是为root标签.

some_tag = etree.fromstring('<some_tag class="abc"><strong>Hello</strong> World</some_tag>')

some_tag.find("strong")
Out[195]: <Element strong at 0x7427d00>

some_tag.find("strong").text
Out[196]: 'Hello'

some_tag
Out[197]: <Element some_tag at 0x7bee508>

some_tag.text
Run Code Online (Sandbox Code Playgroud)

some_tag.find("strong").text返回<strong>标记之间的文本.

我希望some_tag.text能在两者之间归还<some_tag> ... </some_tag>

预期:

<strong>Hello</strong> World
Run Code Online (Sandbox Code Playgroud)

相反,它什么都不返回.

python lxml

4
推荐指数
2
解决办法
5581
查看次数