程序员怎么获取股票实时数据,并进行技术指

程序员怎么获取股票实时数据,并进行技术指
辛国爱 来自: 移动端 2021-12-23 12:48

声明:本网站依照法律规定提供财经资讯,未授权或允许任何组织与个人发布交易广告。对任何广告信息请谨慎交易,谨防诈骗。举报邮箱:xxxxxxxxx@qq.com

2021-12-23 13:33最佳答案

目前市场上有很多股票行情交易软件,各种软件提供了丰富的分析和展示功能,而且基本上是免费的。但这些数据都是在线的、无法统一地下载到本地进行分析,于是上网找了些资料,有的是将程序到新浪搜狐的财经频道或其他财经类网站抓取并分析网页,这种方法操作性不强而且准确率较低,遇到广告或网页变动时风险较大。于是找到了Sina股票数据接口,这个接口是通过在IE端输入" "+相应股票代码网站返回一个文件形式的数据,也可以通过JS获取该文件中的变量得到想要的数据字符串。
以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据接口: 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,真实太方便了!直接在浏览器地址中数据网址即可 股票代码,但是如果手动输入再逐一下载保存简直是太麻烦了,光上证股票就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 = " ";
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]);
}
Iterator it = l.iterator();
while(it.hasNext()){
File ff = (File)it.next();
test.run(path.toString()+File.separator+ff.getName());
}
}catch (Exception e){

}
}
}

