protected CandleData generateCandleData() { CandleData d = new CandleData(); ArrayList<CandleEntry> entries = new ArrayList<CandleEntry>(); for (int index = 0; index < itemcount; index += 2) entries.add(new CandleEntry(index + 1f, 90, 70, 85, 75f)); CandleDataSet set = new CandleDataSet(entries, "Candle DataSet"); set.setDecreasingColor(Color.rgb(142, 150, 175)); set.setShadowColor(Color.DKGRAY); set.setBarSpace(0.3f); set.setValueTextSize(10f); set.setDrawValues(false); d.addDataSet(set); return d; }
protected CandleData generateCandleData() { CandleData d = new CandleData(); ArrayList<CandleEntry> entries = new ArrayList<CandleEntry>(); for (int index = 0; index < itemcount; index++) entries.add(new CandleEntry(index, 20f, 10f, 13f, 17f)); CandleDataSet set = new CandleDataSet(entries, "Candle DataSet"); set.setColor(Color.rgb(80, 80, 80)); set.setBarSpace(0.3f); set.setValueTextSize(10f); set.setDrawValues(false); d.addDataSet(set); return d; }
/** * Prepare CandleData for candlestick chart * @param xIndex - float * @param shadowH - float * @param shadowL - float * @param open - float * @param close - float * @param seriesName - String * @return CandleData */ private CandleData generateCandleData(float xIndex, float shadowH, float shadowL, float open, float close, String seriesName){ CandleData d = new CandleData(); ArrayList<CandleEntry> entries = new ArrayList<>(); entries.add(new CandleEntry(xIndex, shadowH, shadowL, open, close)); CandleDataSet set = new CandleDataSet(entries, seriesName); set.setDecreasingColor(Color.rgb(142, 150, 175)); set.setShadowColor(Color.DKGRAY); set.setDecreasingColor(Color.parseColor("#2196F3")); set.setBarSpace(0.3f); set.setValueTextSize(10f); set.setShadowWidth(2f); set.setDrawValues(false); d.addDataSet(set); return d; }
private CandleData generateMarginCandleData(List<MarketHistory> historyEntries) { SimpleDateFormat format = new SimpleDateFormat("MMM dd", Locale.getDefault()); int size = historyEntries.size(); List<CandleEntry> entries = new ArrayList<>(size); List<String> xAxis = new ArrayList<>(size); for (int i = 0; i < size; i++) { MarketHistory history = historyEntries.get(i); Date recordDate = new Date(history.getRecordDate()); xAxis.add(format.format(recordDate)); entries.add(new CandleEntry(i, (float) history.getHighPrice(), (float) history.getLowPrice(), (float) history.getAveragePrice(), (float) history.getAveragePrice() )); } CandleDataSet set = new CandleDataSet(entries, "Price Margins"); set.setShadowColor(Color.DKGRAY); set.setShadowWidth(2.0f); set.setShowCandleBar(true); set.setBarSpace(0.35f); set.setNeutralColor(Color.DKGRAY); set.setDrawValues(false); set.setDrawHighlightIndicators(false); set.setDrawVerticalHighlightIndicator(false); set.setAxisDependency(YAxis.AxisDependency.LEFT); return new CandleData(xAxis, set); }
@Override public void initBuffers() { CandleData candleData = mChart.getCandleData(); mShadowBuffers = new CandleShadowBuffer[candleData.getDataSetCount()]; mBodyBuffers = new CandleBodyBuffer[candleData.getDataSetCount()]; for (int i = 0; i < mShadowBuffers.length; i++) { CandleDataSet set = candleData.getDataSetByIndex(i); mShadowBuffers[i] = new CandleShadowBuffer(set.getValueCount() * 4); mBodyBuffers[i] = new CandleBodyBuffer(set.getValueCount() * 4); } }
@Override public void drawData(Canvas c) { CandleData candleData = mChart.getCandleData(); for (CandleDataSet set : candleData.getDataSets()) { if (set.isVisible() && set.getEntryCount() > 0) drawDataSet(c, set); } }
@Override void dataSetConfig(IDataSet<CandleEntry> dataSet, ReadableMap config) { CandleDataSet candleDataSet = (CandleDataSet) dataSet; ChartDataSetConfigUtils.commonConfig(candleDataSet, config); ChartDataSetConfigUtils.commonBarLineScatterCandleBubbleConfig(candleDataSet, config); ChartDataSetConfigUtils.commonLineScatterCandleRadarConfig(candleDataSet, config); // CandleDataSet only config if (BridgeUtils.validate(config, ReadableType.Number, "barSpace")) { candleDataSet.setBarSpace((float) config.getDouble("barSpace")); } if (BridgeUtils.validate(config, ReadableType.Number, "shadowWidth")) { candleDataSet.setShadowWidth((float) config.getDouble("shadowWidth")); } if (BridgeUtils.validate(config, ReadableType.String, "shadowColor")) { candleDataSet.setShadowColor(Color.parseColor(config.getString("shadowColor"))); } if (BridgeUtils.validate(config, ReadableType.Boolean, "shadowColorSameAsCandle")) { candleDataSet.setShadowColorSameAsCandle(config.getBoolean("shadowColorSameAsCandle")); } if (BridgeUtils.validate(config, ReadableType.String, "neutralColor")) { candleDataSet.setNeutralColor(Color.parseColor(config.getString("neutralColor"))); } if (BridgeUtils.validate(config, ReadableType.String, "decreasingColor")) { candleDataSet.setDecreasingColor(Color.parseColor(config.getString("decreasingColor"))); } if (BridgeUtils.validate(config, ReadableType.String, "decreasingPaintStyle")) { candleDataSet.setDecreasingPaintStyle(Paint.Style.valueOf(config.getString("decreasingPaintStyle").toUpperCase())); } if (BridgeUtils.validate(config, ReadableType.String, "increasingColor")) { candleDataSet.setIncreasingColor(Color.parseColor(config.getString("increasingColor"))); } if (BridgeUtils.validate(config, ReadableType.String, "increasingPaintStyle")) { candleDataSet.setIncreasingPaintStyle(Paint.Style.valueOf(config.getString("increasingPaintStyle").toUpperCase())); } }
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int prog = (mSeekBarX.getProgress() + 1); tvX.setText("" + prog); tvY.setText("" + (mSeekBarY.getProgress())); mChart.resetTracking(); ArrayList<CandleEntry> yVals1 = new ArrayList<CandleEntry>(); for (int i = 0; i < prog; i++) { float mult = (mSeekBarY.getProgress() + 1); float val = (float) (Math.random() * 40) + mult; float high = (float) (Math.random() * 9) + 8f; float low = (float) (Math.random() * 9) + 8f; float open = (float) (Math.random() * 6) + 1f; float close = (float) (Math.random() * 6) + 1f; boolean even = i % 2 == 0; yVals1.add(new CandleEntry( i, val + high, val - low, even ? val + open : val - open, even ? val - close : val + close, getResources().getDrawable(R.drawable.star) )); } CandleDataSet set1 = new CandleDataSet(yVals1, "Data Set"); set1.setDrawIcons(false); set1.setAxisDependency(AxisDependency.LEFT); // set1.setColor(Color.rgb(80, 80, 80)); set1.setShadowColor(Color.DKGRAY); set1.setShadowWidth(0.7f); set1.setDecreasingColor(Color.RED); set1.setDecreasingPaintStyle(Paint.Style.FILL); set1.setIncreasingColor(Color.rgb(122, 242, 84)); set1.setIncreasingPaintStyle(Paint.Style.STROKE); set1.setNeutralColor(Color.BLUE); //set1.setHighlightLineWidth(1f); CandleData data = new CandleData(set1); mChart.setData(data); mChart.invalidate(); }
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int prog = (mSeekBarX.getProgress() + 1); tvX.setText("" + prog); tvY.setText("" + (mSeekBarY.getProgress())); mChart.resetTracking(); ArrayList<CandleEntry> yVals1 = new ArrayList<CandleEntry>(); for (int i = 0; i < prog; i++) { float mult = (mSeekBarY.getProgress() + 1); float val = (float) (Math.random() * 40) + mult; float high = (float) (Math.random() * 9) + 8f; float low = (float) (Math.random() * 9) + 8f; float open = (float) (Math.random() * 6) + 1f; float close = (float) (Math.random() * 6) + 1f; boolean even = i % 2 == 0; yVals1.add(new CandleEntry(i, val + high, val - low, even ? val + open : val - open, even ? val - close : val + close)); } ArrayList<String> xVals = new ArrayList<String>(); for (int i = 0; i < prog; i++) { xVals.add("" + (1990 + i)); } CandleDataSet set1 = new CandleDataSet(yVals1, "Data Set"); set1.setAxisDependency(AxisDependency.LEFT); // set1.setColor(Color.rgb(80, 80, 80)); set1.setShadowColor(Color.DKGRAY); set1.setShadowWidth(0.7f); set1.setDecreasingColor(Color.RED); set1.setDecreasingPaintStyle(Paint.Style.FILL); set1.setIncreasingColor(Color.rgb(122, 242, 84)); set1.setIncreasingPaintStyle(Paint.Style.STROKE); set1.setNeutralColor(Color.BLUE); //set1.setHighlightLineWidth(1f); CandleData data = new CandleData(xVals, set1); mChart.setData(data); mChart.invalidate(); }
@Override IDataSet createDataSet(ArrayList<CandleEntry> entries, String label) { return new CandleDataSet(entries, label); }
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int prog = (mSeekBarX.getProgress() + 1); tvX.setText("" + prog); tvY.setText("" + (mSeekBarY.getProgress())); mChart.resetTracking(); ArrayList<CandleEntry> yVals1 = new ArrayList<CandleEntry>(); for (int i = 0; i < prog; i++) { float mult = (mSeekBarY.getProgress() + 1); float val = (float) (Math.random() * 40) + mult; float high = (float) (Math.random() * 9) + 8f; float low = (float) (Math.random() * 9) + 8f; float open = (float) (Math.random() * 6) + 1f; float close = (float) (Math.random() * 6) + 1f; boolean even = i % 2 == 0; yVals1.add(new CandleEntry(i, val + high, val - low, even ? val + open : val - open, even ? val - close : val + close)); } CandleDataSet set1 = new CandleDataSet(yVals1, "Data Set"); set1.setAxisDependency(AxisDependency.LEFT); // set1.setColor(Color.rgb(80, 80, 80)); set1.setShadowColor(Color.DKGRAY); set1.setShadowWidth(0.7f); set1.setDecreasingColor(Color.RED); set1.setDecreasingPaintStyle(Paint.Style.FILL); set1.setIncreasingColor(Color.rgb(122, 242, 84)); set1.setIncreasingPaintStyle(Paint.Style.STROKE); set1.setNeutralColor(Color.BLUE); //set1.setHighlightLineWidth(1f); CandleData data = new CandleData(set1); mChart.setData(data); mChart.invalidate(); }
@Override protected void drawData() { ArrayList<CandleDataSet> dataSets = mData.getDataSets(); // pre allocate float[] shadowPoints = new float[4]; float[] bodyPoints = new float[4]; for (int i = 0; i < mData.getDataSetCount(); i++) { CandleDataSet dataSet = dataSets.get(i); ArrayList<CandleEntry> entries = dataSet.getYVals(); mRenderPaint.setStrokeWidth(dataSet.getShadowWidth()); for (int j = 0; j < entries.size() * mPhaseX; j++) { // get the color that is specified for this position from // the DataSet, this will reuse colors, if the index is out // of bounds mRenderPaint.setColor(dataSet.getColor(j)); // get the entry CandleEntry e = entries.get(j); // transform the entries values for shadow and body transformShadow(shadowPoints, e); transformBody(bodyPoints, e, dataSet.getBodySpace()); float xShadow = shadowPoints[0]; float leftBody = bodyPoints[0]; float rightBody = bodyPoints[2]; float high = shadowPoints[1]; float low = shadowPoints[3]; float open = bodyPoints[1]; float close = bodyPoints[3]; if (isOffContentRight(leftBody)) break; // make sure the lines don't do shitty things outside bounds if (isOffContentLeft(rightBody) && isOffContentTop(low) && isOffContentBottom(high)) continue; // draw the shadow mDrawCanvas.drawLine(xShadow, low, xShadow, high, mRenderPaint); // decide weather the body is hollow or filled if (open > close) { mRenderPaint.setStyle(Paint.Style.FILL); // draw the body mDrawCanvas.drawRect(leftBody, close, rightBody, open, mRenderPaint); } else { mRenderPaint.setStyle(Paint.Style.STROKE); // draw the body mDrawCanvas.drawRect(leftBody, open, rightBody, close, mRenderPaint); } } } }
@Override protected void drawHighlights() { for (int i = 0; i < mIndicesToHightlight.length; i++) { int xIndex = mIndicesToHightlight[i].getXIndex(); // get the // x-position CandleDataSet set = mData.getDataSetByIndex(mIndicesToHightlight[i].getDataSetIndex()); if (set == null) continue; mHighlightPaint.setColor(set.getHighLightColor()); CandleEntry e = set.getEntryForXIndex(xIndex); if(e == null) continue; float low = e.getLow() * mPhaseY; float high = e.getHigh() * mPhaseY; float[] vertPts = new float[] { xIndex, mYChartMax, xIndex, mYChartMin, xIndex + 1f, mYChartMax, xIndex + 1f, mYChartMin }; float[] horPts = new float[] { 0, low, mDeltaX, low, 0, high, mDeltaX, high }; mTrans.pointValuesToPixel(vertPts); mTrans.pointValuesToPixel(horPts); // draw the vertical highlight lines mDrawCanvas.drawLines(vertPts, mHighlightPaint); // draw the horizontal highlight lines mDrawCanvas.drawLines(horPts, mHighlightPaint); } }
@Override protected void drawData() { ArrayList<CandleDataSet> dataSets = mCurrentData.getDataSets(); // pre allocate float[] shadowPoints = new float[4]; float[] bodyPoints = new float[4]; for (int i = 0; i < mCurrentData.getDataSetCount(); i++) { CandleDataSet dataSet = dataSets.get(i); ArrayList<CandleEntry> entries = dataSet.getYVals(); mRenderPaint.setStrokeWidth(dataSet.getShadowWidth()); for (int j = 0; j < entries.size() * mPhaseX; j++) { // get the color that is specified for this position from // the DataSet, this will reuse colors, if the index is out // of bounds mRenderPaint.setColor(dataSet.getColor(j)); // get the entry CandleEntry e = entries.get(j); // transform the entries values for shadow and body transformShadow(shadowPoints, e); transformBody(bodyPoints, e, dataSet.getBodySpace()); float xShadow = shadowPoints[0]; float leftBody = bodyPoints[0]; float rightBody = bodyPoints[2]; float high = shadowPoints[1]; float low = shadowPoints[3]; float open = bodyPoints[1]; float close = bodyPoints[3]; if (isOffContentRight(leftBody)) break; // make sure the lines don't do shitty things outside bounds if (isOffContentLeft(rightBody) && isOffContentTop(low) && isOffContentBottom(high)) continue; // draw the shadow mDrawCanvas.drawLine(xShadow, low, xShadow, high, mRenderPaint); // decide weather the body is hollow or filled if (open > close) { mRenderPaint.setStyle(Paint.Style.FILL); // draw the body mDrawCanvas.drawRect(leftBody, close, rightBody, open, mRenderPaint); } else { mRenderPaint.setStyle(Paint.Style.STROKE); // draw the body mDrawCanvas.drawRect(leftBody, open, rightBody, close, mRenderPaint); } } } }
@Override protected void drawHighlights() { for (int i = 0; i < mIndicesToHightlight.length; i++) { int xIndex = mIndicesToHightlight[i].getXIndex(); // get the // x-position CandleDataSet set = mOriginalData.getDataSetByIndex(mIndicesToHightlight[i].getDataSetIndex()); if (set == null) continue; mHighlightPaint.setColor(set.getHighLightColor()); CandleEntry e = set.getEntryForXIndex(xIndex); if(e == null) continue; float low = e.getLow() * mPhaseY; float high = e.getHigh() * mPhaseY; float[] vertPts = new float[] { xIndex, mYChartMax, xIndex, mYChartMin, xIndex + 1f, mYChartMax, xIndex + 1f, mYChartMin }; float[] horPts = new float[] { 0, low, mDeltaX, low, 0, high, mDeltaX, high }; transformPointArray(vertPts); transformPointArray(horPts); // draw the vertical highlight lines mDrawCanvas.drawLines(vertPts, mHighlightPaint); // draw the horizontal highlight lines mDrawCanvas.drawLines(horPts, mHighlightPaint); } }
@Override public void drawHighlighted(Canvas c, Highlight[] indices) { for (int i = 0; i < indices.length; i++) { int xIndex = indices[i].getXIndex(); // get the // x-position CandleDataSet set = mChart.getCandleData().getDataSetByIndex( indices[i].getDataSetIndex()); if (set == null || !set.isHighlightEnabled()) continue; CandleEntry e = set.getEntryForXIndex(xIndex); if (e == null || e.getXIndex() != xIndex) continue; float low = e.getLow() * mAnimator.getPhaseY(); float high = e.getHigh() * mAnimator.getPhaseY(); float y = (low + high) / 2f; float min = mChart.getYChartMin(); float max = mChart.getYChartMax(); float[] pts = new float[] { xIndex, y }; mChart.getTransformer(set.getAxisDependency()).pointValuesToPixel(pts); // draw the lines drawHighlightLines(c, pts, set); } }
@Override public void drawValues(Canvas c) { // if values are drawn if (mChart.getCandleData().getYValCount() < mChart.getMaxVisibleCount() * mViewPortHandler.getScaleX()) { List<CandleDataSet> dataSets = mChart.getCandleData().getDataSets(); for (int i = 0; i < dataSets.size(); i++) { CandleDataSet dataSet = dataSets.get(i); if (!dataSet.isDrawValuesEnabled() || dataSet.getEntryCount() == 0) continue; // apply the text-styling defined by the DataSet applyValueTextStyle(dataSet); Transformer trans = mChart.getTransformer(dataSet.getAxisDependency()); List<CandleEntry> entries = dataSet.getYVals(); int minx = Math.max(mMinX, 0); int maxx = Math.min(mMaxX + 1, entries.size()); float[] positions = trans.generateTransformedValuesCandle( entries, mAnimator.getPhaseX(), mAnimator.getPhaseY(), minx, maxx); float yOffset = Utils.convertDpToPixel(5f); for (int j = 0; j < positions.length; j += 2) { float x = positions[j]; float y = positions[j + 1]; if (!mViewPortHandler.isInBoundsRight(x)) break; if (!mViewPortHandler.isInBoundsLeft(x) || !mViewPortHandler.isInBoundsY(y)) continue; CandleEntry entry = entries.get(j / 2 + minx); drawValue(c, dataSet.getValueFormatter(), entry.getHigh(), entry, i, x, y - yOffset); } } } }