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

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

目前市场上有很多股票行情交易软件,各种软件提供了丰富的分析和展示功能,而且基本上是免费的。但这些数据都是在线的、无法统一地下载到本地进行分析,于是上网找了些资料,有的是将程序到新浪搜狐的财经频道或其他财经类网站抓取并分析网页,这种方法操作性不强而且准确率较低,遇到广告或网页变动时风险较大。于是找到了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=0i<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=0i<f.lengthi++){

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){

}

}

}

你根本连不上!因为交易所的服务器只对其会员(期货经纪公司或期货专营机构)开放,而且是专线接入。

如果你需要期货交易的数据,需要向期货交易所购买,但目前交易所的数据只提供给几家大的信息服务商,比如世华、路透、富远、文华财经、新华财经等,你可以向他们购买实时行情数据。

如果你们和期货公司合作,只要他们同意提供行情数据,那么是可以的,但你们不能用这个数据源进行有盈利性质的经营活动(比如对外发布并收费)。

因为期货公司也只能利用这些数据为自己的客户提供成交回报、查询及结算服务,所有收费性质的对外发布数据的做法都必须得到交易所的同意。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/459188.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-03
下一篇2023-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存