导航:首页 > 程序命令 > 程序员这样编写股票数据

程序员这样编写股票数据

发布时间:2022-11-19 08:59:38

A. 股票数据信息接口,哪里有比较全面的股票接口程序

股票软件一般都提供了接口,例如通达信、同花顺、大智慧,这些软件里面,都有公式系统,这个公式系统,就是接口。你可以参考软件里面的别的公式,编写自己的公式,这样就可以得到相应的数据了。
如果是机构,有专门提供这种API接口的。例如微盛的金融实时行情API接口。但这种方式,需要程序员才搞得懂,一般人用不起来。

B. 如何使用EXCEL读取通达信股票日线数据

定量分析的第一步,是获取数据。 获取股票历史行情数据最方便的途径,就是直接读取股票行情软件留在你电脑中的日线数据文件。 但如果不是程序员,电脑里一般不会有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

C. 您好,有个问题想请教您。 我想实现这样的功能:我用C语言编写程序来买卖美国股票。大概怎么弄方向。

。。。。。。。程序员不是神,不是什么都能写的,这个写出来的话,估计得进局子里了

D. 如何获取实时的股票行情信息,有相关的公用接口或者数据源吗

实时股票数据接口

股票数据的获取目前有如下两种方法可以获取:
1.
http/javascript接口取数据
2.
web-service接口
1.http/javascript接口取数据
1.1Sina股票数据接口
以大秦铁路(股票代码: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″,时间;
一个简单的JavaScript应用例子:
script
type="text/javascript" src="http://hq.sinajs.cn/list=sh601006"
charset="gb2312">/script>
/javascript">
var
elements=hq_str_sh601006.split(",");
document.write("current
price:"+elements[3]);
这段代码输出大秦铁路(股票代码:601006)的当前股价
current
price:14.20
如果你要同时查询多个股票,那么在URL最后加上一个逗号,再加上股票代码就可以了;比如你要一次查询大秦铁路(601006)和大同煤业(601001)的行情,就这样使用URL:
http://hq.sinajs.cn/list=sh601003,sh601001
查询大盘指数,比如查询上证综合指数(000001):
http://hq.sinajs.cn/list=s_sh000001
服务器返回的数据为:
var
hq_str_s_sh000001="上证指数,3094.668,-128.073,-3.97,436653,5458126";
数据含义分别为:指数名称,当前点数,当前价格,涨跌率,成交量(手),成交额(万元);
查询深圳成指数:
http://hq.sinajs.cn/list=s_sz399001
对于股票的K线图,日线图等的获取可以通过请求http://image.sinajs.cn/…./…/*.gif此URL获取,其中*代表股票代码,详见如下:
查看日K线图:
http://image.sinajs.cn/newchart/daily/n/sh601006.gif

分时线的查询:
http://image.sinajs.cn/newchart/min/n/sh000001.gif

日K线查询:
http://image.sinajs.cn/newchart/daily/n/sh000001.gif

周K线查询:
http://image.sinajs.cn/newchart/weekly/n/sh000001.gif

月K线查询:
http://image.sinajs.cn/newchart/monthly/n/sh000001.gif

1.2
Bai&Google的财经数据
在,
google中搜索某只股票代码时,将会在头条显示此股票的相关信息,例如在google搜索601006时,
第一条搜索结果如下图:
通过点击左边的图片我们发现会将此图片链接到sina财经频道上,也就是说google股票数据的获取也是从sina获取。后经抓包分析,发现google也是采用1.1中介绍的接口。
Bai的股票数据来自的财经频道
http://stock..com/
1.3
其他方式
除了sina,等网站提供股票信息外,其他网站也有类似的接口。我们分析了一款论坛上采用的股票插件,
其中有关于实时股票数据获取的介绍,详见如下代码,其中可以看到有些数据来自sina。
以下是ASP示例:
=5
then
stockdata=gethttp("http://hq.sinajs.cn/list=sh"&code&"")
if
not len(stockdata)=0 then
stockdata=split(stockdata,chr(34))(1)
end if
if
len(stockdata)=0
then
stockdata="0,0,0,0,0,0,0,0,0,0,0,0"
else
stockdatasplit=split(stockdata,",")
stockdata=""&exstock.checkstr(stockdatasplit(0))&","&stockdatasplit(1)&","&stockdatasplit(2)&","&stockdatasplit(3)&","&stockdatasplit(4)&","&stockdatasplit(5)&","&formatdatetime(""&stockdatasplit(30)&"
"&stockdatasplit(31)&"",0)&""
end
if
‘0=股票名称,1=开盘价格,2=昨收盘价格,3=当前价格,4=最高价,5=最低价,6=更新时间
getstockdata=stockdata
end
function
function getstockimg(code)
dim
rndnum,addnum,checkcode,imgsource
if len(code)=5
then
getstockimg="http://image.sinajs.cn/newchart/daily/n/sh"&code&".gif"
end
if
imgsource="http://finance.sina.com.cn"
case
3
getstockimg="http://hq.gazxfe.com/stockchart/realline.chart?"&code&"&1003&SZ
500 330"
imgsource="http://hq.gazxfe.com"
case
4
getstockimg="http://chartse.stockstar.com/chartserver?code="&code&""
imgsource="http://www.stockstar.com/"
end
select
getstockimg=split(""&getstockimg&"||"&imgsource&"","||")
end
function
function getastockimg()
dim
rndnum,addnum,checkcode
dim
getastockimgb,imgsource
addnum=6
randomize:rndnum=cint(rnd*addnum)
select
case rndnum
case
0
getastockimg="http://202.109.106.1/gifchartse/gif/000001.gif"
getastockimgb="http://202.109.106.1/gifchartse/gif/399001.gif"
imgsource="http://www.stockstar.com/"
case
1
getastockimg="http://money.163.com/special/100.gif?C39"
getastockimgb="http://money.163.com/special/101.gif?HrS"
imgsource="http://www.163.com"
case
2
getastockimg="http://www.10jqka.com.cn/curve/realtime/index2.php?code=1a0001&w=180&h=140"
getastockimgb="http://www.10jqka.com.cn/curve/realtime/index2.php?code=399001&w=180&h=140"
imgsource="http://www.10jqka.com.cn"
case
3
getastockimg="http://chart.cnlist.com/stockchart/realline.chart?1a0001&1002&SZ
180
140"
getastockimgb="http://chart.cnlist.com/stockchart/realline.chart?399001&1002&SZ
180
140"
imgsource="http://chart.cnlist.com/"
case
4
getastockimg="http://image.sinajs.cn/newchart/small/ish000001.gif?1189176558328"
getastockimgb="http://image.sinajs.cn/newchart/small/isz399001.gif?1189176558328"
imgsource="http://www.sinajs.cn"
case
5
getastockimg="http://218.1.72.66/cgi/pic/sh/realtime/JA000001164143.png"
getastockimgb="http://218.1.72.66/cgi/pic/sz/realtime/JA399001164143.png"
imgsource="http://www.cnstock.com/"
case
6
getastockimg="http://222.73.29.85/img/000001.png"
getastockimgb="http://222.73.29.85/img/399001.png"
imgsource="http://www.eastmoney.com/"
end
select
getastockimg=split(""&getastockimg&"||"&getastockimgb&"||"&imgsource&"","||")
end
function
%>
2.
web-service接口
2.1 CHINAstock的web-service:
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
中国股票行情数据
WEB 服务(支持深圳和上海股市的全部基金、债券和股票),数据即时更新。输出GIF分时走势图、日/周/月 K
线图、及时行情数据(股票名称、行情时间、最新价、昨收盘、今开盘、涨跌额、最低、最高、涨跌幅、成交量、成交额、竞买价、竞卖价、委比、买一 - 买五、卖一 -
卖五)。此WEB服务提供了如下几个接口:
2.1.1
getStockImageByCode
GET
股票GIF分时走势图
INput:theStockCode =
股票代号,如:sh000001
POST /WebServices/ChinaStockWebService.asmx
HTTP/1.1
Host: www.webxml.com.cn
Content-Type:
text/xml; charset=utf-8
Content-Length:
length
SOAPAction:
"http://WebXml.com.cn/getStockImageByCode"

string

Output:
2.1.2
getStockImageByteByCode
获得中国股票GIF分时走势图字节数组
INput:theStockCode
= 股票代号,如:sh000001
POST /WebServices/ChinaStockWebService.asmx
HTTP/1.1Host: www.webxml.com.cnContent-Type: text/xml;
charset=utf-8Content-Length: lengthSOAPAction:
"http://WebXml.com.cn/getStockImageByteByCode"
string
返回的数据如下:
hkMyt4m4VkJtstbv8A
2.1.3
getStockImage_kByCode
直接获得中国股票GIF日/周/月 K
线图(545*300pixel/72dpi)
INPUT: theStockCode =
股票代号
theType = K 线图类型(D:日[默认]、W:周、M:月),
POST
/WebServices/ChinaStockWebService.asmx HTTP/1.1Host:
www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length:
lengthSOAPAction: "http://WebXml.com.cn/getStockImage_kByCode" string
string
比如按照下图所示输入:
返回的结果就是周K线图:
2.1.4
getStockImage_kByteByCode
获得中国股票GIF日/周/月 K
线图字节数组
Input:theStockCode = 股票代号,如:sh000001
POST
/WebServices/ChinaStockWebService.asmx HTTP/1.1Host:
www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length:
lengthSOAPAction: "http://WebXml.com.cn/getStockImage_kByteByCode" string string
HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length
base64Binary
比如按照下图输入:
返回的结果就是周K线图字节数组
hkMyt4m4VkJtstbv8A
2.1.5
getStockInfoByCode
获得中国股票及时行情
input:theStockCode
= 股票代号
POST /WebServices/ChinaStockWebService.asmx HTTP/1.1Host:
www.webxml.com.cnContent-Type: text/xml; charset=utf-8Content-Length:
lengthSOAPAction: "http://WebXml.com.cn/getStockInfoByCode"
string
返回的值一个一维字符串数组
String(24),结构为:String(0)股票代号、String(1)股票名称、String(2)行情时间、String(3)最新价(元)、String(4)昨收盘(元)、String(5)今开盘(元)、String(6)涨跌额(元)、String(7)最低(元)、String(8)最高(元)、String(9)涨跌幅(%)、String(10)成交量(手)、String(11)成交额(万元)、String(12)竞买价(元)、String(13)竞卖价(元)、String(14)委比(%)、String(15)-String(19)买一
- 买五(元)/手、String(20)-String(24)卖一 - 卖五(元)/手。
Web
service的方法类似于现在concurrent项目的DBWS数据的获取,都是通过SOAP协议向DBWS服务器获取相关的数据。
利用雅虎查中国股票
http://quote.yahoo.com/d/quotes.csv?s=MSFT&f=slc1wop
返回微软的股票价格
"MSFT","4:00pm
- 30.70",+1.04,"21.46 -
30.75",29.77,29.66
http://quote.yahoo.com/d/quotes.csv?s=000969.SZ&f=slc1wop
这个返回安泰科技的,一般有半个小时的延迟。
但是s=000969.sz
这个后面的sz是深圳的意思, 沪市是SS后缀

E. 腾讯股票代码

腾讯控股(00700)。
拓展资料:
1.股票名字前的字母含义:
(1)指数名字前的“G”是指“贡”字,也就是“贡献”的意思。你点一下可以看见所有股票对该指数的涨跌贡献度。
(2)股票名字前面“L”是指“联”,也就是指关联品种,是指该股可能有B股、H股,或者是债券、权证什么的。
2.代码(code)是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。
3.代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。 源代码是代码的分支,某种意义上来说,源代码相当于代码。现代程序语言中,源代码可以书籍或磁带形式出现,但最为常用格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码最终目的是将人类可读文本翻译成为计算机可执行的二进制指令,这种过程叫编译,它由通过编译器完成。
4.源代码是相对目标代码和可执行代码而言的。 源代码就是用汇编语言和高级语言写出来的地代码。目标代码是指源代码经过编译程序产生的能被cpu直接识别二进制代码。可执行代码就是将目标代码连接后形成的可执行文件,当然也是二进制的。
5.在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。
6.对软件进行说明,即对软件的编写进行说明。为数不少的初学者,甚至少数有经验的程序员都忽视软件说明的编写,因为这部分虽然不会在生成的程序中直接显示,也不参与编译。但是说明对软件的学习、分享、维护和软件复用都有巨大的好处。因此,书写软件说明在业界被认为是能创造优秀程序的良好习惯,一些公司也硬性规定必须书写。


F. 股票行情软件是用什么语言编写的

如下4种常见:

  1. Java:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群

  2. JFreeChart:JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。

3.源码结构:源码就是指编写的最原始程序的代码。运行的软件是要经过编写的,程序员编写程序的过程中需要他们的“语言”。音乐家用五线谱,建筑师用图纸,那程序员的工作的语言就是“源码”了。

4.c++ 【目前最多的】: C++是在C语言的基础上开发的一种通用编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++14于2014年8月18日公布。其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大受用的最强大编程语言之一,支持类:类、封装、重载等!

G. 作为一名经常在股票交易中的散户,要怎样建立一套自己的交易系统

交易系统,听起来很高大上,其实,就是股票投资时需要考虑的几个方面的重要因素。

交易系统,是在股票投资过程中使用的,那我从股票买卖全过程来说一下交易系统建立的方法。这个交易系统,分为“选股,买卖,纪律”三个部分。

一、 选股系统

股票投资的第一步,就是选股。选股要靠自己,不能道听途说。 选股必须分析两个方面:基本面和技术面。

基本面主要看行情软件的f10部分,对pe,pb,roe,还有主要财务数据,选出业绩优良的股票。如果散户不具备这个能力,除了学习相关只是外,就是看看软件里面对该股票的估值,做个参考。散户最好少碰创业板,到沪深300里面去找个股。

技术面主要看大趋势,看中长期120日和250日均线走向,只做这两条均线向上的股票(最好在刚向上时就买入,否则,等到250日已经上移动很高时,股价已经到了阶段顶部)。关于趋势级别和阶段的判断方法,我有一篇文章专门说过。

那些120日250日均线向下的个股,散户不要做!

二、买卖系统

这个买卖系统,其实就是买卖依据是什么? 这里的前提是蓝筹股,而且是120和250均线向上的个股!不涉及垃圾股和120日和250日均线向下的个股。

不要羡慕超跌反弹,也不要垂涎V形反转,那些不是我们散户的菜!! !

如上图,在ABC点买入,有耐心等待这些买点出现!DEF点要不要卖???看清楚了,现在是牛市,完全可以不用卖!即使你一次买在了DEF点,也没事,这种亏损,会有解套的时机,这和熊市不一样,牛市会一浪更比一浪高,而熊市一浪更比一浪低。如果自作聪明,做高卖低买,按照以往经验卖高,那很可能卖在H点,那后面的主升浪就错过了,一般人在H点卖了是没信心追买回来的。

为什么不说买在G点,因为那时候120日均线还没向上,稳健投资者需要观察。

有人说,我就买在目前最高点F区了,怎么办?要不要止损?!请看清楚了,这只股票是牛市!!!如果F点买入被套了几天,就忍不住割肉了,那很有可能后面继续拉升创新高!那有人又说,要是下跌怎么办???再说一遍,现在是牛市,如果下跌,那就不要理会,不用多久,又会创新高的!而且,如果跌到一定支撑位再向上是,还要加仓买入。

牛市卖出依据是啥?一是基本面估值,如果价格大于价值20%以上卖出。二是根据技术面卖出。因为牛市不言顶,所以很难具体说什么位置卖出好。就如现在的茅台,现在看,以前在哪里卖出都是错误。从一般规律看,当股价距离60日均线启动位置时上涨70~100%以上,很可能(只能用概率)是阶段性头部,甚至是一轮行情结束的时候。这时候,可以减仓三分之一,同时对k线,成交量,上行速率,股价重心,市场信息等综合判断形成头部的可能。

当然,如果在本图例你买在F点被套(还在这个股票牛市的初期),下跌时,可以减仓三分之一,用来做差价,降低成本,也可以不动等待,或则在回调上涨幅度三分之一左右再次上涨时加仓!

三、纪律系统

包含止损止盈两个方面。

止损,就是买入前,要设立一个止损价位!没有止损就不要买入! 一般根据有效跌破60日或则120日均线止损(每个个股均线可能不一样,这和主力操盘风格有关)!后来如果再次上涨突破这两条均线,买入就行。千万不要跌破时不止损,防止有黑天鹅,股市安全第一。

止盈价位一般随价格上涨而抬高。当达到目标价位,或则跌破上升趋势线,或则上升均线(一般20日)时,卖出一半仓位。如果跌破60日,全部卖出。没有跌破,又反转向上时,把卖出的一半仓位再买回。

上涨时买,然后捂股,下跌时卖,这是牛市的操作方法,可能大部分人还没悟透!

而熊市时,如果做反弹,是下跌时买,上涨时卖,轻仓参与,见好就收,不能贪心。

这个交易系统包含六个方面要素,每个方面要悟透。当然,六个方面可以,七个方面行不行?也行,只要自己按照股票“选股,买卖,纪律”三个要素过程来扩展,也是可以的。比如,买卖系统,这里讲的是均线能不能选布林线?也可以,只要自己会用,有标准就行。

谢谢!

买低卖高,这是最起码的。其他的,就是要有钱,不怕赔钱,就是买买买。其他的,什么投一万,三年过百万。这肯定不是“天方夜谭”,是“木鱼石的传说”。我差点信了,不过我没买。

散户建立交易系统,问题就一句,答案可以写一本书。这里就从大方面进行概括。

一、正三观。这是建立交易系统的第一步,也是核心的一步。三观决定了你如何看待事物。比如你认为“可以一夜暴富”,你就会天天盯着涨停板的股票,选股的目的就是抓涨停板;比如你是“人云亦云”的随大流者,你就会天天听股评看题材,网上说哪只会暴涨,你就跟着买哪只;比如你认为“天上不会掉馅饼”,你就会务实的寻找有成长性并被低估的实干上市公司。你是怎样的“三观”,将决定了你交易系统建立的逻辑思维。

二、明确并量化股票高低逻辑。在第一条“正三观”的前提下,你才能着手这一步。在此我以“正三观”的角度来建立正确的能持续获利的股市交易系统。我认为得寻找“中小盘实干绩优成长股”,并不排除大盘股,但以“高成长”为优先选择对象。量化从每年的业绩递增、现在的市盈率、市值大小、行业前景、合作伙伴、项目进展等多方面考量,股价在 历史 阶段低位(如半年线、年线)。

三、低吸。先看大盘在下跌后的底部震荡区,再看本行业板块在下跌后的底部震荡区,最后是精选该行业中最有可能业绩暴增的公司。在低位徘徊 历史 地量后开始增量(放量)时分仓入手。逐步的试仓,在底部震荡时注意要不断的高抛低吸,最终明确出一个底部震荡区域,在区域低位重仓,再次涨至震荡上沿时依然抛出部分仓位,不断摊薄成本。突破箱体上沿不追,尽管抛出部分仓位,等待回踩。回踩后再次重仓。这之后是一路持股不动了。

四、高抛。在股价从底部上来50%左右时,见放量就抛出,跌破20日均线清仓出局。一个波段就此完成。有些股票此时回调之后还会上涨,有的甚至一倍二倍三倍的涨。这要说清楚就复杂些了。我的判断是看成交量,以此才能看出主力资金是否出局,是否还会继续向上做。这个方法有很多种类,可以出一本书。

五、具体细化交易系统。这要会编写指标代码,或者请程序员帮你写。必须包罗“时空量价”这四个要素,通过这四个要素来定位股价运行的阶段。股价运行必定是四个阶段“底涨顶跌”。只有看清楚这四个阶段,你才能获取可靠利润。“时空量价”这四要素,也是用来衡量“人心”的,股价的波动,就是“人心”的波动。

六、克服心魔。第一条“正三观”决定你是否能正确的入门一个能持续获利的交易系统,无疑是最关键的。而克服心魔同等重要。它决定你最终的成败。以我为例,自认为是“正三观”,自己也会编程,建立的交易系统能相当准确的把握顶底,从大波段来说几乎是百分百胜率,日线级别顶底信号也相当准确,但有时误差一两天。但心魔影响我的操作。心魔是个问题也能说出长篇大论来,在此不展开了,总之到了那一步就必将遇见心魔这个最强的敌人。我花了两年时间历练自己,现在还不敢说完全战胜了心魔。一句话,完全无脑的按交易系统指示操作,但你就是做不到。

用心的回答、经验的回答。

让我们来看看这三张图的走势可以得出,股票上涨时期的三个现象:第一,均线呈多头排列;第二,MACD在0轴上方;第三,交易量相比变大了(图一图二符合。图三前期交易量很大,后期交易量小,说明筹码集中)。三个图中粉红色的线是20日均线,在上升期虽然有反复,但是始终在20日均线上方运行。我们可以用20日均线作为止损位置。

经过分析,我们可以做一个买股票的前提条件,就是我为什么买这一只股票,问自己三个问题:第一,此股的均线是否是多头排列;第二,此股的MACD在0轴上方吗?第三,在符合前两个条件的基础上,看交易量。

有人说你这是拿着 历史 图形在说事。不错,这就是已经走完的图形,但是它表明了一个特征,就是处于上涨时期的股票基本满足的特征。我们总结这些特征,然后满足这些特征就买,不满足宁愿空仓或者观望。首先,我们绝大多数都是普通股民,既没有大资金的支持,又没有内幕消息的实力,只能靠自己辛苦工作攒点闲钱投资,梦想着赚点钱补贴生活。在零和 游戏 的股市,我们别无选择,只能靠自己拥有的条件赚钱。但是赚钱是不容易的,尤其是在故事里赚钱更不容易,机构要赚钱,国家社保要赚钱,能力出众的人要赚钱,甚至公司要集资发展需要钱,都从股市里赚钱,钱从哪里来?就是广大的普通股民。很多普通股民其实是亏钱的,即使有赚钱的时候,但是亏的比赚的多,总体上是亏的。所以,我们要总结一些经验。

第二,我们希望买到上图的图三,一路上扬。但是现实中,我们买到了图二的次数多。涨一点,跌一点,很多人被吓跑了,很多人耐不住时间走了。因为一般的股民害怕损失,然后又幻想短期内赚更多的钱,结果反而赔的多。这就是现实和心理层面的因素。在这里有两个方法:一是用20日均线做止损,在20日均线上方的,一直持有。跌破20日均线的,坚决卖方。(现实中很多人做不到,所以亏的比赚的多,总体上赔钱了)。二是选择一个熟悉的股票,一年内只买这一只股票。不看其他的股票,不跟风。这样你就会培养出熟悉的股感,再附加一些其他分析指标,收益比大多数股民好。以上两个方法很多人做不到,太难了。

关于交易系统的建立,个人建议:第一,分析大盘的状态,决定买股票的仓位。牛市就用8-10成仓位。熊市就用2成仓位,或者空仓。震荡市就用2-5成仓位。第二,买股票的三个问题。第三,设置止盈止损。第四,坚决执行第三点。第五,止盈后把赚到的钱分成两份,一份存下暂时不动。一份投入股市继续。记住,股市里赚到的钱在自己手上才是赚到的,还放在股市里的钱,指不定是谁的呢。

什么是交易系统?曾经我非常的疑惑,为什么同样的动作,同样的形态,一个涨了,另一个就拼命跌?于是我不断改进自己的交易系统。我是学计算机和数学出生,又在物理行业混迹,我想用各种理论方法来计算出一个确定性的方法,买进去,就得到确定的机会,然而最终我发现,成功率最高的系统,高达80%的成功率,其结果是,从1990年到现在,全市场,发出的信号,只有寥寥的七次,失败一次。其它的不是信号太多,就是盈利太少。

这个市场真的没有一个确定的交易系统吗?当我花了几周的时间,将所有的数据一条一条的看完,我忽然发现,是!也不是!是的原因是,你根本无法把控这个市场未来的走势,因为你也是影响市场的那个人。不是,是因为在不确定中,你只要抓住那某些时刻的确定性,就可以了。

我们在书上学过很多的方法,每种方法都有其簇拥者,为什么有些人用的好,有些人用不好?是交易系统在这两种人之间有区别吗?不是!是因为他们的差别在于对市场的认识。

比如说均线,有的均线死叉就一定要逃命,而有的均线死叉,却极有可能就是买点,怎么会发生这样的事情?有的人说,股票站上60天均线就要买入,可有的人买入了就完蛋,是均线的问题吗?不是,是人对均线理解的差异。

因此在这个问题的各类回答中,有说交易系统很难的,也有说很简单的,都对,真的!每个人的理解都不同,时间上也有差异。最笨的办法,是对着书上的例子一点点的看,看看为什么这些例子能成功,而自己挑出来的那些就失败,一点点的验证出自己的交易系统。

这个过程,有人叫做一万小时法则,没有办法,眼光的提升,是需要时间的,当有一天你能够一眼看出好与坏,那么,所谓的交易系统,就形成了,问你为什么?你也许只会说,不知道,感觉。

当风险发生的时候,你从容的离场,机会来临的时候,淡定的入场,当机会和你预想的不一样,不会追问为什么,静静的离开,等待下一次机会。你不会因为没有机会而焦虑不安,不会因为担心错过机会而烦躁不已,甚至不会因为错误的判断提前离开而懊恼悔恨。你的交易系统就已经形成了。

这时候,你的交易系统,是你自己独有的,没人能理解为什么,哪怕你都讲出来,还是会有无法明说的东西。不是你不想说,是你根本无法说,这是你自己的交易之道。

所谓道可道非常道,大概就是如此!

如何才能建立一套适合自己的交易系统呢?这句话包含两层含义:一是适合自己的,每个人的投资理念、性格特征、风险承受能力等等都各有不同,别人成功的交易系统,在自己身上未必就能发挥作用;二是完善交易系统的交易系统应该包含的内容有哪几个?选股逻辑、交易策略、交易系统、资金管理、心态情绪管理等5大板块。那么几个板块的功能划分是怎样的呢?

一、选股逻辑。选股逻辑解决的是选股层面的问题,要做好股票投资,选股是第一关键,要有好的短线收益,必须要跟对热点板块。选股逻辑包含两个方向,一个是政策消息面的驱动要素,二是技术面的价量时空。短线交易侧重点是对短线题材逻辑的分析,股票K线只是表象,影响K线形态的是资金,而推动资金的则是背后的市场逻辑,而市场逻辑的核心是题材的驱动力以及生命周期。题材的逻辑属性以及板块的运动规律是分析短线热点持续性、节奏和结构的重点。

同时,题材驱动与技术面的共振才能够造就短线的爆发力,有题材如果没有技术面资金的推动也很难有好的表现;有技术面形态的做多走势,如果没有题材的支撑,也很难持续。

二、交易策略。股票市场永远是处于波动下滚动运行的,波峰波谷之间就会形成上涨趋势、下跌趋势、横盘震荡趋势。大盘每一个阶段的运行结构都是不一样的,所以采用的交易策略也是不尽相同的。左侧交易策略和右侧交易策略的交叉使用是我们实盘交易当中必须要灵活运动的。选对股票,但是入场的交易策略没有匹配当下的整体市场环境,那么你就很难踏准节奏,造成买点与卖点的不尽人意。

三、交易系统。交易系统主要解决的是买点、卖点、止损位、止盈位。交易系统的一致性与执行力是非常关键的,同时完善的交易系统是需要对买卖点进行量化,模棱两可的交易信号往往导致临盘时的决策打架,互相矛盾,以及犹豫不决。交易系统的简单化是达到知行合一的基础。

四、资金管理。仓位管理是决定盈亏的核心,也是决定心态的关键。一套好的交易信号必须匹配合适的资金管理模型,否则很难达到稳定性的获利。交易系统解决的是成功率的问题,资金管理决定的是盈率的问题。很多时候,资金管理远比交易系统重要。通过资金管理来规避系统性的风险以及看错个股出现的个股风险。

五、心态情绪管理。心态好坏首先取决于交易系统是否完善与资金管理是否匹配。除开这两个谈心态无任何意义,除非你的资金是买彩票中的。同时,心态好与坏还跟自己的资金性质、风险承受能力、预期收益率、个人价值观、性格属性等等有比较大的关系。把交易系统和资金管理模块完善好,再通过个人哲学体系的修炼,通过“道”的层面去解决交易当中所出现的各种混沌与疑惑,“会当凌绝顶,一览众山小”,当你到达足够的高度,你才能看得清曲曲而上的山路!

所谓盈利系统,其实,就是自己总结,并且得到实践验证,并且适合自己的一套成熟的交易体系。
对于散户而言,建立适合自己的交易系统或体系非常难以建立,需要长时间的沉浸和研究,找出一条适合自己的路,才能逐步实践和去完善所掌握的一些指标,逐渐形成适合自己的体系,这条路任重而道远,举步维艰;但是,我相信,只要坚持就会成功

一、基础知识

二、技术指标定义及用法

这一方面,我们就简单举几个最常见的指标来进行给大家解析:我全部用白话文来给大家解析:

1) BOLL(布林带):由 三条移动平均线组成的,类似于两条轨道,随着时间变化而变化;分为三条线,一般称之为:上轨道(压力线、压力带、压力位)、下轨道(支撑线、支撑位、支撑带)、中轨道(多空转化带、突破口、突破地带)

2) MACD(移动平均线): 是由两条不同价格周期均线交叉形成的走势指标,以零轴及快慢线交叉点,分为金叉、死叉来判断短期走势;金叉买涨,死叉买跌!

3) KDJ及RSI: KDJ指标又叫随机指标,是一种相当新颖、实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具

