开发炒股软件,从哪里获得股票数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发炒股软件,从哪里获得股票数据相关的知识,希望对你有一定的参考价值。

如题
如果想基于大智慧的数据开发个工具,可行吗?如果可行有没有什么好的方案。比如我如何知道或者解析大智慧的数据文件?

目前市场上有很多股票行情交易软件,各种软件提供了丰富的分析和展示功能,而且基本上是免费的。但这些数据都是在线的、无法统一地下载到本地进行分析,于是上网找了些资料,有的是将程序到新浪搜狐的财经频道或其他财经类网站抓取并分析网页,这种方法操作性不强而且准确率较低,遇到广告或网页变动时风险较大。于是找到了Sina股票数据接口,这个接口是通过在IE端输入"http://hq.sinajs.cn/list="+相应股票代码网站返回一个文件形式的数据,也可以通过JS获取该文件中的变量得到想要的数据字符串。
以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据接口:http://hq.sinajs.cn/list=sh601006这个url会返回一串文本,例如:
var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,
22114263, 589824680, 4695, 26.91, 57590, 26.90, 14700, 26.89, 14300,
26.88, 15100, 26.87, 3100, 26.92, 8900, 26.93, 14230, 26.94, 25150, 26.95, 15220, 26.96, 2008-01-11, 15:05:32";
这个字符串由许多数据拼接在一起,不同含义的数据用逗号隔开了,按照程序员的思路,顺序号从0开始。
0:”大秦铁路”,股票名字;
1:”27.55″,今日开盘价;
2:”27.25″,昨日收盘价;
3:”26.91″,当前价格;
4:”27.55″,今日最高价;
5:”26.20″,今日最低价;
6:”26.91″,竞买价,即“买一”报价;
7:”26.92″,竞卖价,即“卖一”报价;
8:”22114263″,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
9:”589824680″,成交金额,单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万;
10:”4695″,“买一”申请4695股,即47手;
11:”26.91″,“买一”报价;
12:”57590″,“买二”
13:”26.90″,“买二”
14:”14700″,“买三”
15:”26.89″,“买三”
16:”14300″,“买四”
17:”26.88″,“买四”
18:”15100″,“买五”
19:”26.87″,“买五”
20:”3100″,“卖一”申报3100股,即31手;
21:”26.92″,“卖一”报价
(22, 23), (24, 25), (26,27), (28, 29)分别为“卖二”至“卖四的情况”
30:”2008-01-11″,日期;
31:”15:05:32″,时间;
相应地,也可以获得深市相关股票信息,但是这种方法的弊病是只能获得最新的或者是当天的股票数据,无法将历史数据导入到数据库,当然,你也可以以某一天为起始点自己重新创造历史数据。所以继续寻找其他网站接口,终于找到了雅虎财经网站,它提供的接口可以直接把股票历史数据导成Excel,真实太方便了!直接在浏览器地址中数据网址即可http://table.finance.yahoo.com/table.csv?s=股票代码,但是如果手动输入再逐一下载保存简直是太麻烦了,光上证股票就800多个,估计刚手动下载完就又开盘了还得重新下载。所以我的思路是,1、利用多线程方法下载股票文件。2、将这些文件统一导入数据库。
1.1文件下载类:
import java.io.*;
import java.net.*;
import java.util.List;
import fatowen.stocksystem.sysconfig.data.DownLoadVO;
public class HttpDownFile
private static int BUFFER_SIZE = 8096;
/**根据URL下载文件并保存
* @param destUrl String
* @param fileName String
* @throws Exception
*/
public void saveToFile(String destUrl, String fileName) throws IOException

FileOutputStream fos = null;
BufferedInputStream bis = null;
HttpURLConnection httpUrl = null;
URL url = null;
byte[] buf = new byte[BUFFER_SIZE];
int size = 0;

url = new URL(destUrl);
httpUrl = (HttpURLConnection) url.openConnection();
httpUrl.connect();
bis = new BufferedInputStream(httpUrl.getInputStream());
fos = new FileOutputStream(fileName);
while ((size = bis.read(buf)) != -1)
fos.write(buf, 0, size);
fos.close();
bis.close();
httpUrl.disconnect();


1.2多线程实现下载类:
import java.util.ArrayList;
import java.util.List;
public class HisDataAddThread extends Thread
boolean runFlag = true;
List myParamList = null;
String downLoadData ="";
String baseUrl = "http://table.finance.yahoo.com/table.csv?s=";
String result = "";
String savePath = "";

public HisDataAddThread(List paramList,String savePath)
this.myParamList = paramList;
this.savePath = savePath;


public void run()

while(runFlag)
downLoadData = PublicDataUtil.getDownLoadData(myParamList);
if(!Lib.isEmpty(downLoadData))
HttpDownFile oInstance = new HttpDownFile();
try
oInstance.saveToFile(baseUrl + downLoadData, savePath + downLoadData + ".csv");
catch (Exception err)
System.out.println(err.toString());

