如何买卖股票以获得最大内部收益率算法 java算法

查看:4247|回复:3
做投资一年有余,主要从事商品期货,今年赚了80%,想用java弄一个自动交易系统,根据设定好的参数,读取盘口信息,自动完成买卖交易。刚学了java一个多月,感觉基础语法都懂了,但就是不知道程序该怎么编,求大神指条明路。
(26.38 KB)
没有高手愿意解答我的疑问吗,若有大神相助,愿意共同分享投资技巧。
噶门,你的目的不是跟几个贴就能完成的。你慢慢来吧。 还想做股票外挂,挂机挣钱,真J啊!
我认为事件的概率都是有依可循
本帖最后由 yuke198907 于
22:06 编辑JAVA获得股票数据大全
&最近一个朋友想将股票历史数据导入到中进行分析,目前市场上有很多股票行情交易软件,各种软件提供了丰富的分析和展示功能,而且基本上是免费的。但这些数据都是在线的、无法统一地下载到本地进行分析,于是上网找了些资料,有的是将程序到新浪搜狐的财经频道或其他财经类网站抓取并分析网页,这种方法操作性不强而且准确率较低,遇到广告或网页变动时风险较大。于是找到了Sina股票数据接口,这个接口是通过在IE端输入&/list=&+相应股票代码网站返回一个文件形式的数据,也可以通过JS获取该文件中的变量得到想要的数据字符串。
&&&&&&& 以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据接口:/list=sh601006这个url会返回一串文本,例如:
var hq_str_sh601006=&大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,
95, 26.91, 5, 1, 14300,
&26.88, 1, , , 1, 2, 1, , 15:05:32&;
这个字符串由许多数据拼接在一起,不同含义的数据用逗号隔开了,按照程序员的思路,顺序号从0开始。
0:&大秦铁路&,股票名字;
1:&27.55&P,今日开盘价;
2:&27.25&P,昨日收盘价;
3:&26.91&P,当前价格;
4:&27.55&P,今日最高价;
5:&26.20&P,今日最低价;
6:&26.91&P,竞买价,即&买一&报价;
7:&26.92&P,竞卖价,即&卖一&报价;
8:&&P,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
9:&&P,成交金额,单位为&元&,为了一目了然,通常以&万元&为成交金额的单位,所以通常把该值除以一万;
10:&4695&P,&买一&申请4695股,即47手;
11:&26.91&P,&买一&报价;
12:&57590&P,&买二&
13:&26.90&P,&买二&
14:&14700&P,&买三&
15:&26.89&P,&买三&
16:&14300&P,&买四&
17:&26.88&P,&买四&
18:&15100&P,&买五&
19:&26.87&P,&买五&
20:&3100&P,&卖一&申报3100股,即31手;
21:&26.92&P,&卖一&报价
(22, 23), (24, 25), (26,27), (28, 29)分别为&卖二&至&卖四的情况&
30:&&P,日期;
31:&15:05:32&P,时间;
&&&&&&& 相应地,也可以获得深市相关股票信息,但是这种方法的弊病是只能获得最新的或者是当天的股票数据,无法将历史数据导入到数据库,当然,你也可以以某一天为起始点自己重新创造历史数据。所以继续寻找其他网站接口,终于找到了雅虎财经网站,它提供的接口可以直接把股票历史数据导成Excel,真实太方便了!直接在地址中数据网址即可http://table./table.csv?s=股票代码,但是如果手动输入再逐一下载保存简直是太麻烦了,光上证股票就800多个,估计刚手动下载完就又开盘了还得重新下载。所以我的思路是,1、利用多线程方法下载股票文件。2、将这些文件统一导入数据库。
1.1文件下载类:
import java.io.*;
import java.net.*;
import java.util.L
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 =
& BufferedInputStream bis =
& HttpURLConnection httpUrl =
& URL url =
& 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.ArrayL
import java.util.L
public class HisDataAddThread extends Thread {
&boolean runFlag =
&List myParamList =
&String downLoadData =&&;
&String baseUrl = &http://table./table.csv?s=&;
&String result = &&;
&String savePath = &&;
&public HisDataAddThread(List paramList,String savePath){
& this.myParamList = paramL
& this.savePath = saveP
&public void run() {
& while(runFlag){
&& downLoadData = PublicDataUtil.getDownLoadData(myParamList);
&& if(!Lib.isEmpty(downLoadData)){
&&& HttpDownFile oInstance = new HttpDownFile();
&&&& oInstance.saveToFile(baseUrl + downLoadData, savePath + downLoadData + &.csv&);
&&& }catch (Exception err) {
&&&& System.out.println(err.toString());
&&& runFlag =
&&& Thread.sleep(1000);
&& } catch (InterruptedException e) {
&&& e.printStackTrace();
&public List getFailureList() {
& return failureL
&public void setFailureList(List failureList) {
& this.failureList = failureL
&public List getSuccessList() {
& return successL
&public void setSuccessList(List successList) {
& this.successList = successL
2.将下载完的文件统一保存到数据库工具类
import java.io.BufferedR
import java.io.F
import java.io.FileR
import java.io.IOE
import java.util.ArrayL
import java.util.I
import java.util.L
public class CSVUtitl {
&private BufferedReader bufferedreader =
&private List list = new ArrayList();
&public CSVUtitl(){
&public CSVUtitl(String filename) throws IOException{
&&&&&& bufferedreader = new BufferedReader(new FileReader(filename));
&&&&&& while((stemp = bufferedreader.readLine()) != null){
&&&&&&&&&& list.add(stemp);
&public List getList() throws IOException {
&// 得到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(&,&).
&&&&&&&&&&& }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&&&&&&&&&&&&&&&&&&&&&&
&//取得指定列的值
&public String getCol(int index){
&&&&&& if (this.getColNum() == 0){
&&&&&&&&&&&&&&&
&&&&&& StringBuffer scol = new StringBuffer();
&&&&&& String temp =
&&&&&& 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);
&//取得指定行,指定列的值
&public String getString(int row, int col) {
&&&&&&& String temp =
&&&&&&& 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 =
&&&&&&&&&&&
&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 =
& if(!&&.equals(baseData) && baseData != null){
&& if(baseData.length() & 1){
&&& result = baseData.substring(1,baseData.length());
&&& result = result.substring(0, result.length()-1);
&&& result = baseD
&& result = &&;
& return result.trim();
&public static void main(String[] args) throws IOException {
& CSVUtitl test = new CSVUtitl();
&& File path = new File(&e:\\data&);
&& File[] f = path.listFiles();
&& List l = new ArrayList();
&& for(int i=0;i&f.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){
作者:fatOwen
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'常见算法题(6)
假如一个数组存储了一个股票,在一天交易窗口内各时间点的股票价格(正整数),只允许一次买入和一次卖出,请提供一个算法,计算出通过买入和卖出可以得到的最大利润
最大可能的利润
数据是有顺序的,卖出不能在买入之前
Java代码实现
import java.util.S
public class Main2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputString = "";
if (sc.hasNextLine()) {
inputString = sc.nextLine();
String[] inputArrayInt = inputString.split(" ");
int len = inputArrayInt.
int[] intArray = new int[len];
for (int i = 0; i & len; i++) {
intArray[i] = Integer.valueOf(inputArrayInt[i]);
maxProfit(intArray);
public static void maxProfit(int[] array) {
int result = 0;
if (array.length == 0) {
System.out.println(0);
int max = array[0];
int min = array[0];
int max_index = 0;
int min_index = 0;
for (int i = 0; i & array. i++) {
if (array[i] &= min) {
min = array[i];
min_index =
else if (array[i] &= max || (max_index &= min_index)) {
max = array[i];
max_index =
if (max_index &= min_index) {
int temp = max -
result = result &= temp ? result :
System.out.println(result);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9613次
积分:1466
积分:1466
排名:千里之外
原创:137篇
转载:30篇
(4)(37)(61)(33)(1)(30)(1)}

我要回帖

更多关于 基金收益算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信