美文网首页
K线图指标算法(MA EMA)

K线图指标算法(MA EMA)

作者: vachex | 来源:发表于2019-08-15 14:14 被阅读0次
    写在前面的话

    本人android开发股线图时基于MpAndroidChart开发的,所以后面用到的算法中CandleEntry, Entry等都是MpAndroidChart的API,均使用java实现,算法经过对比验证,和其他证券平台的指标结果一致。
    目前只研究了MA、EMA、BOLL、MACD、KDJ、RSI几种指标。

    一、MA:

    英文(Moving average)的简写,叫移动平均线指标,算法最简单的一个指标。

    计算方式:

    1.N日MA=N日收市价的总和/N(即算术平均数)
    2.要设置多条移动平均线,一般参数设置为N1=5,N2=10,N3=20,N4=60,N5=120,N6=250

        // n日均线MA,
         public static List<Entry> getMA(List<CandleEntry> entries, int n) {
            List<Entry> result = new ArrayList<>();
            for (int i = 0, len = entries.size(); i < len; i++) {
                if (i < n - 1) {
                    continue;
                }
                float sum = 0;
                for (int j = 0; j < n; j++) {
                    sum += entries.get(i - j).getClose();
                }
                result.add(new Entry(entries.get(i).getX(), sum / n));
            }
            return result;
        }
    

    二、EMA:

    指数移动平均值。也叫EXPMA指标,它也是一种趋向类指标,指数移动平均值是以指数式递减加权的移动平均

    计算方式:

    EMAtoday=α * Pricetoday + ( 1 - α ) * EMAyesterday;
    其中,α为平滑指数,一般取作2/(N+1)。在计算MACD指标时,EMA计算中的N一般选取12和26天,因此α相应为2/13和2/27

       /**
         * EMA算法
         * EMA(N) = 2/(N+1)*C + (N-1)/(N+1)*EMA', EMA'为前一天的ema; 通常N取12和26
         *
         * @param entries
         * @param n
         * @return
         */
        public static List<Entry> getEMA(List<CandleEntry> entries, int n) {
            List<Entry> result = new ArrayList<>();
            float lastEma = entries.get(0).getClose();// 第一个EMA为第一个数据的价格
            result.add(new Entry(0, lastEma));
    
            float[] emaFactor = getEMAFactor(n);
            for (int i = 1; i < entries.size(); i++) {
                float ema = emaFactor[0] * entries.get(i).getClose() + emaFactor[1] * lastEma;
                result.add(new Entry(entries.get(i).getX(), ema));
                lastEma = ema;
            }
            return result;
        }
    
    
       /**
         * 获取EMA计算时的相关系数 (后续多个地方需要这个系数 抽取出来用)
         * @param n
         * @return
         */
        private static float[] getEMAFactor(int n) {
            return new float[]{2f / (n + 1), (n - 1) * 1.0f / (n + 1)};
        }
    

    相关文章

      网友评论

          本文标题:K线图指标算法(MA EMA)

          本文链接:https://www.haomeiwen.com/subject/tmkzjctx.html