我正在设计一个工具来帮助我管理我的股票投资组合中的风险。我有一些代码可以从雅虎金融收集 4 股股票、2 倍多头和 2 倍空头的当前价格数据。这是使用 yahoo-finance 工具。
我可以收集数据,但我不知道如何将价格相互除以返回价差的值(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 “读取字符串”?
我真的很困惑,谁能提示我如何将我的报价转化为我可以使用的真实物品?