RSI纸币哦啊又叫做相对强弱指标,是根据一定时期内上涨点数和涨跌点数之和的比率制作出的一种技术曲线。能够反映出市场在一定时期内的景气程度。一般分为:超买区(最佳卖出位置)和超卖区(最佳买入位置)

4) 价格通道: 价格通道的形成,属于在一张周期图中(15分钟、1小时、4小时等)在一个确认的趋势周期内,寻找前面的支撑点平均连线和上方压力位的平均连线,形成一条平行通道,可以短暂判断趋势走势和寻找支撑位、压力位、突破位等,分为震荡上行价格通道和震荡下行上行通道、平行价格通道。

5) 分批建仓法: 一般来说,无论是股市还是黄金等产品,均是存在波浪理论技巧,一般来说,买入或卖出有多次机会,可以去寻找最佳买点和卖点;我们可以利用波浪理论技巧在最重要的第三浪和第五浪去分批建仓布局,因为,这个时候的行情算是企稳或方向明确,只有这样,我们才算是成功减仓

6) 趋势为王: 趋势是做单之前必须考察的一个重要技巧;任何行情必定有一个整体走势,例如,天图、周图,月图,整体走势基本上可以看出;短期行情,我们可以借助小时图来看是反弹还是下探,结合中长线、短线去布局,这样反而更有保障,趋势去保障!

