Python Numpy,对符合定量分析中买入/卖出逻辑的行进行矢量化选择

Python Numpy,对符合定量分析中买入/卖出逻辑的行进行矢量化选择,python,arrays,numpy,quantitative-finance,Python,Arrays,Numpy,Quantitative Finance,编辑2: 感谢您的回复,我进一步了解了: buyChange=np.where(np.diff(购买>0)!=0) sellChange=np.where(np.diff(sell>0)!=0) 现在我有两个指数数组,一个是买入逻辑交叉,另一个是卖出逻辑交叉: 购买:(数组([3,5,8,9,14,15,17,19,20,26,27, 33, 39, 41, 46, 47, 51, 60, 61, 62, 70, 71, 75、76、77、78、80、81

编辑2: 感谢您的回复,我进一步了解了:

buyChange=np.where(np.diff(购买>0)!=0)

sellChange=np.where(np.diff(sell>0)!=0)

现在我有两个指数数组,一个是买入逻辑交叉,另一个是卖出逻辑交叉:

购买:(数组([3,5,8,9,14,15,17,19,20,26,27, 33, 39, 41, 46, 47, 51, 60, 61, 62, 70, 71, 75、76、77、78、80、81、83、88、90、97、100

销售:(数组([22,34,54,63,85,88,89,102,103,110,111

我现在需要的是代表买入和卖出对的指数对。当买入交叉时,这是一对的开始,然后卖出数组中第一个较高的数字是该买入/卖出对中的第二个。然后买入数组中高于上次卖出的下一个最高点是下一对的开始。对于上面的数组,它将ld为(3,22)(26,34)(39,54)(60,63)(70,85)(88,89)。然后,我可以使用此代码中的这些索引来找到我将在回测中交易的相应开盘价:

价格=o[buyChange[0][index]+2]

\编辑2

编辑: 我发现这个函数可以找到数组中负的部分,但现在我必须找到该部分开头的日期,即数组从正变为负的日期。有人能帮忙吗

buys=np.where(buy<0)

像下面这样的东西不起作用,但这是我想要实现的想法:

buys=np.where(购买<0和购买[-1]>0)

或:

buys=np.where(买[1:][0和买[:-1]>0)

/编辑

我有一个for循环,它通过股票文件中的数组和if语句来确定某一行是买入还是卖出。我正在寻找一种方法来矢量化这个操作,可能只是创建一个买入/卖出日的列表,然后我就可以计算我的回报。实际上是一个信号日之后的日期列表,因为我在o上交易第二天开始写。以下是我的程序要点:

对于入库文件:
d、 c,h,l,o,v=getData(str(root+'\\'+stock))#在文件中创建列的numpy数组
s=sma(c,sma,stockLen)#创建简单移动平均线数组
sL=sma(c,longSMA,stockLen)#创建较长的简单移动平均线数组
#下面是我试图用矢量化替换的代码:
范围内的天数(斯托克伦):
如果c[day]sL[day]且站姿==“保持”:
sellPrice=o[天+1]
贸易利润=pctChange(买入价、卖出价)
pctPerYear.append((250/保留时间)*交易利润)

STANTE='none'
查看熊猫文档中的此链接

您也会发现此链接在短期内很有用:

对于上述代码,您是否尝试以以下形式实施审查:

DATA['Return'] = np.log(DATA['close'] / DATA['close'].shift(1))

如果您只想找到向量改变符号的点,可以执行以下操作:

change_points = np.where(np.diff(buy>0)!=0)

如果您能提供一些数据示例,我很乐意提供进一步的帮助。我添加了数据片段。Thanx对于pandas链接,我将研究如何将pandas与cython一起使用,文档中说它在for循环中工作得很快,因此这可能是正确的解决方案,而不是试图消除最后一个for循环。您使用的持续时间是多少天移动平均数?(我试图使用劳埃德船级社2015年1月1日至2015年11月6日的数据来完成此项工作,这些数据是否足以进行此项工作?(221天)如何得出保持时间?(它是实际的还是由销售信号衍生的?你是否也希望创建日志返回?我试图使我从本教程学到的程序更有效。(视频33)对于测试,我现在使用5和15个SMA,但这可能不是一个好的算法,我只是想让基本的工作,所以我可以修改和调整它。我得到了一条线的等待时间“if stance==‘holding’:holdingTime+=1。我不知道确切的日志回报率是多少,但我得到了%的利润,将其添加到一个列表中,并在所有股票运行后求和(列表)/len(列表)。–30分钟前的谜题