其他回答(共7条)

  • 2021-12-23 13:42 黄睿多 客户经理

    笨办法,不过很简单,excel就可以实现。
    首先把该股票1年的数据导入到excel中,大智慧就能实现。
    然后将指标公式复制到excel中,就可以把1年的技术指标数值算出来。
  • 2021-12-23 13:26 辛培勇 客户经理

    定量分析的第一步,是获取数据。
    获取股票历史行情数据最方便的途径,就是直接读取股票行情软件留在你电脑中的日线数据文件。
    但如果不是程序员,电脑里一般不会有VB、VC之类的编程语言。
    其实,大家的电脑中一般都有OFFICE。OFFICE中的EXCEL自带了一个VBA语言的编程环境。功能也很强大。
    我用EXCEL里的VBA编写了一段代码,读取通达信股票行情软件的日线文件。已经测试通过。
    代码如下。与爱好定量分析的朋友分享。
    TypeMyType
    a1AsLong'标示码
    a2AsLong'日期
    a3AsSingle'开盘价
    a4AsSingle'最高价
    a5AsSingle'最低价
    a6AsSingle'收盘价
    a7AsSingle'成交金额
    a8AsLong'成交量
    EndType
    Sub按钮1_Click()
    DimFile2AsInteger
    DimbAsMyType
    File1=FreeFile
    Opensh600000.dayForBinaryAccessReadAs#File1i=1DoWhileNotEOF(File1)
    Get#File1,,b
    Cells(i,1)=b.a1
    Cells(i,2)=b.a2
    Cells(i,3)=b.a3
    Cells(i,4)=b.a4
    Cells(i,5)=b.a5
    Cells(i,6)=b.a6
  • 2021-12-23 13:16 齐旭明 客户经理

    方法:下载行情软件,就可以看到股票每天的交易数据。
    股票行情是一种证券市场用语,指股票交易所内各只股票的涨幅变化及交易流通情况。
    分析方法:
    (1)技术分析:技术分析是以预测市场价格变化的未来趋势为目的,通过分析历史图表对市场价格的运动进行分析的一种方法。股票技术分析是证券投资市场中普遍应用的一种分析方法。
    (2)基本分析:基本分析法通过对决定股票内在价值和影响股票价格的宏观经济形势、行业状况、公司经营状况等进行分析,评估股票的投资价值和合理价值,与股票市场价进行比较,相应形成买卖的建议。
    (3)演化分析:演化分析是以演化证券学理论为基础,将股市波动的生命运动特性作为主要研究对象,从股市的代谢性,趋利性,适应性,可塑性,应激性,变异性和节律性等方面入手,对市场波动方向与空间进行动态跟踪研究,为股票交易决策提供机会和风险评估的方法总和。
  • 2021-12-23 13:12 连丽萍 客户经理

    定量分析的第一步,是获取数据。 获取股票历史行情数据最方便的途径,就是直接读取股票行情软件留在你电脑中的日线数据文件。 但如果不是程序员,电脑里一般不会有VB、VC之类的编程语言。 其实,大家的电脑中一般都有OFFICE。OFFICE中的EXCEL自...
  • 2021-12-23 13:05 符翩翩 客户经理

    您好,分时其实就是分时走势图的意思,分时走势图也叫即时走势图,它是把股票市场的交易信息实时地用曲线在坐标图上加以显示的技术图形。坐标的横轴是开市的时间,纵轴的上半部分是股价或指数,下半部分显示的是成交量。分时走势图是股市现场交易的即时资料。 分时走势图分为指数分时走势图和个股分时走势图,如下图


    实时数据就是软件得到的股票交易的相关数据


    股市周期是指股票市场长期升势与长期跌势更替出现、不断循环反复的过程,通俗地说,股票上涨下跌的一个循环,即熊市与牛市不断更替的现象

    还有就是k线图的周期,有日线,周线,月线,季线等,每一条k线包含的时间不同罢了


    技术分析是指以市场行为为研究对象,以判断市场趋势并跟随趋势的周期性变化来进行股票及一切金融衍生物交易决策的方法的总和。技术分析认为市场行为包容消化一切。

    如图在图上花的一条线就是一个压力,股价往往难以突破或者回在它附近运动一段时间。

  • 2021-12-23 13:01 龚崇松 客户经理

    可以通过用股票软件下载历史成交数据来获取。经常炒股的人都知道要看股票K线。股市变化多端,要想找一些“规律”我们可以利用K线,这样可以更好的进行投资决策,获取收益。
    来给朋友们讲解一下K线,教伙伴们从哪里入手去分析它。
    分享之前,先免费送给大家几个炒股神器,能帮你收集分析数据、估值、了解最新资讯等等,都是我常用的实用工具,建议收藏:
    一、 股票K线是什么意思?
    K线图还有许多其他的叫法,如蜡烛图、日本线、阴阳线等,它最先用于分析米价的趋势的,后来股票、期货、期权等证券市场也能用到它。
    形似柱状,可拆分为影线和实体,这个我们称为k线。影线在实体上方的部分叫上影线,下方的部分叫下影线,实体分阳线和阴线。
    Ps:影线代表的是当天交易的最高和最低价,实体表示的是当天的开盘价和收盘价。
    其中阳线的表示方法有三种,分别是:红色、白色柱体还有黑框空心,而常见的阴线表示方法是用绿色、黑色或者蓝色实体柱。
    除了讲的这些以外,大家目测到“十字线”的时候,就意味着是实体部分转换成一条线。
    其实十字线是很容易理解的,其实就是收盘的价格和开盘时一样。
    经过对K线的剖析,我们可以较好找到买卖点(对于股市方面,虽然说是没有办法知道具体的事情,但是K线有一定指导的意义的),对于新手来说最好掌握。
    这里大家应该值得注意的是,K线分析起来挺难的,假如你是刚刚开始炒股的,还不了解K线,建议用一些辅助工具来帮你判断一只股票是否值得买。
    比如说下面的诊股链接,输入你中意的股票代码,就能自动帮你估值、分析大盘形势等等,我刚开始炒股的时候就用这种方法来过渡,非常方便:
    接下来我就给大家讲几个对于K线进行分析的小妙招,帮助你快速入门。
    二、怎么用股票K线进行技术分析?
    1、实体线为阴线
    股票的成交量就要在这时候看看是什么样的了,成交量不大的话,就意味着股价很有可能会短期下降;如果出现成交量很大的情况,股价肯定要长期下跌了。
    2、实体线为阳线
    实体线为阳线就表示股价上涨空间更大,至于是不是长期上涨必须结合其他指标进行判断。
    比如说大盘形式、行业前景、估值等等因素/指标,但是由于篇幅问题,不能展开细讲,大家可以点击下方链接了解:
    应答时间:2021-08-26,最新业务变化以文中链接内展示的数据为准,请点击查看
  • 2021-12-23 12:59 连亚玉 客户经理

    一般情况分时图上反映的是这只股票当天的走势。如果你调整了一下可以看到最近几天的这只股票的分时图。而K线图里看的股票走势的周期一般比较长。K线图有很多种,有份是K线图,有以天、周、月为周期的K线图,K线图的周期越长,看到的走势周期也就越长。
    由于证券市场的价格是复杂变化的,投资者在这个市场上进行投资时都要有一套方法来制定或选择投资策略进行投资。股票技术分析是以预测市场价格变化的未来趋势为目的,通过分析历史图表对市场价格的运动进行分析的一种方法。一般现在用的炒股软件里都会有技术指标帮助,像我用的牛股宝里有好几十项的技术指标帮助选股。
    实时数据主要还是分析找买卖点。希望能帮助到你。

相关百科精选

  • 保险利益原则 保险利益是指投保人对保险标的...

  • 华信财产保险股份有限公司 信财产保险股份有限公司(筹)是2012经中国保险监督管理委员会正式批准设立的全国性专业财产保险公司,由生命人寿保险股份有限公司与深圳市富德金融投资控股有限公司共同发起设立的,总部设在中国深圳市。公司秉持“

已有 86485 位专家入驻汇财吧问答

已经帮助 1173961 人解决了问题