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

How to code a simple signal logic in pandas dataframe?

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

            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) 信号?

我怎样才能防止...?

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


但是如何实现呢?

简而言之,您的条件已经超出了简单 vectorised/broadcast 矩阵运算的表达能力,贸易管理子系统已经开始具有内部行为、SEQ 行为和一些附加规则内部 -transition(s) 和 -transition-restrictions.

很难指望通用的通用工具,numpy-矩阵和pandas- DataFrame 实例被过度设计以支持此类特定于问题域的功能,以便原型化算法交易策略模拟。

最好选择一些特定于交易的工具来满足此类需求,或者期望必须实施 SEQ 行为迭代器函数,这将促进所需的逻辑(智能 numpy 矢量化/广播的 none表达式或 pandas 一行就足够了。

Scope?
for those really interested in a rapid prototyped Trading Strategy example, using a FSA-based implementation method, check the simplicity of such system design + built-in ( script-based ) automated conformance-testing capability + line numbers for an estimate of the code-span ( definitely not a numpy SLOC ):

我参加聚会有点晚了,但我希望这对您有所帮助。我想你想要备用 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)