7) K线组合及形态: K线形态及组合,是指K线行情随着时间的不断发展,周期行情组合成一种数字模型或我们经常遇见的形态,这就是我们所能看到的:例如:
1)看涨:W底部形态、V型反转、圆弧底形态、头肩底形态等等
2)看跌:与之相反,M头部形态、圆弧顶形态、头肩顶形态等等

三、实践去运用
实践这一块,当然会存在交学费这一现象,其实,我们可以利用好股票模拟去学习,去实践你所掌握、研究出来的一套体系,去验证是否正确,又或者对了多少,只有这样我们才能逐步完善,适合自己的体系。

1)各种交易类理财

2)依照性格投资产品去理财,去实践!

3)依据风险大小去理财

4)学会控制好仓位

四、善于总结和归纳
作为一名合格的散户投资者,不要以为不断地投入钱进去,一直扛着就行了;实际上,这是一根筋的做法;有些票或投资,不是一味的扛着或不断加资金就是王道,这种做法其实是很愚蠢的技巧,也可以说是自杀式的投资;所以,我们只有在不断的尝试之后,善于总监和归纳一些我们适合的投资产品、投资技巧、投资方式,才能高瞻远瞩、稳中获利!

以上论点皆有笔者猎鹰技术中心首席策略师林枫原创分享,更多详情请参考《股市实战锦囊》《黄金实战口诀》,欢迎交流、关注、收藏、点赞、分享,如有不足,欢迎补充!

