如何在pandas数据帧中编写简单的信号逻辑?

时间:2016-11-20 16:39:25

标签: python pandas trading algorithmic-trading

我想用数据框创建一个简单的交易系统信号表,如:

            Close   buy   sell
2011-01-31  50       0     0
2011-02-28  40       1     0
2011-03-31  50       0     0
2011-04-30  80       0    -1
2011-05-31  60       1     0
2011-06-30  50       1     0 
2011-07-31  20       0     0
2011-08-31  30       0    -1

信号以下列方式生成:

df['buy'] = np.where( <condition> , 1, 0 )

sell 列以相同的方式创建。

问题是2011-06-30的双重购买信号,紧接在2011-05-31之前的一次。

2011-05-31  60       1     0
2011-06-30  50       1     0 

如何在 df['sell'] 列中以-1结束之前阻止新买入(== 1)信号?

2 个答案:

答案 0 :(得分:2)

如何防止......?

嗯,曾经需要一些更复杂的东西,而不是一个简单的 numpy 矢量化/广播/条件操作,类似于 np.where( <condition> , 1, 0 ) 一个人必须实现一些特定于自定义的功能,以处理这些附加功能,其中有限状态自动机可能很好地用于此类目的。

但是如何实现呢?

简单地说,你的条件已经超越了简单的矢量化/广播矩阵运算的表现力,贸易管理子系统已经开始具有内部,一个SEQ行为和一些其内部转换的规则( s)和 - 过渡限制。

人们很难指望一般的通用工具, numpy - 矩阵和 pandas -DataFrame实例,旨在支持这种特定于问题领域的功能,以便模拟算法交易策略模拟。

最好选择一些特定于交易的工具来满足这种需求,或者期望必须实现一个SEQ-behavior iterator-function,这将促进所需的逻辑(没有智能numpy矢量化/广播表达式或pandas one-liner这就足够了。)

  

范围?
对于那些真正对快速原型交易策略示例感兴趣的人,使用基于FSA的实现方法,检查这种系统设计的简单性+内置(脚本 - 基于)自动一致性测试能力+用于估计代码跨度的行号(绝对不是numpy SLOC):   enter image description here

答案 1 :(得分:0)

我对派对来说有点迟,但我希望这会有所帮助。我想你想要替代1和-1。虽然不是最好的方法,但我建议您添加买入和卖出信号,并将新列称为交易信号。交易信号列以任意方式具有0,1和-1。以下代码说明了进一步的步骤。

import pandas as pd
import numpy as np
trade_signal= pd.DataFrame([1,1,0,0,-1,-1,1,1,-1])
ts_shifted=trade_signal.shift(1)
trade_rule=np.where(trade_signal!=ts_shifted,trade_signal,0)