download:首门程序员理财课 Python量化交易系统实战
讲师 DeltaF,近 5 年个人投资理财年化收益平均超 25%。如果你也想提升自己的睡后收入,轻松赚钱,那么这门课就是为你量身打造。课程基于一个完整真实的量化交易业务来讲授,并融入老师的理财经验以及使用编程技术辅助投资的技巧,让你面对各种复杂投资情况都能游刃有余。
Python 基础知识(入门即可)
环境参数
通用
package@H_301_26@ whu.extract.pubtime.core;@H_301_26@ import@H_301_26@ java.util.ArrayList;@H_301_26@import@H_301_26@ java.util.Calendar;@H_301_26@import@H_301_26@ java.util.Collections;@H_301_26@import@H_301_26@ java.util.List;@H_301_26@import@H_301_26@ java.util.regex.Matcher;@H_301_26@import@H_301_26@ java.util.regex.Pattern;@H_301_26@ import@H_301_26@ whu.utils.TimeUtil;@H_301_26@ /**@H_301_26@ @H_301_26@* Created On 2014年3月13日 下午2:49:05@H_301_26@ @H_301_26@* @description 获取网页的发布时间 @H_301_26@ @H_301_26@*/@H_301_26@public@H_301_26@ class@H_301_26@ FetchPubTime {@H_301_26@ @H_301_26@/** 表示url中连续的8位日期,例如http://www.baIDu.com/20140311/2356.HTML */@H_301_26@ @H_301_26@private@H_301_26@ static@H_301_26@ String url_reg_whole= @H_301_26@"([-|/|_]{1}20\\d{6})"@H_301_26@;@H_301_26@ @H_301_26@/** 表示 用-或者/隔开的日期,有年月日的,例如 http://www.baIDu.com/2014-3-11/2356.HTML */@H_301_26@ @H_301_26@private@H_301_26@ static@H_301_26@ String url_reg_sep_ymd = @H_301_26@"([-|/|_]{1}20\\d{2}[-|/|_]{1}\\d{1,2}[-|/|_]{1}\\d{1,2})"@H_301_26@;@H_301_26@ @H_301_26@/** 表示 用-或者/隔开的日期,只有年和月份的,例如 http://www.baIDu.com/2014-3/2356.HTML */@H_301_26@ @H_301_26@private@H_301_26@ static@H_301_26@ String url_reg_sep_ym = @H_301_26@"([-|/|_]{1}20\\d{2}[-|/|_]{1}\\d{1,2})"@H_301_26@;@H_301_26@ @H_301_26@private@H_301_26@ static@H_301_26@ Calendar current = Calendar.getInstance();@H_301_26@ @H_301_26@/** 格式正确的时间正则表达式*/@H_301_26@ @H_301_26@private@H_301_26@ static@H_301_26@ String rightTimeReg = @H_301_26@"^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$"@H_301_26@;@H_301_26@ @H_301_26@ @H_301_26@/**@H_301_26@ @H_301_26@* @param url@H_301_26@ @H_301_26@* @param urlContent@H_301_26@ @H_301_26@* @return@H_301_26@ @H_301_26@*/@H_301_26@ @H_301_26@public@H_301_26@ static@H_301_26@ String getPubTimeVarIoUs(String url,String urlContent) {@H_301_26@ @H_301_26@ @H_301_26@String pubTime = getPubTimeFromUrl(url);@H_301_26@ @H_301_26@ @H_301_26@//链接里面没有,匹配文本中的@H_301_26@ @H_301_26@if@H_301_26@(pubTime == @H_301_26@null@H_301_26@)@H_301_26@ @H_301_26@{@H_301_26@ @H_301_26@if@H_301_26@(urlContent!=@H_301_26@null@H_301_26@&&!urlContent.trim().equals(@H_301_26@""@H_301_26@))@H_301_26@ @H_301_26@return@H_301_26@ extractPageDate(urlContent);@H_301_26@ @H_301_26@}@H_301_26@ @H_301_26@ @H_301_26@return@H_301_26@ pubTime;@H_301_26@ @H_301_26@}@H_301_26@ @H_301_26@ @H_301_26@/**从url里面抽取出发布时间,返回YYYY-MM-DD HH:mm:ss格式的字符串@H_301_26@ @H_301_26@* @param url@H_301_26@ @H_301_26@* @return@H_301_26@ @H_301_26@*/@H_301_26@ @H_301_26@public@H_301_26@ static@H_301_26@ String getPubTimeFromUrl(String url)@H_301_26@ @H_301_26@{@H_301_26@ @H_301_26@Pattern p_whole = Pattern.compile(url_reg_whole);@H_301_26@ @H_301_26@Matcher m_whole = p_whole.matcher(url);@H_301_26@ @H_301_26@if@H_301_26@(m_whole.find(@H_301_26@0@H_301_26@)&&m_whole.groupCount()>@H_301_26@0@H_301_26@)@H_301_26@ @H_301_26@{@H_301_26@ @H_301_26@String time = m_whole.group(@H_301_26@0@H_301_26@);@H_301_26@ @H_301_26@time = time.substring(@H_301_26@1@H_301_26@,time.length());@H_301_26@ @H_301_26@//每一步都不能够超出当前时间 @H_301_26@ @H_301_26@if@H_301_26@(current.compareto(TimeUtil.strToCalendar(time, @H_301_26@"yyyyMMdd"@H_301_26@))>=@H_301_26@0@H_301_26@)@H_301_26@ @H_301_26@{@H_301_26@ @H_301_26@return@H_301_26@ time.substring(@H_301_26@0@H_301_26@,@H_301_26@4@H_301_26@)+@H_301_26@"-"@H_301_26@+time.substring(@H_301_26@4@H_301_26@,@H_301_26@6@H_301_26@)+@H_301_26@"-"@H_301_26@+@H_301_26@ @H_301_26@time.substring(@H_301_26@6@H_301_26@,@H_301_26@8@H_301_26@)+@H_301_26@" "@H_301_26@+@H_301_26@"00:00:00"@H_301_26@;@H_301_26@ @H_301_26@}@H_301_26@ @H_301_26@}@H_301_26@ @H_301_26@ @H_301_26@p_whole = @H_301_26@null@H_301_26@;@H_301_26@ @H_301_26@m_whole = @H_301_26@null@H_301_26@;@H_301_26@ @H_301_26@Pattern p_sep = Pattern.compile(url_reg_sep_ymd);@H_301_26@ @H_301_26@Matcher m_sep = p_sep.matcher(url);@H_301_26@ @H_301_26@if@H_301_26@(m_sep.find(@H_301_26@0@H_301_26@)&&m_sep.groupCount()>@H_301_26@0@H_301_26@)@H_301_26@ @H_301_26@{@H_301_26@ @H_301_26@String time = m_sep.group(@H_301_26@0@H_301_26@);@H_301_26@ @H_301_26@time = time.substring(@H_301_26@1@H_301_26@,time.length());@H_301_26@ @H_301_26@String[] seg = time.split(@H_301_26@"[-|/|_]{1}"@H_301_26@);@H_301_26@ @H_301_26@Calendar theTime = Calendar.getInstance();@H_301_26@ @H_301_26@theTime.set(Calendar.YEAR,Integer.parseInt(seg[@H_301_26@0@H_301_26@]));@H_301_26@ @H_301_26@theTime.set(Calendar.MONTH, Integer.parseInt(seg[@H_301_26@1@H_301_26@]));@H_301_26@ @H_301_26@theTime.set(Calendar.DAY_OF_MONTH, Integer.parseInt(seg[@H_301_26@2@H_301_26@]));@H_301_26@ @H_301_26@if@H_301_26@(current.compareto(theTime)>=@H_301_26@0@H_301_26@)@H_301_26@ @H_301_26@{@H_301_26@ @H_301_26@ @H_301_26@return@H_301_26@ seg[@H_301_26@0@H_301_26@]+@H_301_26@"-"@H_301_26@+seg[@H_301_26@1@H_301_26@]+@H_301_26@