系统的特点就是稳定。

与稳定相反,没有良好的交易系统的特点就是:

就是今日发挥得好,抓涨停;

明日发挥得不好,就跌停,

显得毫无章法。

这样的表现就是,拿着好股,心里不踏实,整天提心吊胆,自己吓唬自己。

有了稳定的交易系统,简单地说,就是靠谱。

一个稳定交易系统,应该是

1、操作性强,有实战价值,不是花拳绣腿,而是能扎扎实实地带来收益;

2、能够复盘,总结得与失。这样的系统可以横向、纵向进行比较。

3、能不断改进系统的不足,不断优化系统。

散户受资金、信息、技术、时间等因素的影响,建立自己的操作系统很难。

股票数据猫量化系统,把所有的数据按照强度、资金、预期、转强、妖精度进行分级(分为11级),进行量化考核,这样任何一个股票的数据都可以横向和纵向比较和总结。

通过几千万的海量数据,可以提取各类交易模式。比如追涨法、追跌法、五星战法、智能选股法等等。再配合技术指标开发了蓝柱子,白柱子、小苹果等等操作模式。

各类操作模式有数据做支持,可以不断地完善和提高。

相对来说,股票数据猫理论比较容易上手。更重要的是股票数据猫公布全部的量化数据,有了全部的数据,散户朋友就可以很方便的发现 历史 数据和现实数据的各类规律。

