0

我正在编写一个 java 程序来尝试识别股票市场的趋势,并且我想识别以下模式:

其中EMA价值下降SMA超过约。0.7%(第 1 天),您可以寻找未来 2-3 天两者之间 0.2%-0.5% 的波动(SMA&EMA上下关系的变化)。这表明卖出信号。

我有一个浮点值数组,EMA然后SMA我有一个单独的浮点数组percentDif,它包含 EMA 和 SMA 之间的百分比差异。例如,这些是EMA,SMApercentDif数组的前两组值

EMA 314.395         SMA 314.9859884       percentDif -0.001876237
EMA 313.9476        SMA 314.4888908        percentDif -0.001721176

我已经编写了这个方法来识别我想要的模式,但它不能正常工作,有没有更好的方法可以做到这一点?

public void trend(){

    /*
     * Trend indicator pattern
     */
    float valueDrop = -0.7f;

    float minFluxPos = 0.2f;
    float maxFluxPos = 0.5f;

    float minFluxNeg = -0.2f;
    float maxFluxNeg = -0.5f;

    for(int i = 0; i< percentDif.length-2; i++)
    {
        //If the difference between EMA and SMA is greater or equal to -0.7 percent
        if(percentDif[i] >= valueDrop){
            //If the next day the percentage difference fluctuates between 0.2 or 0.5 either way
            if( ((percentDif[i+1] > minFluxPos) && (percentDif[i+1] < maxFluxPos))
                    || ((percentDif[i+1] > minFluxNeg) && (percentDif[i+1] < maxFluxNeg)) )
            {
                //Indicates price drop and therefore sell signal
                System.out.println("Trend Indicated - SELL");
            }
        }
    }
}

我在percentDif数组中输入了以下值:5 -0.8 -0.3

这些值符合模式的描述,因此应该触发 print 语句,但它没有这样做。

4

2 回答 2

0

到目前为止,这段代码中效率最低的事情是写入控制台。鉴于您很可能只有 10 年内的每日数据,即 2500 个样本,因此以这种方式扫描大约需要 1 毫秒。

我怀疑你的循环结束得太早了试试

for(int i = 0; i < percentDif.length - 1; i++)

你的最小值/最大值是错误的

float minFluxNeg = -0.5f;
float maxFluxNeg = -0.2f;
于 2013-01-02T12:31:42.373 回答
0

对于负通量值,您有错误的比较运算符。if 语句应该是:

if( ((percentDif[i+1] > minFluxPos) && (percentDif[i+1] < maxFluxPos))
                || ((percentDif[i+1] < minFluxNeg) && (percentDif[i+1] > maxFluxNeg)) )

此外,鉴于您提供的数据和边界,条件永远不会成立。在第一次迭代中,外部条件成立(如 5 > -0.7)但内部条件不成立(因为 -0.8 既不在 0.2 和 0.5 之间,也不在 -0.2 和 -0.5 之间)。在第二次也是最后一次迭代中,外部条件失败为 -0.8 < -0.7。

于 2013-01-02T12:51:53.933 回答