如何处理来自雅虎财经报价阅读器的打印输出?

时间:2017-06-08 11:46:01

标签: python pandas yahoo-finance trading pandas-datareader

我正在设计一个工具,帮助我管理股票投资组合的风险。我有一些代码可以从雅虎融资中收集4股股票,2倍多头和2倍空头的当前价格数据。这是使用雅虎金融工具。

我可以收集数据,但我无法弄清楚如何将价格相互划分以返回价差(stockA / stockB作为相对价值交易)

#always helpful to show the version:
(env) LaurencsonsiMac:~ admin$ python
Python 2.7.10 (default, Oct 23 2015, 18:05:06) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin



from yahoo_finance import Share
>>> L1 = Share('YHOO')
>>> L2 = Share('GOOG')
>>> S1 = Share('AAPL')
>>> S2 = Share('MSFT')
>>> print L1.get_price()
50.55
>>> print S1.get_price()
154.45
小胜利!我可以拿到价格:)但是 我不知道如何将此输出作为对象进行操作,并将Long1定义为“print L1.get_price()返回的内容” 最终输出将是这样的表,其中扩展值为单个(超级重要!)数字到两个或三个(无论如何)小数位。

Position, Spread
YHOO/AAPL, 0.327 #value of Yahoo stock price/Apple stock price
GOOG/MSF,  4.55
ticker/ticker, 10.14
ticker/ticker, 0.567

我尝试将Long1和Short1定义为L1.get_price()打印的数字:

>>> Long1 = "L1.get_price()"
>>> Short1 = "S2.get_price()"

然后希望我能通过跳过这两个来得到一个数字:

>>> Long1/Short1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'str'

所以我试图将这些数字转换为浮点数[因为它可能有效,但我显然误解了一些东西:

>>> float(Long1)/float(Short1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: L1.get_price()

或者我确实设法使用pandas模块使用这段代码获得输出:(谢谢Brad Solomon:)

import pandas_datareader.data as web

def get_quotes(symbols, type='dict'):
    quotes = web.get_quote_yahoo(symbols)['last']
    if type == 'dict':
        quotes = quotes.to_dict() # otherwise, Series
    return quotes

quotes = get_quotes(symbols=['RAD', 'MSFT']); quotes
Out[16]: {'MSFT': 70.409999999999997, 'RAD': 3.46}

但是你如何实现MSFT / RAD,让python“读取字符串”?

我真的很卡住,任何人都可以暗示我如何将我的报价提到我可以使用的真实物品中吗? 谢谢!!

2 个答案:

答案 0 :(得分:0)

Long1 Short1 的变量赋值错误:您不是调用方法,而是使用函数名称分配字符串文字。尝试将它们更改为:

>>> Long1 = L1.get_price()
>>> Short1 = S2.get_price()

答案 1 :(得分:0)

将值放在引号中告诉Python它是一个String数据类型。使用它你将分裂哪些将失败。即使使用函数float,因为该值实际上是一个字符串而不是表达式的值,您可能希望它导致函数调用失败。 您不需要使用引号,直接函数调用应该可以解决问题。

>>> Long1 = L1.get_price()

>>> Short1 = S2.get_price()