总之,股票数据猫供大家在这个平台,通过这个平台,散户朋友可以找出自己的模式并实战。

股票交易远在八十年代中期我国就开始发行股票,记得当时我在上海进服装,在外滩大街上一种名为"飞乐"的纸质股票发售,工作人员极其热情地介绍,销售。现在我都还有二张原始的纸质股票,票面值二千元,我留存纪念。因为我从不参与股票交易,无兴趣,无动力,所以无法多说什么,对不起。

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

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

}
}
}

I. 股票运行也有一定的程序,这个程序是如何编写的

其实我们可以看出,在进入股市的一些过程也是有一定的程序的,那么对于这样的一个股票的运行来说,这些程序怎么样去编写也会影响到这样的一个股票,在市场上怎么样的流行。而且对于这样一个问题来说,也会影响到我们自己在购买股票的时候的一些决断,毕竟对于很多人来说,他们购买股票就是希望自己能够得到一个巨大的盈利。而且对于这样的盈利模式来说,也是的确能够让他们感觉到这样的一个盈利模式会影响他们自己的下一步投资。

而且对于这样的一个小程序代码来说也是会产生后期的利益或者是亏损的一个关键之处。我们一旦再遇到这样的一些问题之后,就需要充分的把握自己的一些行为。对于我们自身来说,如果我们不去看出这样的一些小程序是如何编写的,或者是对于这样的一些程序,咱们这个代码不了解的话,也会影响到我们自己在投资的时候的一些举动。

