JFreeChart开发股票K线图

使用jfreeChart绘制股票K线图 http://blog.youkuaiyun.com/tufeng1992/article/details/50953419 因项目需要画K线图,上面的原文中有些类jFreeChart已经废弃,有些改了类名,运行不起来。花了点时间整理了一下,分享出来给需要的人参考。 Maven依赖: ``` <dependency> <groupId>org.jfree</groupId> <artifactId>jfreechar... 阅读详情

 在JAVA的图形开发中,JFreeChart提供源代码及DEMO代码,详细的API工具,如果遇到问题还可以到http://www.jfree.org/phpBB2这个论坛一问究竟,全面的技术支持使图形开发起来得心应手!

下面的例子是用JFreeChart开发股票K线图,附有注释

 

import  java.sql. * ;
import  java.text.SimpleDateFormat;
import  java.util. * ;
import  java.lang. * ;
import  java.awt.Color;
import  java.awt.Font;

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.ChartFrame;
import  org.jfree.chart.ChartPanel;
import  org.jfree.chart.JFreeChart;
import  org.jfree.chart.axis.DateAxis;
import  org.jfree.chart.axis.DateTickMarkPosition;
import  org.jfree.chart.axis.NumberTickUnit;
import  org.jfree.chart.axis.SegmentedTimeline;
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.Marker;
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  TestMinute  {
    
    List ls 
= new ArrayList();//定义一个用来保存数据的集合类List
    double max_vol,min_vol,max_pr,min_pr; 
    Date firstt,lastt;
    Map map 
= null;//用来表示一条记录

public void clearList(){ //清空保存数据的集合类List
        ls.clear();
 }

    
///该方法主要是为WEB端的JS调用,定义一个新的Map,插入一行空的记录
public void insertRecord() {
       map 
= new HashMap();
}


///该方法主要是为WEB端的JS调用,为当前记录设置值
public void setValue(java.lang.String string, java.lang.String value) {
       map.put(string, value);
}


///该方法主要是为WEB端的JS调用,把当前记录添加到记录集List里
public void postRecord() {
       ls.add(map);
}


public double[] calavergerprice(int datenum,double[] val){
     
int ini_num = val.length;
     
int size = ini_num-datenum+1;
     
double[] res = new double[size];
     
     
for(int i = 0;i<size;i++){
         
double tempval = 0.0; 
         
for(int j = i;j<(i+datenum);j++){
              tempval 
= tempval+val[j];
         }

          res[i] 
= tempval/datenum;
     }

     
return res;
}
    

//将数据库中数据读入ls集合中
public void readData(java.lang.String stock_id,int record_num){
    
try{
      Connection con 
= DatabaseConnection.getConection(); 
      Statement stmt 
= con.createStatement();
      ResultSet rs 
= stmt.executeQuery("select * from stockminute where stock_id = '"+stock_id+"' order by tran_time desc limit "+record_num);
      
double[] temp_avg = new double[record_num];
      
double[] vol_temp_avg = new double[record_num];
      
int index = 0;
      
int vol_index = 0;
      
while(rs.next()){
          temp_avg[index
++] = rs.getDouble(7);
          vol_temp_avg[vol_index
++] = rs.getDouble(8);
      }

      
//5,10,30日均价
      double[] avg5 = this.calavergerprice(5, temp_avg);
      
double[] avg10 = this.calavergerprice(10, temp_avg);
      
double[] avg30 = this.calavergerprice(30, temp_avg);
      
      
//5,10,30日均成交量
      double[] vol_avg5 = this.calavergerprice(5,vol_temp_avg);
      
double[] vol_avg10 = this.calavergerprice(10,vol_temp_avg);
      
double[] vol_avg30 = this.calavergerprice(30,vol_temp_avg);
      
      
//设定最高和最低的总体价格和成交量的初始值(假定为第一条记录的内容)
      rs.first();
      
this.max_pr = rs.getDouble(5);
      
this.min_pr = rs.getDouble(6);
      
this.max_vol = rs.getDouble(<
股票K线图-JfreeChart版 股票K线图-JfreeChart版 股票的K线图是所有Chart图中最复杂的一种,把一个K线图拆分开来我们可以发现,K线图的上半截实际上是由阴阳线(阴阳线可以表示开盘价,收盘价,最高价,最低价)、和若干条随时间变化的若干条均线组成;下半截则由与阴阳线对应的成交量柱形图和若干条随时间变化的成交量均线组成。如下图:了解这一点之后,对照JFreeChart我们发现所有的单个C 阅读详情

相关推荐

基于JFreeChart的股票交易K线图停牌日期缺口优化完整解决方案

JFreeChart绘制K线图停牌日期缺口优化   摘要 这是在绘制股票交易K线图时遇到的一个问题,有关问题的优化方案,与一些具体的实现   方法,以及在这个过程中的心得。   关键词 JFreeChart、SegmentTimeline   问题   在绘制股票交易K线图时,遇到如何去除停牌日期的交易数据问题。此问题涉及到两个方面

qq_27463931的博客 2579

JFreeChart 股票K线图创建过程

JFreeChart 股票K线图创建过程

java k线图源码

java 开发k线图 1、有入口的类 HQApplet.Arrays; HQApplet.Common HQApplet.HQApplet--真正入口; HQVO.requestutil hq.tradetimevo

JFREECHART画K线图

K线图的实例哦,这个好点,那个我乱改拉``

使用JFREECHART画K线图实例

没啥说的...比较有用

从摄像头选型到PCB布线:搞懂MIPI CSI带宽计算,避免你的嵌入式项目翻车

本文详细解析了MIPI CSI带宽计算在嵌入式项目中的关键作用,从摄像头选型到PCB布线提供全流程指导。通过实际案例和计算公式,帮助工程师准确计算带宽需求,避免图像丢帧和系统崩溃问题,同时优化PCB设计确保信号完整性。

weixin_30533109的博客 376

别再只测电压了!用STM32G474的ADC玩点花的:过采样提升精度与多通道扫描实战

本文深入探讨了STM32G474系列单片机的ADC高级应用,包括硬件过采样技术实现16位精度和多通道扫描结合DMA的自动数据采集方案。通过详细的配置步骤和实战案例,帮助开发者突破传统电压测量局限,提升信号采集精度和系统效率,适用于工业监控、医疗设备等高精度应用场景。

weixin_42647395的博客 240

从零开始Cubemx配置STM32搭载freeRTOS以及lwip实现tcp网络通信(二)

Cubemx配置LWIP,实现网络通信

qq_30623327的博客 1万+

YOLO11实战 第010期-基于yolo11的农业杂草作物目标检测实战文档(详细教程)

通过这条曲线,用户可以评估模型的检测能力,分析模型在不同阈值下对真实目标的检测是否全面。通过这条曲线,可以评估模型在目标检测任务中的整体性能,并找到合适的置信度阈值,以在精确率和召回率之间做出最佳平衡。PR 曲线越接近右上角,模型性能越好,曲线下方的面积越大,说明模型在不同置信度下的。),它展示了不同置信度下的召回率。条曲线都显示了随着召回率的增加,精确度略有下降的趋势,但整体上精确度保持在很高的水平。通过这条曲线,可以选择合适的置信度阈值,以优化模型的检测结果,平衡精确率和召回率。反映了分类器的准确性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 1525

Windows安装WSL子系统及docker,以及WSL和docker配置、使用及问题解决

在Windows操作系统中,Ubuntu子系统(也称为Windows Subsystem for Linux, WSL)为开发者提供了一个在Windows环境下运行Linux环境的平台。然而,有时用户在按照Ubuntu子系统或者使用WSL时,可能会遇到各种问题,下面总结一下解决方式。想要在Windows上安装Docker(实际上是基于Hyper-V或者WSL2这两项虚拟化技术),需要开启虚拟化功能,所以不管是对于系统还是硬件都有一定的要求。

sym的博客 9789

AUTOSAE软件配置-项目标准配置 (PSC) 导入达芬奇( DaVinci Configurator)

文件是“可拆分的”,这意味着如果格式符合 AUTOSAR 拆分规则,则可以与其他。)是一个ARXML文件,主要由OEM提供,其中包含。)工件,可以作为输入文件导入到达芬奇配置器专业版。导入的参数将以只读方式处理。不允许在多个 ARXML 文件中导入一个。的已存在数据或从输入文件派生的数据。可以作为输入文件导入到另一个。文件会覆盖用户配置的基本。元素和诊断数据预配置。定义 [数据结构]。中,可以导出一个或多个。

m0_49148264的博客 1018

AIGC算法工程师-面试八股文-2025年版本-算法八股文/工程八股文/开放式问题

​两年前整理了《AIGC算法工程师 面试八股文》,全网一共有100w读者看过,收到了很多小伙伴的催更。Diffusion的技术发展非常快,博主特意整理了最近两年最新的八股文,内容非常全面,涵盖算法八股文/工程八股文/开放式问题三个大类,希望能为求职的读者们带来帮助。

沉迷单车的追风少年 4188

基于最小二乘法(LS)和最小均方误差(MMSE)算法的导频信道估计

导频信道估计在无线通信系统中起着至关重要的作用,它用于估计无线信道的特性,以便在接收端进行正确的信号解调和解码。最小二乘法(LS)和最小均方误差(MMSE)是两种常用的导频信道估计算法,它们在估计精度和计算复杂度之间取得了良好的平衡。首先,我们提取当前的导频符号,然后将接收到的信号与导频符号相乘得到接收导频信号。最小二乘法是一种经典的导频信道估计算法,它通过最小化接收信号与预测信号之间的均方误差来估计信道。下面将详细介绍基于LS和MMSE算法的导频信道估计,并提供相应的MATLAB代码实现。

pytorchCode的博客 682

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: TOMCAT 5.5 配置 MYSQL数据库连接池
下一篇: 一个键盘监听的例子
TopestCoder
博客等级 码龄19年 12粉丝 19原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值