K線圖指標(biāo)算法(MA EMA)

寫(xiě)在前面的話

本人android開(kāi)發(fā)股線圖時(shí)基于MpAndroidChart開(kāi)發(fā)的,所以后面用到的算法中CandleEntry, Entry等都是MpAndroidChart的API,均使用java實(shí)現(xiàn),算法經(jīng)過(guò)對(duì)比驗(yàn)證,和其他證券平臺(tái)的指標(biāo)結(jié)果一致。
目前只研究了MA、EMA、BOLL、MACD、KDJ、RSI幾種指標(biāo)。
算法代碼傳到這github
demo:StockChart

一、MA:

英文(Moving average)的簡(jiǎn)寫(xiě),叫移動(dòng)平均線指標(biāo),算法最簡(jiǎn)單的一個(gè)指標(biāo)。

計(jì)算方式:

1.N日MA=N日收市價(jià)的總和/N(即算術(shù)平均數(shù))
2.要設(shè)置多條移動(dòng)平均線,一般參數(shù)設(shè)置為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:

指數(shù)移動(dòng)平均值。也叫EXPMA指標(biāo),它也是一種趨向類(lèi)指標(biāo),指數(shù)移動(dòng)平均值是以指數(shù)式遞減加權(quán)的移動(dòng)平均

計(jì)算方式:

EMAtoday=α * Pricetoday + ( 1 - α ) * EMAyesterday;
其中,α為平滑指數(shù),一般取作2/(N+1)。在計(jì)算MACD指標(biāo)時(shí),EMA計(jì)算中的N一般選取12和26天,因此α相應(yīng)為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();// 第一個(gè)EMA為第一個(gè)數(shù)據(jù)的價(jià)格
        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計(jì)算時(shí)的相關(guān)系數(shù) (后續(xù)多個(gè)地方需要這個(gè)系數(shù) 抽取出來(lái)用)
     * @param n
     * @return
     */
    private static float[] getEMAFactor(int n) {
        return new float[]{2f / (n + 1), (n - 1) * 1.0f / (n + 1)};
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容