J. 程序员算法实现-买卖股票的最佳时机系列问题

主要思路:因为只有一股可以交易,所以我们可以枚举 必须以i位置作为卖出时机的情况下,得到的最大收益是多少。如果我们得到每个i位置的最大收益,那么最大收益必是所有位置的最大收益的最大值

使用两个变量:

min变量:表示遍历到的位置之前的最小值是什么。

max变量:表示当前收集到必须以i位置卖出的最大收益是多少。

遍历数组一遍,在遍历到i位置的时候,min和max的更新逻辑如下:

遍历完数组,返回max的值就是最终答案。完整代码见:

主要思路:由于可以进行任意次的交易,但是任何时候最多只能持有一股股票,所以我们可以把股票曲线的所有 上升段 都抓取到,累加收益就是最大收益。遍历数组,遍历到的位置减去前一个位置的值,如果是正数,就收集,如果是负数,就把本次收益置为0(就等于没有做这次交易),这样遍历一遍数组,就不会错过所有的收益。

设置一个变量max,初始为0,用于收集最大收益值,来到i位置,max更新逻辑如下:

完整代码如下:

由本题可以简单得出一个结论: 如果数组元素个数为N,则最多执行N/2次交易就可以抓取所有的上升段的值(极端情况下,当前时刻买,下一个时刻卖,保持这样的交易一直到最后,执行的交易次数就是N/2)

