股票K线图-JfreeChart版

股票K线图-JfreeChart

 

股票的K线图是所有Chart图中最复杂的一种,把一个K线图拆分开来我们可以发现,K线图的上半截实际上是由阴阳线(阴阳线可以表示开盘价,收盘价,最高价,最低价)、和若干条随时间变化的若干条均线组成;下半截则由与阴阳线对应的成交量柱形图和若干条随时间变化的成交量均线组成。如下图:

了解这一点之后,对照JFreeChart我们发现所有的单个Chart它都已经提供了,我们所需要做的就是把这些Chart进行组合,进而形成一张K线图。

股票中的阴阳线,我们可以用OHLCDataset(蜡烛图)来实现,均线可以用IntervalXYDataset来实现,对于与阴阳线对应的成交量的值我们同样可以用OHLCDataset来实现,只是在编程的时候注意些技艺就可以实现了。

表示阴阳线的(蜡烛图)OHLCDataset如下图:

 

表示均线的IntervalXYDataset图如下:

 

对于K线图的上半部分我们可以用JFreeChart中的蜡烛图与时间线图的叠加来完成,下半部分我们同样可以用JFreeChart中的蜡烛图与时间线图的叠加来完成。完成之后我们只需要将上下两部分ChartCombinedDomainXYPlot进行组合,得到的结果就是我们想要的K线图。知道中明确了这些信息之后我们就可以动手来做JFreeChart版的K线图啦。

这里我们采用JFreeChart的最新版jfreechart- 1.0.6 来实现。为了方便我们把做好的K线图放到网页当中我们采用Applet来作为载体。同时为了不让Applet直接去访问数据库我们利用Bstek公司的J2EE前端展现产品Dorado5来在客户端为K线图的Applet传递数据,接下来我们就来一步一步实现我们的K线图JFreeChart版。

1)      构造一个为K线图提供数据的表,表结构如下

create table k_line_data(

  stock_name        varchar(100),--股票名称

  issue_date          date,//日期

  open_value         double,//开盘价

  high_value          double,//最高价

  low_value          double,//最低价

  close_value        double,//收盘价

  volume_value            double,//成交量

  avg5                  double,//5日均价

  avg10                double,//10日均价

  avg20                double,20日均价

  avg60                double,//60日均价

  vol_avg5            double,//5日成交量均价

  vol_avg10          double//10日成交量均价

)

 

接下来我们需要虚拟一些数据出来提供给K线图使用,我们用Dorado5展现的效果如下:

我们要实现的效果是在客户端通过Dorado5中的Dataset通过JS来调用Applet里的方法,为Applet里的K线图提供数据,这样做就避免了我们在Applet里直接去访问服务器端的数据库里的数据。

 

2)      Applet代码如下:

package test.applet;

 

import java.awt.Color;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Date;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

 

import javax.swing.JApplet;

import javax.swing.JPanel;

 

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.DateAxis;

import org.jfree.chart.axis.DateTickUnit;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.block.BlockBorder;

import org.jfree.chart.block.BlockContainer;

import org.jfree.chart.block.BorderArrangement;

import org.jfree.chart.labels.StandardXYToolTipGenerator;

import org.jfree.chart.plot.CombinedDomainXYPlot;

import org.jfree.chart.plot.Plot;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.CandlestickRenderer;

import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

import org.jfree.chart.title.LegendTitle;

import org.jfree.data.general.Dataset;

import org.jfree.data.time.Day;

import org.jfree.data.time.TimeSeries;

import org.jfree.data.time.TimeSeriesCollection;

import org.jfree.data.xy.DefaultHighLowDataset;

import org.jfree.data.xy.IntervalXYDataset;

import org.jfree.data.xy.OHLCDataset;

import org.jfree.ui.HorizontalAlignment;

import org.jfree.ui.RectangleEdge;

 

public class TestApplet extends JApplet {

       List ls = new ArrayList();//定义一个用来保存数据的集合类List

 

       Map map = null;//用来表示一条记录

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值