什么是全推数据
全推行情数据是指行情软件自动接收每只股票的行情数据,全推行情数据的主要用途是可以进行分析、排序及选股和预警。
由于数据量的原因,一般免费的行情软件不提供全推数据。
和全推行情对应的是请求行情,是指在打开股票的分析图表时才接收行情数据。请求行情的缺点是不能进行排序及选股和预警。
通过打开分析图表,如分时图,然后快速翻页写数据,可以实现把请求行情转换为全推行情。这通常需要采用第三方软件来实现。
广发易淘金,是广发证券专为广大股民打造的一款集股票开户、股票交易、股市行情、基金理财为一体的股票/证券/炒股/理财/投资/财经/金融软件。从盯盘到选股到盘中决策到盘后分析,智慧淘金系列投资神器为您的投资保驾护航。专业持牌顾问724小时在线指导,“秒”速响应您的投资疑问。
目前市场上有很多股票行情交易软件,各种软件提供了丰富的分析和展示功能,而且基本上是免费的。但这些数据都是在线的、无法统一地下载到本地进行分析,于是上网找了些资料,有的是将程序到新浪搜狐的财经频道或其他财经类网站抓取并分析网页,这种方法操作性不强而且准确率较低,遇到广告或网页变动时风险较大。于是找到了Sina股票数据接口,这个接口是通过在IE端输入"http://hqsinajscn/list="+相应股票代码网站返回一个文件形式的数据,也可以通过JS获取该文件中的变量得到想要的数据字符串。
以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据接口:http://hqsinajscn/list=sh601006这个url会返回一串文本,例如:
var hq_str_sh601006="大秦铁路, 2755, 2725, 2691, 2755, 2620, 2691, 2692,
22114263, 589824680, 4695, 2691, 57590, 2690, 14700, 2689, 14300,
2688, 15100, 2687, 3100, 2692, 8900, 2693, 14230, 2694, 25150, 2695, 15220, 2696, 2008-01-11, 15:05:32";
这个字符串由许多数据拼接在一起,不同含义的数据用逗号隔开了,按照程序员的思路,顺序号从0开始。
0:”大秦铁路”,股票名字;
1:”2755″,今日开盘价;
2:”2725″,昨日收盘价;
3:”2691″,当前价格;
4:”2755″,今日最高价;
5:”2620″,今日最低价;
6:”2691″,竞买价,即“买一”报价;
7:”2692″,竞卖价,即“卖一”报价;
8:”22114263″,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
9:”589824680″,成交金额,单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万;
10:”4695″,“买一”申请4695股,即47手;
11:”2691″,“买一”报价;
12:”57590″,“买二”
13:”2690″,“买二”
14:”14700″,“买三”
15:”2689″,“买三”
16:”14300″,“买四”
17:”2688″,“买四”
18:”15100″,“买五”
19:”2687″,“买五”
20:”3100″,“卖一”申报3100股,即31手;
21:”2692″,“卖一”报价
(22, 23), (24, 25), (26,27), (28, 29)分别为“卖二”至“卖四的情况”
30:”2008-01-11″,日期;
31:”15:05:32″,时间;
相应地,也可以获得深市相关股票信息,但是这种方法的弊病是只能获得最新的或者是当天的股票数据,无法将历史数据导入到数据库,当然,你也可以以某一天为起始点自己重新创造历史数据。所以继续寻找其他网站接口,终于找到了雅虎财经网站,它提供的接口可以直接把股票历史数据导成Excel,真实太方便了!直接在浏览器地址中数据网址即可http://tablefinanceyahoocom/tablecsvs=股票代码,但是如果手动输入再逐一下载保存简直是太麻烦了,光上证股票就800多个,估计刚手动下载完就又开盘了还得重新下载。所以我的思路是,1、利用多线程方法下载股票文件。2、将这些文件统一导入数据库。
11文件下载类:
import javaio;
import javanet;
import javautilList;
import fatowenstocksystemsysconfigdataDownLoadVO;
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) urlopenConnection();
httpUrlconnect();
bis = new BufferedInputStream(httpUrlgetInputStream());
fos = new FileOutputStream(fileName);
while ((size = bisread(buf)) != -1)
foswrite(buf, 0, size);
fosclose();
bisclose();
httpUrldisconnect();
}
}
12多线程实现下载类:
import javautilArrayList;
import javautilList;
public class HisDataAddThread extends Thread {
boolean runFlag = true;
List myParamList = null;
String downLoadData ="";
String baseUrl = "http://tablefinanceyahoocom/tablecsvs=";
String result = "";
String savePath = "";
public HisDataAddThread(List paramList,String savePath){
thismyParamList = paramList;
thissavePath = savePath;
}
public void run() {
while(runFlag){
downLoadData = PublicDataUtilgetDownLoadData(myParamList);
if(!LibisEmpty(downLoadData)){
HttpDownFile oInstance = new HttpDownFile();
try {
oInstancesaveToFile(baseUrl + downLoadData, savePath + downLoadData + "csv");
}catch (Exception err) {
Systemoutprintln(errtoString());
}
}else{
runFlag = false;
}
try {
Threadsleep(1000);
} catch (InterruptedException e) {
eprintStackTrace();
}
}
}
public List getFailureList() {
return failureList;
}
public void setFailureList(List failureList) {
thisfailureList = failureList;
}
public List getSuccessList() {
return successList;
}
public void setSuccessList(List successList) {
thissuccessList = successList;
}
}
2将下载完的文件统一保存到数据库工具类
import javaioBufferedReader;
import javaioFile;
import javaioFileReader;
import javaioIOException;
import javautilArrayList;
import javautilIterator;
import javautilList;
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 = bufferedreaderreadLine()) != null){
listadd(stemp);
}
}
public List getList() throws IOException {
return list;
}
// 得到csv文件的行数
public int getRowNum(){
return listsize();
}
//得到csv文件的列数
public int getColNum(){
if(!listtoString()equals("[]")) {
//csv文件中,每列之间的是用','来分隔的
if(listget(0)toString()contains(",")) {
return listget(0)toString()split(",")length;
}else if(listget(0)toString()trim()length() != 0) {
return 1;
}else{
return 0;
}
}else{
return 0;
}
}
//取得指定行的值
public String getRow(int index) {
if (thislistsize() != 0)
return (String) listget(index);
else
return null;
}
//取得指定列的值
public String getCol(int index){
if (thisgetColNum() == 0){
return null;
}
StringBuffer scol = new StringBuffer();
String temp = null;
int colnum = thisgetColNum();
if (colnum > 1){
for (Iterator it = listiterator(); ithasNext();) {
temp = itnext()toString();
scol = scolappend(tempsplit(",")[index] + ",");
}
}else{
for (Iterator it = listiterator(); ithasNext();) {
temp = itnext()toString();
scol = scolappend(temp + ",");
}
}
String str=new String(scoltoString());
str = strsubstring(0, strlength() - 1);
return str;
}
//取得指定行,指定列的值
public String getString(int row, int col) {
String temp = null;
int colnum = thisgetColNum();
if(colnum > 1){
temp = listget(row)toString()split(",")[col];
}else if(colnum == 1) {
temp = listget(row)toString();
}else{
temp = null;
}
return temp;
}
public void CsvClose() throws IOException {
thisbufferedreaderclose();
}
public void run(String filename) throws IOException {
CSVUtitl cu = new CSVUtitl(filename);
for(int i=0;i<cugetRowNum();i++){
String SSCCTag = formatData(cugetString(i,1));//得到第i行第一列的数据
String SiteName = formatData(cugetString(i,2));//得到第i行第二列的数据
String StationId= formatData(cugetString(i,3));
//将数据保存到数据库中
}
cuCsvClose();
}
public String formatData(String baseData){
String result = null;
if(!""equals(baseData) && baseData != null){
if(baseDatalength() > 1){
result = baseDatasubstring(1,baseDatalength());
result = resultsubstring(0, resultlength()-1);
}else{
result = baseData;
}
}else{
result = "";
}
return resulttrim();
}
public static void main(String[] args) throws IOException {
CSVUtitl test = new CSVUtitl();
try{
File path = new File("e:\\data");
File[] f = pathlistFiles();
List l = new ArrayList();
for(int i=0;i<flength;i++){
if(f[i]getName()endsWith("csv"))
ladd(f[i]); www2ctocom
}
Iterator it = literator();
while(ithasNext()){
File ff = (File)itnext();
testrun(pathtoString()+Fileseparator+ffgetName());
}
}catch (Exception e){
}
}
}
dp:=INDEXV;
lb1:=vol/ref(sum(vol,5),1);
lb2:=dp/ref(sum(dp,5),1);
ST:=STRFIND(STKNAME,'ST',1)>0 OR STRFIND(STKNAME,'S',1)>0;
lt:=(CAPITAL/100)/10000<=10;
AA:=o/DYNAINFO(3);
a1:=lb1/lb2;
jd1:=atan((MA(C,5)/ref(MA(C,5),1)-1)100)573;
jd2:=atan((MA(C,15)/ref(MA(C,15),1)-1)100)573;
PX:=jd1>45 and jd2>17 ;
z2:=aa>1 and aa<105;
ST=0 and lt and z2 and px and a1>35;
注释:是个选股公式,我的收获是解决了股价角度的计算方式。具体每一句的解释如下
dp,赋值为大盘当日成交量;
lb2,赋值为当日大盘成交量与不包括当日在内的前5日大盘总成交量的比值;
lb1,赋值为个股当日成交量与不包括当日在内的前5日个股总成交量的比值;
st,赋值为判断语句,结果为1时,说明股票是s股或st股,结果为0时,说明是非s和非st股;
it,判断语句,结果为1时,流通股本小于10亿;
aa,当前周期开盘价与实时的昨天(纯粹的日线意义上的昨天,而不是除此之外的其他周期的昨天)收盘价的比值;
a1,赋值为当日个股成交量比率与当日大盘成交量比率的比值,是用来选择比大盘强的股的;
jd1,赋值为当日的5日均价与昨日的5日均价在1天内形成的夹角;
jd2,赋值为当日15日均价与昨日的15日均价在1天内形成的夹角;
px,当数值为1时,表明5日夹角大于45度同时15日夹角大于17度;
z2,当数值为1时,今日开盘价高于昨日收盘价且开盘价的涨幅低于昨日收盘价的+5%;
最终的选股条件:非s和非st股并且流通股本小于10亿并且z2成立并且px成立并且个股当日成交量比率是当日大盘成交量比率的35倍以上(有点实时量比的感觉,总之是比大盘强很多)
0条评论