使用java获取沪深股票实时数据,并且进行预警。

这个预警逻辑比较简单,当然想拓展其他逻辑的话在这个代码基础上很容易实现的。这个代码逻辑是根据我自己的需要设计的。就是开盘之后第一分钟收盘的时候,获取监控股票(监控股票是从昨天结束之后我选股选的,每天大致300个)第一分收阳线且价位大于0轴的股票。这样的股票出现之后保存一份文件到本地E盘目录,文件名是如“20191201_第一分钟预警.txt”.

package GetDatasWarming;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class GetDatasWarming {/*** 使用接口获取实时数据,主要记录第一分钟是上升还是下跌。且记录第一分的量能。之后量能大于第一分钟输出到TXT文件(追加输出)。* 输出格式包括:股票代码名称和时间 * 建议:最好使用多线程,接收数据存储map集合是一个线程,map集合计算的预警是另一个线程* 使用说明:只有9点30之后代码才会正式获取数据* * * @param args* @throws IOException */public static void main(String[] args) throws IOException {//1.初始化集合和设置监控股票信息(这个离可以设置智能化读取文件,文件从通达信下载)// "http://hq.sinajs.cn/list=sh600151,sz000830,s_sh000001,s_sz399001,s_sz399106";String url = "http://hq.sinajs.cn/list=sh601006,sz000002,sh600212"; // 多只股票获取方法.沪证sh开头。深证sz开头,//解析监控的股票,初始化map集合和list集合List resolving = resolving("sh601006,sz000002,sh600212");//需要把监控的股票,存储map集合,键是股票代码。值是list集合。list集合存储为:本日开盘价格,昨日收盘价格,开盘第一分钟结束的量能,本分钟的量能Map<String , List<String>> map = new HashMap<String ,List<String>>();//检测的股票几个就初始化几个list集合.map集合就初始化多少列for (Object code : resolving) {map.put((String)code,new ArrayList<String>()); }//2.接口数据处理和接收getdatas(url,map);//3.预警方案一:开盘1分钟阳线,且价格大于等于0轴。这个预警不需要输出时间的因为一天只能做一次输出。其他预警方案吧时间加上是应该的warming1(map); //这个不能使用多线程,容易出问题//4.预警方案二:1分之后实时量能创新高}/*** 接口数据处理和接收代码* @param url 访问接口路径 * @param map 初始化的监控股票的map集合*/private static void getdatas(String url,Map<String , List<String>> map) {/*       // "http://hq.sinajs.cn/list=sh600151,sz000830,s_sh000001,s_sz399001,s_sz399106";String url = "http://hq.sinajs.cn/list=sh601006,sz000002"; // 多只股票获取方法.沪证sh开头。深证sz开头,//解析监控的股票,初始化map集合和list集合List resolving = resolving("sh601006,sz000002");//需要把监控的股票,存储map集合,键是股票代码。值是list集合。list集合存储为:本日开盘价格,昨日收盘价格,开盘第一分钟结束的量能,本分钟的量能Map<String , List<String>> map = new HashMap<String ,List<String>>();//检测的股票几个就初始化几个list集合.map集合就初始化多少列for (Object code : resolving) {//System.out.println(code);//  List<String> name = new ArrayList<String>();map.put((String)code,new ArrayList<String>()); }*/try {URL u = new URL(url);byte[] b = new byte[256];InputStream in = null;ByteArrayOutputStream bo = new ByteArrayOutputStream();while (true) { // 因为是死循环,这里一直获取就行。下面开启睡眠1秒获取一次数据,获取太多机器压力大//Thread.sleep(1000); // 1000 毫秒,也就是1秒.Thread.sleep(500);  //防止数据大的时候时间偏差,睡眠0.5秒try {in = u.openStream();int i;while ((i = in.read(b)) != -1) {bo.write(b, 0, i);}// String result = bo.toString();String result = bo.toString("GBK"); // 转换成字符串的时候必须加上解码,不然就乱码了// System.out.println(result);String[] stocks = result.split(";"); // 多只股票的话需要使用这个进行切分一下// System.out.println("stocks1:"+stocks[0].trim());// System.out.println("stocks2:"+stocks[1].trim());String name = null;  //股票的名字String price = null; //当前价格String vol = null;  //当前总量String dates = null; //日期String time = null; //时间 String Openprice = null; //开盘价格String YestodayClosePrice= null; //昨天的收盘价格for (String stock : stocks) {if (stock.length() < 3) {continue; // 发现有一些杂乱数据过滤}String[] datas = stock.split(",");// System.out.println(stock);// 根据对照自己对应数据String[] name1 = datas[0].split("\\\""); // 股票的名字。但是前面多了一些没用的 var hq_str_sh600151="航天机电。在截去// 获取股票的名字name = name1[1];// 获取股票代码String code = datas[0].trim().substring(13, 19);// 获取今日开盘价格Openprice = datas[1]; // 获取昨日收盘价格YestodayClosePrice = datas[2]; // 获取当前价格price = datas[3]; // 注意:每一分钟的最高价格和最低价格要进行标记,这一分钟收盘时候确认最高价最低价,开盘价和收盘价// 获取成交量(这个是总量,想要获取每一份的成交量,需要减去前一分钟的量能即可)vol = datas[8];// 获取当前日期dates = datas[30];// 获取当前时间time = datas[31];System.out.println("股票代码:" + code + "|股票名称:" + name + "|今日开盘价格:" + Openprice+ "|昨日收盘价格:" + YestodayClosePrice+ "|当前价格:" + price + "|总成交量:" + vol + "|日期:"+ dates + "|当前时间:" + time);//---------------------------------------           //测试代码
/*                      //遍历map集合for(String key : map.keySet()){//System.out.println("我是KEY:" + key);//  System.out.println("我是value:" + map.get(key));List<String> list = map.get(key.trim());//测试代码if (key.trim().endsWith("000002")) {list.add("zzz");} else {list.add("xxx");}}for(String key : map.keySet()){System.out.println("我是KEY:" + key);System.out.println("我是value:" + map.get(key));    }*/
//---------------------------------------//需要把监控的股票,存储map集合,键是股票代码。值是list集合。list集合存储为:本日开盘价格,昨日收盘价格,开盘第一分收盘价格,开盘第一分钟结束的量能,本分钟的量能if (time.trim().equals("09:31:00") ||time.trim().equals("09:31:01")||time.trim().equals("09:31:03")) {  //防止时间偏差,多几个时间采样点.,然后初始化一下map集合//if(true) {      //这个是测试使用的。实际中打开上面注释//遍历map集合for(String key : map.keySet()){//System.out.println("我是KEY:" + key);//  System.out.println("我是value:" + map.get(key));List<String> list = map.get(key.trim());//获取当前数据的股票名称。这个名称才进行存储数据,其他名称不存储if (key.trim().endsWith(code)) {list.add(Openprice);  //设置本日开盘价格list.add(YestodayClosePrice);  //设置昨日收盘价格list.add(price);  //设置第一分收盘价格list.add(vol);   //设置第一分钟的成交量} else {continue;}}}}/*                    for(String key : map.keySet()){System.out.println("我是KEY:" + key);System.out.println("我是value:" + map.get(key));  }*/bo.reset();//测试的时候跳出while循环.正式版本需要把这个进行关闭的//break;} catch (Exception e) {System.out.println(e.getMessage());} finally {if (in != null) {in.close();}}}} catch (Exception ex) {System.out.println(ex.getMessage());}}/*** 第一个预警系统:开盘大阳+看盘价格大于等于0轴* @param map 股票存储的集合信息* @throws IOException */private static void warming1(Map<String , List<String>> map ) throws IOException {//如果时间是9点32才执行,否则过滤。这个预警每天只开启一次Date date = new Date();SimpleDateFormat dateFormat= new SimpleDateFormat("hh:mm:ss");//System.out.println(dateFormat.format(date));String time = dateFormat.format(date).trim();if (time.equals("09:32:01") || time.equals("09:32:02")|| time.equals("09:32:03")|| time.equals("09:32:04")|| time.equals("09:32:05") ) {//if (true) {      //这个是测试使用的。实际中打开上面注释for(String key : map.keySet()){// System.out.println("我是KEY:" + key);// System.out.println("我是value:" + map.get(key));  //list集合存储为:本日开盘价格,昨日收盘价格,开盘第一分收盘价格,开盘第一分钟结束的量能,本分钟的量能//获取本日开盘价格String open = map.get(key).get(0);//获取昨日收盘价格String close = map.get(key).get(1);//获取开盘第一分收盘价格String firstminclose = map.get(key).get(2);System.out.println("股票代码:"+key+"本日开盘价格:"+open+"|昨日收盘价格:"+close+"|开盘第一分收盘价格"+firstminclose);//判断是否开盘价格大于等于0轴Boolean boolean1=Double.parseDouble(open.trim())>=Double.parseDouble(close.trim());// System.out.println(boolean1);//判断是否第一分钟是阳线收盘。返回true是阳线,否则是阴线Boolean boolean2=!(Double.parseDouble(open.trim())>=Double.parseDouble(firstminclose.trim()));// System.out.println(boolean2);//满足上面两个条件都是true,把这个股票代码下载到本地TXT文件里面,进行预警if (boolean1 && boolean2) {System.out.println("开盘1分钟预警启动");//把股票代码写到TXT文件,追加写mkdirTxt(key);}}}}/*** 生成TXT文件* @param str* @throws IOException*/private static void mkdirTxt(String str) throws IOException {//预警一:记录本日第一分钟的价格是上涨的,且价格大于等于0轴股票。存储TXT文件名字为“日期_第一分钟预警.txt”Date date = new Date();SimpleDateFormat dateFormat= new SimpleDateFormat("yyyyMMdd");//System.out.println(dateFormat.format(date));String dates = dateFormat.format(date).trim();//1. 文件夹的路径  文件名String directory = "E:\\test";   //存储路径String filename =dates+"_第一分钟预警.txt";  //文件名//2.  创建文件夹对象     创建文件对象File file = new File(directory);//如果文件夹不存在  就创建一个空的文件夹if (!file.exists()) {file.mkdirs();}File file2 = new File(directory, filename);//如果文件不存在  就创建一个空的文件if (!file2.exists()) {try {file2.createNewFile();} catch (IOException e) {e.printStackTrace();}}//3.写入数据//创建文件字节输出流FileOutputStream fos = new FileOutputStream(directory + "\\" + filename,true); //加上true表示追加写出//开始写// String str = "测试数据";byte[] bytes = str.getBytes();//将byte数组中的所有数据全部写入fos.write(bytes);fos.write("\r\n".getBytes());//换行//关闭流fos.close();}/*** 解析股票串,返回list集合 * @param codes  sh601006,sz000002* @return*/@SuppressWarnings("unused")private static List resolving(String codes) {List<String> list = new ArrayList<String>();String[] datas = codes.split(",");for (String xcode : datas) {String code = xcode.trim().substring(2);//截取股票代码//System.out.println(code);list.add(code);}return list;}}

java实现股票程序化预警和选股相关推荐

  1. 什么是股票程序化接口?

    听说现在股票交易都可以程序化了,但问题是股票程序化交易接口在哪里呢?怎样才能实现股票交易程序化呢? 什么是股票程序化? 到底什么是股票程序化呢?说的就是,在没有人看管的情况下,可以实现自动化建议,股票 ...

  2. 股票指标 PHP,怎样将股票指标改为选股指标

    刚刚股票入门的股民经常发现有些指标很准确,如是想将股票指标改成选股指标,但不知道如果着手,本文详细介绍怎样将股票指标改为选股指标. 步骤一.将所有的显示式":",改为不显示式&qu ...

  3. 好的股票程序化交易api接口模型该怎么做?

    下面我们从几个方面来分享一下好的股票程序化交易api接口模型该怎么做? 1.用简单的哲理解决复杂的问题 我们都知道,时间是最珍贵的东西,它过去了就是过去了,不可能再回来了.所以我们今天的事情,不可以拖 ...

  4. 自己做量化交易软件(31)小白量化实战5--板块股票池与基本面选股

    自己做量化交易软件(31)小白量化实战5–板块股票池与基本面选股 在小白量化软件中,股票池与板块是一样的,都是股票代码列表.前面博客有零散知识的介绍. 小白量化学习(4)基本面选股与股票池 https ...

  5. A股股票程序化自动交易量化软件

    A股股票程序化自动交易量化软件,运用A股股票程序化自动交易和加密coin技术,量化投资策略,资讯智能提醒,自动化交易,尽可能精准操作,减少人的主观情绪因素带来交易投资上的影响,避免盈利机会的错失:投资 ...

  6. 怎样对接同花顺股票程序化交易接口?

    只要我们拿到同花顺股票程序化交易接口的客户段,就可以直接使用Python调用其提供的交易功能.我们可以使用Python中的Sanic异步框架将交易接口进一步封装成HTTP访问接口,方便从远程Linux ...

  7. java 源码 股票_java+实时股票报价系统源代码+NeatBeans java的股票系统 - 下载 - 搜珍网...

    实时股票报价系统\.classpath 实时股票报价系统\.project 实时股票报价系统\bin\lab_06\MyUtil.class 实时股票报价系统\bin\lab_06\Stock.cla ...

  8. 基于python的股票程序化交易软件_tushare开源股票交易接口基于python实现技术

    tushare开源股票交易接口基于python实现技术 怎样在tushare中完成股票实盘交易 其实,如何使用实盘交易功能接口,与通过tushare获取数据一样简单,先看一下几个关键接口的使用方法: ...

  9. 简述股票程序化交易的关键点是什么?

    作为一名股票程序化交易者,我们首先要明确的是,交易是对手间你死我亡的博弈. 通过观察我们可以发现一般在交易市场中能够盈利的交易者具备三种特性,即丰富的经验,专业的知识以及稳定的心理素质. 我们常说没有 ...

最新文章

  1. IO多路复用之poll
  2. WebKit与event.layerX和event.layerY有关的问题
  3. linux——部署DNS
  4. 小课堂?小视频?小商店?
  5. 算法题:在一个字符串中找到只出现一次的字符。如输入abaccdeeff,则输出bd。
  6. 清华毕业生做保姆,那又如何呢
  7. 使TextView里面的文字滚动起来
  8. 从芯片到 AI,52 岁英特尔的蜕变!
  9. npm收录了哪些包_使用VS Code轻松找到npm软件包中的漏洞(Vuln Cost)
  10. paip.分成系统会员推广分销系统的设计
  11. c语言自动计费工作,c语言编程实现话单计费实例
  12. 强化学习——A3C,GA3C
  13. 计算机系统与外部交换信息主要通过显示器,微机系统与外部交换信息主要通过什么设备...
  14. 清华大学建筑学计算机,建筑专业十强大学排名:清华第一,第四堪称黑马
  15. 蒟蒻朱的 CSP2020 J/S 游记
  16. python工具脚本,网站广告违禁词检测脚本源码
  17. 【ICPC 2018 Malaysia】UPC-9302 ELI'S CURIOUS MIND(递推)
  18. 知乎zhihu:Python爬取某个问题下所有含有给定关键词的回答
  19. 以上是周末少先队活动照片,涉及到7个小队的同学参与拍照
  20. Mac node切换版本,指定版本

热门文章

  1. 二叉树的定义和基本术语
  2. c语言中bind函数,c/c++ 标准库 bind 函数详解
  3. 第一个python脚本(自动登录、申请活动、退出)
  4. Java JSP JAVAweb在线考试系统源码网上考试系统源码(ssm考试管理系统)
  5. Linux C/C++ 编程 内存管理之道:探寻编程世界中的思维乐趣
  6. 将html所有链接导入收藏,HTML_用vbs 取得收藏夹里的所有链接名称和URL的脚本,另外,可以考虑在输出的时候 - phpStudy...
  7. 如何找份合适的工作!
  8. Java Calendar set()方法与示例
  9. linq的左联和内联举例及写法
  10. python解析xml文件elementtree_Python XML解析之ElementTree