else
runFlag = false;

try
Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();



public List getFailureList()
return failureList;

public void setFailureList(List failureList)
this.failureList = failureList;

public List getSuccessList()
return successList;

public void setSuccessList(List successList)
this.successList = successList;


2.将下载完的文件统一保存到数据库工具类
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class CSVUtitl
private BufferedReader bufferedreader = null;
private List list = new ArrayList();

public CSVUtitl()

public CSVUtitl(String filename) throws IOException
bufferedreader = new BufferedReader(new FileReader(filename));
String stemp;
while((stemp = bufferedreader.readLine()) != null)
list.add(stemp);


public List getList() throws IOException
return list;

// 得到csv文件的行数
public int getRowNum()
return list.size();

//得到csv文件的列数
public int getColNum()
if(!list.toString().equals("[]"))

//csv文件中,每列之间的是用','来分隔的
if(list.get(0).toString().contains(","))
return list.get(0).toString().split(",").length;
else if(list.get(0).toString().trim().length() != 0)
return 1;
else
return 0;

else
return 0;



//取得指定行的值
public String getRow(int index)
if (this.list.size() != 0)
return (String) list.get(index);
else
return null;

//取得指定列的值
public String getCol(int index)
if (this.getColNum() == 0)
return null;


StringBuffer scol = new StringBuffer();
String temp = null;
int colnum = this.getColNum();

if (colnum > 1)
for (Iterator it = list.iterator(); it.hasNext();)
temp = it.next().toString();
scol = scol.append(temp.split(",")[index] + ",");

else
for (Iterator it = list.iterator(); it.hasNext();)
temp = it.next().toString();
scol = scol.append(temp + ",");


String str=new String(scol.toString());
str = str.substring(0, str.length() - 1);
return str;

//取得指定行,指定列的值
public String getString(int row, int col)
String temp = null;
int colnum = this.getColNum();
if(colnum > 1)
temp = list.get(row).toString().split(",")[col];
else if(colnum == 1)
temp = list.get(row).toString();
else
temp = null;

return temp;


public void CsvClose() throws IOException
this.bufferedreader.close();

public void run(String filename) throws IOException

CSVUtitl cu = new CSVUtitl(filename);
for(int i=0;i<cu.getRowNum();i++)
String SSCCTag = formatData(cu.getString(i,1));//得到第i行.第一列的数据.
String SiteName = formatData(cu.getString(i,2));//得到第i行.第二列的数据.
String StationId= formatData(cu.getString(i,3));

//将数据保存到数据库中
... ...
... ...
... ...

cu.CsvClose();

public String formatData(String baseData)

String result = null;
if(!"".equals(baseData) && baseData != null)
if(baseData.length() > 1)
result = baseData.substring(1,baseData.length());
result = result.substring(0, result.length()-1);
else
result = baseData;

else
result = "";

return result.trim();


public static void main(String[] args) throws IOException
CSVUtitl test = new CSVUtitl();
try
File path = new File("e:\\data");
File[] f = path.listFiles();
List l = new ArrayList();
for(int i=0;i<f.length;i++)
if(f[i].getName().endsWith(".csv"))
l.add(f[i]); www.2cto.com

Iterator it = l.iterator();
while(it.hasNext())
File ff = (File)it.next();
test.run(path.toString()+File.separator+ff.getName());

catch (Exception e)



参考技术A 行情数据源在上交所和深交所。需要购买。而且很贵。

象我们平常看到行情,是券商营业部所买,我们连到他们服务器,而接收到数据。

