jfreechart绘制K线图

最近在工作中需要做一个生成K线图的工具,在网上查了下发现可以用jfreechart来实现,现已完成,发上来传大家参考

1.在网上下载 jfreechart (我用的是jfreechart-1.0.8.zip) 解压之后将里面的

        jfreechart-1.0.8a.jar   jcommon-   1.0.12.jar 放在     项目名/WebRoot/WEB-INF/lib  下面

 

 

2.建立jsp文件:kline.jsp

说明:(1).我的数据是采用SQL数据库中的数据

        (2).有些代码来源网上

<%@ page language="java" contentType="image/png;charset=GB2312"
 import="java.awt.*"
 import="java.text.*"
 import="java.util.*"
 import="org.jfree.chart.*"
 import="org.jfree.chart.axis.*"
 import="org.jfree.chart.servlet.*"
 import="org.jfree.chart.plot.*"
 import="org.jfree.chart.renderer.*"
 import="org.jfree.chart.renderer.category.*"
 import="org.jfree.chart.axis.*"
 import="org.jfree.chart.entity.*"
 import="org.jfree.chart.labels.*"
 import="org.jfree.chart.title.*"
 import="org.jfree.chart.urls.*"
 import="org.jfree.chart.renderer.xy.*"
 import="org.jfree.chart.annotations.*"
 import="org.jfree.data.*"
 import="org.jfree.date.DateUtilities"
 import="org.jfree.data.xy.*"
 import="org.jfree.data.time.*"
 import="org.jfree.data.category.*"
 import="org.jfree.date.SerialDate"
 import="org.jfree.ui.*"
 import="org.jfree.util.*"
 import="java.sql.Connection"
 import="java.sql.DriverManager"
 import="java.sql.Statement"
 import="java.sql.ResultSet"
 import="org.jfree.data.time.ohlc.OHLCSeries"
    import="org.jfree.data.time.ohlc.OHLCSeriesCollection"
    import="java.sql.ResultDate"
    import="java.text.SimpleDateFormat"  
    import="java.util.Date"
%>

//  class   JavaData3
  //{  
    //public   static   void   main(String[] args)
    //{  
      //SimpleDateFormat   sdf=new   SimpleDateFormat("MMMM-dd-yyyy");  
      //Date   date;  
      //String   datetime="02-14-1984";  
      //try{  
      //date=sdf.parse(datetime);  
      // 
     // System.out.println(sdf.format(date));  
   // }catch(Exception   e){System.out.println(e.getMessage());   }  
//  }  
 // }