主要思路:

在第2种情况下,我们定义

其中dp[i][j]表示[0...i]范围内交易j次获得的最大收益是多少。如果可以把dp这个二维表填好,那么返回dp[N-1][k]的值就是题目要的答案。

dp这个二维矩阵中,

第一行的值表示数组[0..0]范围内,交易若干次的最大收益,显然,都是0。

第一列的值表示数组[0...i]范围内,交易0次获得的最大收益,显然,也都是0。

针对任何一个普遍位置dp[i][j]的值,

我们可以枚举i位置是否参与交易,如果i位置不参与交易,那么dp[i][j] = dp[i-1][j],如果i位置参与交易,那么i位置一定是最后一次的卖出时机。

那最后一次买入的时机,可以是如下情况:

最后一次买入的时机在i位置,那么dp[i][j] = dp[i][j-1] - arr[i] + arr[i]

最后一次买入的时机在i-1位置,那么dp[i][j] = dp[i-1][j-1] - arr[i-1] + arr[i]

最后一次买入的时机在i-2位置,那么dp[i][j] = dp[i-2][j-1] - arr[i-2] + arr[i]

...

最后一次买入的时机在0位置,那么dp[i][j] = dp[0][j-1] - arr[0] + arr[i]

完整代码如下:

上述代码中包含一个枚举行为

