signals
是一个熊猫数据框,我存储买卖信号。使用getbuySignal
函数,我可以确定生成买入信号的日期,并将这些日期存储在vector_buy
数组中。然后使用get_close
函数,我想获得每个“买入日”之前20天的收盘价(来自sh600004
数据框)并将其存储在vector_close
。
我打印了vector_close
以检查我的代码是否正确。但我的输出很奇怪。 if i<20
函数中get_close
部分的输出是一个仅包含close prices
的数组。但else
部分的输出包含close prince
和datetime index
。就像在底部的图片中显示的那样。
vector_buy = []
vector_close = []
def get_buySignal():
list_buy = []
for i in range(0, len(signals.index)):
global vector_buy
if signals['positions'][i]==1.0:
list_buy.append(i)
vector_buy = np.array(list_buy)
def get_close():
close_list = []
for i in vector_buy:
global vector_close
if i < 20:
close_list.append(sh600004['close'][range(0,i)])
vector_close = np.array(close_list)
print vector_close
else:
close_list.append(sh600004['close'][range(i-19,i)])
vector_close = np.array(close_list)
print vector_close
get_buySignals()
get_close()
这是buy_vector
array([ 10, 37, 47, 57, 82, 94, 102, 148, 165, 179, 188,
201, 248, 260, 270, 272, 290, 299, 331, 350, 361, 373,
409, 417, 435, 449, 457, 465, 491, 511, 527, 536, 555,
571, 592, 609, 634, 661, 672, 706, 718, 735, 776, 794,
807, 838, 854, 870, 890, 907, 915, 934, 969, 1004, 1013,
1020, 1032, 1034, 1039, 1050, 1099, 1116, 1140, 1157, 1202, 1214,
1228, 1238, 1257, 1276, 1297, 1311, 1319, 1347, 1376, 1379, 1389,
1406, 1425, 1455, 1460, 1478, 1492, 1518, 1533, 1545, 1559, 1574,
1590, 1615, 1627, 1657, 1683, 1692, 1704, 1731, 1742, 1758, 1775,
1795, 1824, 1836, 1852, 1864, 1905, 1913, 1950, 1966, 1986, 1999,
2005, 2020, 2046, 2079, 2088, 2108, 2113, 2124, 2145, 2154, 2166,
2178, 2218, 2234, 2244, 2251, 2302, 2309, 2311, 2324, 2339, 2351,
2372, 2387, 2397, 2408, 2422, 2446, 2462])
答案 0 :(得分:0)
也许您可以优化代码并使用Pandas的强大功能来解决您的问题。如果我做对了,你想得到信号的所有信号,其中信号['position'] == 1。所以你不应该使用for-loop但是试试这个:
list_buy = signal[signal['positions'] == 1].index
在np.array中转换它很容易:
vector_buy = list_buy.as_matrix()
要获取vector_close中的最后20个条目,请尝试以下方法:
vector_close = sh600004['close'].tail(20)
或
vector_close = sh600004['close'].head(20)