P2P数据接口使用说明(1)2009-03-18 08:58接口使用说明:
1. 压缩包包含四个文件,分别为P2P.exe,P2P.CFG,zlib.dll和使用说明.txt,可以解压到任意盘任意目录下使用。
2. 支持的行情分析软件有:
(1) 分析家2006,2005等,要求分析家主窗口标题最前面的几个字是"分析家 -",是否是破解版关系不大,最好是下载分析家官方网站的正版分析家,网址是http://www.fxj.com.cn,分析家其他版本号是否支持,我也没全做试验。
(2) 飞狐交易师,支持飞狐交易师,要求飞狐交易师主窗口标题最前面的几个字是"飞狐交易师"或"证券分析师",是否是破解版关系不大,最好是支持正版,用正版的。
(3) 大智慧新一代,要求大智慧主窗口标题最前面的几个字是"大智慧Level" 支持的版本号有 09.0226,08.0907,08.0801,07.0205 共四个。
注:如果分析软件的窗口标题不符合上面说的,则分析软件无法接收数据。以上三个分析软件最好都是正版的,只要下载正版的软件,安装后,无需做任何修改即可使用。接口再次说明一下,接口中的四个文件解压到任意目录下使用都可以,而无需解压到某个分析软件的某个目录下,或替代某个分析软件的某个文件。接口完全是绿色的,无需安装,也不会在注册表中留下任何信息。
3. 每天9:15分以后用行情软件中的数据管理功能先清除当天的行情数据,然后把右下角“发送数据”发送数据前面的钩选上。
4. 如果不能在开盘前打开该软件,比如10点半才打开,那么该接口会自动补充10点半之前的行情数据,为了能够尽快的把前面的数据补充完毕,请把速度调节到100以上。但如果是飞狐,则把该值调低一些,否则飞狐会来不及处理数据,把大量的数据放到内存中,造成飞狐使用内存越来越大,最后由于内存耗完造成飞狐或接口非法退出。大智慧和分析家则不存在这个问题。
5. 收盘后,该接口具有白天行情的回放功能,回放前,最好先清除行情软件中当天的行情数据。
6. 该接口由于是P2P接收数据,因此数据接收需要种子,只有和别的种子连上了,你就能接收数据了,你至少要和一个种子连上,当然,你连上别的种子后,你也就能称为种子了,你也就能为别的人提供数据服务功能了。
7. 两个人要连接成功,最好两个人中有一个人的IP地址是公网地址,如果两个全是内网地址则相互无法直接联通,必须借助第三方才能联通,该方法这里不再介绍了。
8. 如果网络情况比较良好,则行情数据的延时一般不会大于0.5秒。
9. 接口的P2P连接信息中的字段说明
(1). 远程完成--为该IP接收到完整数据包的个数。
(2). 远程请求--为该IP请求你发送的数据包序号。
(3). 本机请求--为本机请求远程发送数据包序号。
(4). 请求返回--远程响应本机请求的次数。

参考资料:http://hi.baidu.com/p2p2009

本回答被提问者采纳
参考技术B 上交所现在可以购买。5月份以后深交所得数据才会出现现在许多二代行情软件都在和深交所谈,价格应该很贵而且现在都是整年购买的 参考技术C 上交所和深交所 参考技术D 在交易所对接 一般都是开发商或者大型公司会在交易所购买 但是比较贵一年几百万

量亿数据十大炒股必备工具-必存

本人最近做交易,数据太难找了,个人方法,只供参考

俗话说,三分手艺七分工具,炒股也是一样哒,如果你有非常熟练的工具,可能会起到事半功倍的功效,相信很多人有同样的感受。现在我们做一个针对炒股工具大全的话题,帮您网络目前最实用的软件工具,干货请赶紧保存吧,十大炒股必备工具。

1、量亿数据:股票数据可媲美万德,全部免费

网址:http://www.liangyee.com

量化交易回测行情数据接口API平台,包括国内股票,港股,美股,A股大单行情交易数据。每日逐笔行情数据、5分钟K线、日线。 特点:接口稳定,数据准确,精准回测你的交易策略是否有效,好的一个平台。 (另外量亿数据还包含期货、外汇、外盘、期权、基本面等金融数据)

技术分享

2、万能工具:问财 之所以说问财是万能工具,因为你想要的,基本都能在问财实现。问财可以说就是股票领域的百度,可以在搜索框任意输入您想查询的内容,网站会智能匹配,同时支持数据导出,非常强大。问财是我们投资中做数据分析最好的帮手: 手把手教程:如何筛选“大股东增持”个股 手把手教程:如何筛选“低估值、高成长、小市值”个股

3、公告查询:巨潮资讯网 中国证监会指定的官方信息披露网站,第一手公告都在这里查询哦

4、互动平台:深交所互动易上海e互动 深交所和上交所搭建的投资者关系平台,大家有问题都可以在平台直接向上市公司提问,掌握第一手信息。

5、最全的行业数据查询:国家数据 国家统计局下属的最全面的行业数据查询网站,对于数据分析相当有帮助。

技术分享

6、新股发行披露:证监会首次公开发行信息披露(http://ipo.csrc.gov.cn/) 证监会官方网站,新股发行的进度、招股书等,均可在这里查到。

7、融资融券:两融余额 在这里,可以查询还有多少杠杆资金在场内

8、中登的每周快报:中登结算数据 可以查询账户的活跃度情况,掌握市场情绪

9、指数及行业市盈率查询:中证指数有限公司 中证指数官网,可以查询指数情况及行业的市盈率等

10、集思录:分级基金实时数据查询 做分级基金非常好的数据网站,实时统计折价溢价。

以上十个工具就是为大家推荐的最实用的炒股工具,相信只要你学会使用了肯定能起到很大的帮助作用,赶紧保存起来吧!

以上是关于开发炒股软件,从哪里获得股票数据的主要内容,如果未能解决你的问题,请参考以下文章

我用python抓取股票数据炒股,代码拿去

股票软件K线图中VOL-TDX右边的数字:7500;5000;x10,表示啥意思?如下图

简单的股票分析系统[转]

我用python抓取股票数据炒股,代码拿去

通用炒股软件操作

如何获取新浪实时股票行情数据