股票池怎么排序?
在策略的编程中,我们通常需要使用数组来管理我们定义的交易信号,这些信号可能来自于不同的指标或者计算,我们需要将它们逐个输入到我们的策略当中,并排序他们出现的顺序,以此作为判断依据。 那么如何高效的维护一个信号的数组呢? 首先我们要知道,在一个合理的交易系统中,其组成部分是简单且可拆解的。
以趋势跟踪系统为例,通常由趋势判断、入场点和出场点构成,而入场点和出场点是又可由更细化的标准组成,如下: 当一个系统被拆解后,我们就可以对每个部分单独设计,从而做到方便可行。 以上图为例,我们将系统的构成分别标记为A、B和C,那么每个部分的信号就可以有一个对应的下标 i 来计算其数值(注意此时不进行加权处理),得到一组新的数字:
通过这样简单的拆解,我们可以把原本复杂的信号问题,转换成了简单的数字计算,然后我们按照这个新算法的计算结果排个序,即可完成我们对信号的评估工作。
然而,这里的问题在于,当我们的交易体系变得更为复杂时,比如加入了更多的参数,或者需要对信号做加权处理,原有的方法就变得不再适用了,这个问题该如何解决呢? 一个比较巧妙的方法是使用堆排序,这是一种选择算法,它允许我们对数据进行加权以及多关键词查询。
假设现在我们需要对一组数据做加权处理,那么加权的思路是可以直接引入到我们之前的计算公式中的,比如在求和之前先乘以相应的权重系数,具体的公式可以根据实际的参数设定而定。 接下来我们就要考虑关键词检索的问题了,对于股票交易而言,常用的关键词有涨和跌,那么我们只需构建两个字符串数组分别存储对应的股票代码和对应的键值就可以了。
有了上述的准备之后,现在我们可以开始输入我们的数据了,也就是将待排序的字符串逐个插入到对应的数组当中。
当全部的数据都插入完成后,我们就可以启动排序了,在这里我们可以使用堆排序的快速版本,原理上是将所有元素都构建成二叉搜索树,然后再从树中获取最大(小)的元素,时间复杂度是O(n*log(n)),比冒泡排序要快很多! 以上就是我对“如何高效地维护一个信号的数组”的回答。