一步一步教你写股票走势图——K线图(添加均线)

在开篇之前,给大家出个小算法题,一定要做哦,因为既然你打算看本章节内容了,那么这个小算法必须得会的哟!

有一组数,1、2、3……99、100,一共一百个数,假设是ListA,现在将
ListA索引为0、1、2、3、4的数相加之和赋给ListB索引为4的数
ListA索引为1、2、3、4、5的数相加之和赋给ListB索引为5的数 ……(以此类推)
ListA索引为95、96、97、98、99的数相加之和赋给ListB索引为99的数
让你打印出ListB里面所有的数据,ListB中前4位的值可以用0代替

赶紧动手试一试吧,小算法一个哦,不难的!最好5分钟之内出答案哦!

(片刻之后)。。。

想必大家都动手试过了吧,有人已经做好了,有人还在琢磨呢,那得反思一下啦,算法题很多大公司面试都会出,考验你逻辑能力,不足的人空闲得恶补一下啊,博主表示自己算法也不咋样,简单点的还能应付,稍微复杂点就歇菜咯!

我们简单贴下代码吧

        listA = new ArrayList<>();
        listB = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            listA.add(i, i);
        }
        for (int i = 0; i < 100; i++) {
            if (i >= 4) {
                sum = 0;
                listB.add(i, fund(i - 4, i));
            } else {
                listB.add(i, 0);
            }
        }
        for (int i = 0; i < 100; i++) {
            Log.e("OUT", listB.get(i) + "");
        }



private Integer fund(Integer a, Integer b) {
        for (int i = a; i <= b; i++) {
            sum += listA.get(i);
        }
        return sum;
    }

So Easy?是不是!恍然大悟,似不似。那么这个小算法跟今天的内容有什么关系呢,我们今天研究的是k线图添加均线图,均线图的计算就是上面的算法,我们看下图先。

这里写图片描述

我们看MA5的那根线,一根理解了,其他也就懂了。MA5是5日均线,从当前天往前推5天(包含当天),每天的收盘价之和除以5,得到当天的MA5值,所以相当于

ma5(5)=(1收+2收+3收+4收+5收)/5
ma5(6)=(2收+3收+4收+5收+6收)/5
……

一直到最后,是不是跟上面的算法一模一样。

既然知道均线值怎么算了,那么久简单了,下面就直接把算好的数据,放入到折线图中即可啦!

 for (int i = 0, j = 0; i < mData.getKLineDatas().size(); i++, j++) {
            xVals.add(mData.getKLineDatas().get(i).date + "");
            barEntries.add(new BarEntry(mData.getKLineDatas().get(i).vol, i));
            candleEntries.add(new CandleEntry(i, mData.getKLineDatas().get(i).high, mData.getKLineDatas().get(i).low, mData.getKLineDatas().get(i).open, mData.getKLineDatas().get(i).close));
            if(i>=4){
                sum=0;
                line5Entries.add(new Entry(getSum(i - 4, i)/5,i));
            }
            if(i>=9){
                sum=0;
                line10Entries.add(new Entry(getSum(i - 9, i)/10,i));
            }
            if(i>=29){
                sum=0;
                line30Entries.add(new Entry(getSum(i - 29, i)/30,i));
            }

        }


     ArrayList<ILineDataSet> sets = new ArrayList<ILineDataSet>();
        sets.add(setMaLine(5,xVals, line5Entries));
        sets.add(setMaLine(10,xVals, line10Entries));
        sets.add(setMaLine(30, xVals, line30Entries));


        CombinedData combinedData=new CombinedData(xVals);
        LineData lineData=new LineData(xVals,sets);
        combinedData.setData(candleData);
        combinedData.setData(lineData);
        combinedchart.setData(combinedData);

setMaLine方法

  @NonNull
    private LineDataSet setMaLine(int ma,ArrayList<String> xVals, ArrayList<Entry> lineEntries) {
        LineDataSet lineDataSetMa = new LineDataSet(lineEntries, "ma"+ma);
        lineDataSetMa.setDrawValues(false);
        if(ma==5) {
            lineDataSetMa.setColor(Color.GREEN);
        }else if(ma==10){
            lineDataSetMa.setColor(Color.GRAY);
        }else{
            lineDataSetMa.setColor(Color.YELLOW);
        }
        lineDataSetMa.setLineWidth(1f);
        lineDataSetMa.setDrawCircles(false);
        lineDataSetMa.setAxisDependency(YAxis.AxisDependency.LEFT);
        lineDataSetMa.setHighlightEnabled(false);
        return lineDataSetMa;
    }

如果看代码比较乱的,直接看demo即可,均线图部分相对来说比较简单,不需要自定义功能模块,只是单纯的使用了MP库的东西,有的公司甚至不需要客户端进行计算均值,服务端直接算好返回了,那就更简单了,省去计算的模块。我们来试试看效果吧!

这里写图片描述

完美!如有问题,欢迎留言!均线添加告一段落,下面难点在于高亮和加载更多两个模块,这两个模块都还在研究中,说实话,感觉还是有点难度的,只要大家给力的star了,那么楼主也会给力的研究并且开源的!

demo更新地址https://github.com/AndroidJiang/StockChart
(求star)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容

  • 指标概述 移动平均线(MA)具有趋势的特性,它比较平稳,不像日K线会起起落落地震荡。越长期的移动平均线,越能表现稳...
    股独的和弦阅读 5,993评论 0 8
  • 你的眼中有春与秋 胜过我见过爱过的一切山川与河流 ——沃特艾文儿 <...
    烂事病友阅读 341评论 0 0
  • 我不想研究鱼干的腌制了 我要去捉最鲜活的鱼 通往小河的路消失在迷雾里 我太笨了 在寻找中花光了勇气 在不甘中弄丢了...
    玉荑阅读 173评论 0 0
  • 当你喜欢一个人的时候,她的一举一动一颦一笑都会记在心里,吃饭时会思念,走路时会惦记。你的整颗心里满满都是她,所以你...
    MC小五阅读 762评论 0 1
  • 一只狗的前世 到底是什么 它或许想过 也或许根本没想过 人和人在探讨 狗到底也没有思想 狗与狗在探讨 忠诚是否可以...
    冷冬年阅读 509评论 2 11