我正在努力创造一些能够衡量股票日内和下跌天数的东西,其价格比前一天更高或更低。这显示为1,用于“结束日”'并且对于“下降日”而言为-1。我对这部分感到满意。
我想要一些关于如何在多个股票上运行此函数的帮助/解释,以便最终得到不同列中的每个股票的数组,并且每天在不同的行中。
理想情况下,初始列中包含日期。
这是我迄今为止产生个股的原因。我已经尝试了一些* args和代码循环到函数中,但是没有任何有意义的东西。
import datetime
import pandas as pd
import numpy as np
import datetime
import pandas.io.data
from pandas import Series, DataFrame
ticker = 'aapl'
begin = datetime.datetime(2013, 1, 1)
finish = datetime.datetime(2013, 1, 15)
# Start Workings
def adcount (begin, finish,ticker):
dat = pd.io.data.get_data_yahoo(ticker, start=begin, end=finish)
close = dat.columns[3]
close1 = np.ma.fix_invalid(dat[close].shift(1))
close0 = dat[close].shift(0)
count = 0
for f, b in zip(close1, close0):
if b > f:
count = 1
else:
count = -1
print count
adcount(begin,finish,ticker)
非常感谢任何帮助/想法
答案 0 :(得分:0)
您可以直接使用numpy.sign
对系列进行符号计算,而不是遍历每个项目。这是基于Pandas 0.13 docs的Yahoo样本。如果您使用的是旧版本,则可能需要对其进行调整才能使用该版本。
import numpy as np
import pandas as pd
import pandas.io.data as web
from datetime import datetime as dt
def get_stock_data(ticker, start, end):
return web.DataReader(ticker, 'yahoo', start, end)
def get_returns(stock_history):
base = stock_history['Close']
shifted = base.shift(1)
return (base - shifted)[1:]
start = dt(2013, 1, 1)
end = dt(2013, 1, 15)
tickers = ['AAPL', 'XOM', 'MMM']
data = {}
for t in tickers:
history = get_stock_data(t, start, end)
data[t] = get_returns(history).apply(np.sign)
print(pd.DataFrame(data))
>>> AAPL MMM XOM
Date
2013-01-03 -1 -1 -1
2013-01-04 -1 1 1
2013-01-07 -1 1 -1
2013-01-08 1 1 1
2013-01-09 -1 1 -1
2013-01-10 1 1 1
2013-01-11 -1 -1 1
2013-01-14 -1 1 -1
2013-01-15 -1 1 -1