在開篇之前反肋,給大家出個小算法題屡限,一定要做哦猾蒂,因為既然你打算看本章節(jié)內(nèi)容了悠夯,那么這個小算法必須得會的喲!
有一組數(shù)竟稳,1属桦、2、3……99他爸、100聂宾,一共一百個數(shù),假設(shè)是ListA诊笤,現(xiàn)在將
ListA索引為0系谐、1、2讨跟、3纪他、4的數(shù)相加之和賦給ListB索引為4的數(shù)
ListA索引為1、2晾匠、3茶袒、4、5的數(shù)相加之和賦給ListB索引為5的數(shù) ……(以此類推)
ListA索引為95混聊、96弹谁、97、98句喜、99的數(shù)相加之和賦給ListB索引為99的數(shù)
讓你打印出ListB里面所有的數(shù)據(jù),ListB中前4位的值可以用0代替
趕緊動手試一試吧沟于,小算法一個哦咳胃,不難的!最好5分鐘之內(nèi)出答案哦旷太!
(片刻之后)展懈。销睁。。
想必大家都動手試過了吧存崖,有人已經(jīng)做好了冻记,有人還在琢磨呢,那得反思一下啦来惧,算法題很多大公司面試都會出冗栗,考驗?zāi)氵壿嬆芰Γ蛔愕娜丝臻e得惡補(bǔ)一下啊供搀,博主表示自己算法也不咋樣隅居,簡單點的還能應(yīng)付,稍微復(fù)雜點就歇菜咯葛虐!
我們簡單貼下代碼吧
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?是不是胎源!恍然大悟,似不似屿脐。那么這個小算法跟今天的內(nèi)容有什么關(guān)系呢涕蚤,我們今天研究的是k線圖添加均線圖,均線圖的計算就是上面的算法的诵,我們看下圖先万栅。
我們看MA5的那根線,一根理解了奢驯,其他也就懂了申钩。MA5是5日均線,從當(dāng)前天往前推5天(包含當(dāng)天)瘪阁,每天的收盤價之和除以5撒遣,得到當(dāng)天的MA5值,所以相當(dāng)于
ma5(5)=(1收+2收+3收+4收+5收)/5
ma5(6)=(2收+3收+4收+5收+6收)/5
……
一直到最后管跺,是不是跟上面的算法一模一樣义黎。
既然知道均線值怎么算了,那么久簡單了豁跑,下面就直接把算好的數(shù)據(jù)廉涕,放入到折線圖中即可啦!
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庫的東西层释,有的公司甚至不需要客戶端進(jìn)行計算均值,服務(wù)端直接算好返回了快集,那就更簡單了贡羔,省去計算的模塊廉白。我們來試試看效果吧!
完美乖寒!如有問題猴蹂,歡迎留言!均線添加告一段落楣嘁,下面難點在于高亮和加載更多兩個模塊磅轻,這兩個模塊都還在研究中,說實話马澈,感覺還是有點難度的瓢省,只要大家給力的star了,那么樓主也會給力的研究并且開源的痊班!
demo更新地址https://github.com/AndroidJiang/StockChart
(求star)