增加了时间复杂度,我们可以优化这个枚举。

我们可以举一个具体的例子来说明如何优化,

比如,

当我们求dp[5][3]这个值,我们可以枚举5位置是否参与交易,假设5位置不参与交易,那么dp[5][3] = dp[4][3],假设5位置参与交易,那么5位置一定是最后一次的卖出时机。那最后一次买入的时机,可以是如下情况:

最后一次买入的时机在5位置,那么dp[5][3] = dp[5][2] - arr[5] + arr[5]

最后一次买入的时机在4位置,那么dp[5][3] = dp[4][2] - arr[4] + arr[5]

最后一次买入的时机在3位置,那么dp[5][3] = dp[3][2] - arr[3] + arr[5]

最后一次买入的时机在2位置,那么dp[5][3] = dp[2][2] - arr[2] + arr[5]

最后一次买入的时机在1位置,那么dp[5][3] = dp[1][2] - arr[1] + arr[5]

最后一次买入的时机在0位置,那么dp[5][3] = dp[0][2] - arr[0] + arr[5]

我们求dp[4][3]这个值,我们可以枚举4位置是否参与交易,假设4位置不参与交易,那么dp[4][3] = dp[3][3],假设4位置参与交易,那么4位置一定是最后一次的卖出时机。那最后一次买入的时机,可以是如下情况:

最后一次买入的时机在4位置,那么dp[4][3] = dp[4][2] - arr[4] + arr[4]

最后一次买入的时机在3位置,那么dp[4][3] = dp[3][2] - arr[3] + arr[4]

最后一次买入的时机在2位置,那么dp[4][3] = dp[2][2] - arr[2] + arr[4]

最后一次买入的时机在1位置,那么dp[4][3] = dp[1][2] - arr[1] + arr[4]

最后一次买入的时机在0位置,那么dp[4][3] = dp[0][2] - arr[0] + arr[4]

比较dp[5][3]和dp[4][3]的依赖关系,可以得到如下结论:

假设在求dp[4][3]的过程中,以下递推式的最大值我们可以得到

dp[4][2] - arr[4]

dp[3][2] - arr[3]

dp[2][2] - arr[2]

dp[1][2] - arr[1]

dp[0][2] - arr[0]

我们把以上式子的最大值定义为best,那么

dp[5][3] = Math.max(dp[4][3],Math.max(dp[5][2] - arr[5] + arr[5], best + arr[5]))

所以dp[5][3]可以由dp[4][3]加速得到,

同理,

dp[4][3]可以通过dp[3][3]加速得到,

dp[3][3]可以通过dp[2][3]加速得到,

dp[2][3]可以通过dp[1][3]加速得到,

dp[1][3]可以很简单得出,dp[1][3]有如下几种可能性:

可能性1,1位置完全不参与,则

可能性2,1位置作为最后一次的卖出时机,买入时机是1位置

可能性3,1位置作为最后一次的卖出时机,买入时机是0位置

此时,best的值为

然后通过dp[1][3]加速dp[2][3],通过dp[2][3]加速dp[3][3]......,所以二维dp的填写方式是按列填,

先填dp[1][0],dp[1][2]一直到dp[1][k],填好第一列;

然后填dp[2][0],dp[2][1]一直到dp[2][k],填好第二列;

...

依次填好每一列,直到填完第N-1列。

枚举行为被优化,优化枚举后的完整代码如下:

主要思路:上一个问题中,令k=2就是本题的答案。

主要思路:因为有了冷冻期,所以每个位置的状态有如下三种:

定义三个数组,分别表示i位置这三种情况下的最大值是多少

显然有如下结论:

针对一个普遍位置i

最大收益就是如上三种方式的最大值。完整代码见:

由于三个数组有递推关系,所以可以用三个变量替换三个数组,做空间压缩,优化后的代码如下:

主要思路:由于没有冷冻期,所以在i位置的时候,状态只有两种

针对0位置

针对普遍位置i

完整代码如下:

同样的,两个数组都有递推关系,可以做空间压缩,简化后的代码如下:

原文链接:买卖股票的最佳时机系列问题 - Grey Zeng - 博客园

阅读全文

与程序员这样编写股票数据相关的资料

热点内容
压缩泡沫鞋底底材 浏览:217
程序员职场第一课2正确的沟通 浏览:677
遇到不合法app应该怎么办 浏览:90
汇编程序编译后的文件 浏览:77
大智慧均线源码 浏览:371
单片机排阻的作用 浏览:213
滴滴金融app被下架如何还款 浏览:210
jpg转换成pdf免费软件 浏览:741
范里安pdf 浏览:443
伪造pdf 浏览:75
能删除android文件夹吗 浏览:446
LINUX使用V2ray 浏览:797
找人帮忙注册app推广是什么 浏览:820
独立服务器如何恢复初始化 浏览:11
优秀到不能被忽视pdf 浏览:316
导游程序员家政 浏览:586
22乘28的快速算法 浏览:338
软通动力程序员节2021 浏览:845
安卓系统如何卸载安装包 浏览:870
短信删除助手文件夹 浏览:688