<HTML>
<HEAD>
</HEAD>
<BODY>
<%
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dvcs517";//mis是数据库名称
    String user="sa";//用户名
    String password="13391220222";//用户密码
    Connection conn= DriverManager.getConnection(url,user,password);
    Statement stmt=conn.createStatement();
   
    String stock_name=new String(request.getParameter("stock_name").getBytes("ISO-8859-1"));
    String stock_date=request.getParameter("stock_date");
    String sql="select * from kline where stock_name='"+stock_name+"'";// and stock_date between '"+start_date+"' and '"+stock_date+"'";//查询数据库
    ResultSet rs=stmt.executeQuery(sql);  
   
    TimeSeries timeseries = new TimeSeries("日线图",Day.class);
    final OHLCSeriesCollection seriesCollection = new OHLCSeriesCollection();//保留K线数据的数据集,必须申明为final,后面要在匿名内部类里面用到     
    while(rs.next())
    { 
       float y0=rs.getFloat("open_value");
       float y1=rs.getFloat("max_value");
       float y2=rs.getFloat("min_value");
       float y3=rs.getFloat("close_value");
       String s=rs.getString("stock_date");    
       int x=Integer.parseInt(s.substring(0,4));  
       int y=Integer.parseInt(s.substring(5,7));  
       int z=Integer.parseInt(s.substring(8,10));  
       timeseries.add(new Day(z,y,x),y3);  
       OHLCSeries series = new OHLCSeries("");//高开低收数据序列,股票K线图的四个数据,依次是开,高,低,收 
       series.add(new Day(z,y,x),y0,y1,y2,y3);//保留K线数据的数据集,必须申明为final,后面要在匿名内部类里面用到
       seriesCollection.addSeries(series);    
    }
      // 创建子Plot对象
       final CandlestickRenderer candlestickRender=new CandlestickRenderer();//设置K线图的画图器,必须申明为final,后面要在匿名内部类里面用到
       candlestickRender.setUseOutlinePaint(true); //设置是否使用自定义的边框线,程序自带的边框线的颜色不符合中国股票市场的习惯
       candlestickRender.setAutoWidthMethod(CandlestickRenderer.WIDTHMETHOD_AVERAGE);//设置如何对K线图的宽度进行设定
       candlestickRender.setAutoWidthGap(0.001);//设置各个K线图之间的间隔
       candlestickRender.setUpPaint(Color.RED);//设置股票上涨的K线图颜色
       candlestickRender.setDownPaint(Color.GREEN);//设置股票下跌的K线图颜色      
       NumberAxis y1Axis = new NumberAxis("邮票价格(元/张)");
       y1Axis.setAutoRange(true);//不不使用自动设定范围     
       XYPlot plot1 = new XYPlot(seriesCollection, null, y1Axis, candlestickRender);
      
       // 创建子Plot对象2
       TimeSeriesCollection dataset1 = new TimeSeriesCollection();  
  // 创建移动平均线数据集对象 
       TimeSeries mav1 = MovingAverage.createMovingAverage
    (
           timeseries, "20日均线", 20, 20
       );
       TimeSeries mav2 = MovingAverage.createMovingAverage
    (
           timeseries, "10日均线", 10, 10
       );
       TimeSeries mav3 = MovingAverage.createMovingAverage
    (
           timeseries, "5日均线", 5, 5
       );   
       dataset1.addSeries(timeseries);       
       dataset1.addSeries(mav1);
       dataset1.addSeries(mav2);
       dataset1.addSeries(mav3);
      
        // 设置子Plot对象1的右边纵轴的绘制属性
    XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();
    xylineandshaperenderer.setBaseShapesVisible(false);//设置曲线是否显示数据点
       plot1.setDataset(1, dataset1);     
       y1Axis.setAutoRangeIncludesZero(false);
       plot1.setRangeAxis(1, y1Axis);       
       plot1.setRenderer(1, xylineandshaperenderer);      
       plot1.mapDatasetToRangeAxis(1, 1);
        // 创建父Plot对象
       DateFormat df=new SimpleDateFormat("yyyy-MM-dd");//设置显示日期格式
       DateAxis x1Axis=new DateAxis();//设置x轴,也就是时间轴
       x1Axis.setAutoRange(true);//设置不采用自动设置时间范围
   
       x1Axis.setAutoTickUnitSelection(true);//设置不采用自动选择刻度值  
       x1Axis.setTickUnit(new DateTickUnit(DateTickUnit.DAY,5));//设置时间刻度的间隔,一般以周为单位
       x1Axis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd"));//设置显示时间的格式
    CombinedDomainXYPlot plot = new CombinedDomainXYPlot(x1Axis);
    DateAxis domainAxis = (DateAxis)plot.getDomainAxis();
    DateTickUnit unit = new DateTickUnit(DateTickUnit.DAY, 5, df);
       domainAxis.setTickUnit(unit);

        // 定义子Plot对象之间的空白
  plot.setGap(10.0);
       
        // 添加子Plot对象
        plot.add(plot1, 1);
        plot.setOrientation(PlotOrientation.VERTICAL);

  // 创建图表
  JFreeChart chart = new JFreeChart(stock_name,
JFreeChart.DEFAULT_TITLE_FONT, plot, true);
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
    String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400, info, session);
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; 
%>
   <img src="<%= graphURL %>" border="0" usemap="#<%= filename%>">

 </BODY>
</HTML>

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值