1.生成K线的开盘时间,收盘时间
1.0品种的交易时间
讯享网
讯享网 public class ProductTradeTime{
private String id; /品种id*/ private String productId; /上午第一节开始*/ private String moringFirstStart; /上午第一节停止*/ private String moringFirstStop; /上午第二节开始*/ private String moringSecondStart; /上午第二节停止*/ private String moringSecondStop; /下午开始*/ private String afternoonStart; /下午停止*/ private String afternoonStop; /有无夜盘*/ private Boolean isNightTrade; /夜盘开始*/ private String nightStart; /夜盘停止*/ private String nightStop; /创建日期*/ private Date createTime; }
交易时间:http://www.qhsxf.com/期货交易时间.html
计算localtime的时间差
//总是用晚的减早的 public long getLocalTimeDiff(LocalTime localTime1, LocalTime localTime2){
long diff = 0; Date dateTime1 = null; Date dateTime2 = null; //不跨天 if(localTime1.compareTo(localTime2)>=0){
String dateStr = DateTimeUntil.dateToString(new Date(),"yyyy-MM-dd"); dateTime1 = DateTimeUntil.StringToDate(dateStr+" "+localTime1.toString(),"yyyy-MM-dd HH:mm"); dateTime2 = DateTimeUntil.StringToDate(dateStr+" "+localTime2.toString(),"yyyy-MM-dd HH:mm"); } //跨天时的计算 else if(localTime1.compareTo(localTime2)<0){
Calendar calendar = Calendar.getInstance(); String dateStr1 = DateTimeUntil.dateToString(calendar.getTime(),"yyyy-MM-dd"); calendar.add(Calendar.DAY_OF_YEAR,-1); String dateStr2 = DateTimeUntil.dateToString(calendar.getTime(),"yyyy-MM-dd"); dateTime1 = DateTimeUntil.StringToDate(dateStr1+" "+localTime1.toString(),"yyyy-MM-dd HH:mm"); dateTime2 = DateTimeUntil.StringToDate(dateStr2+" "+localTime2.toString(),"yyyy-MM-dd HH:mm"); } diff = dateTime1.getTime()- dateTime2.getTime(); return diff; }
1.1分钟线
讯享网无夜盘分钟线
public void produceKlineIndexNoNightMin(ProductTradeTime TradeTime,int nTimeLen){
this.m_lst_klineCycleIndex.clear(); LocalTime starttime = LocalTime.parse(TradeTime.getMoringFirstStart()); //晚上21:00:00 LocalTime endtime = TechIndexDateUtils.addSecsLocalTime(starttime, nTimeLen*60); LocalTime restMarketEnd0 = LocalTime.parse(TradeTime.getMoringFirstStart()); LocalTime restMarketStart1 = LocalTime.parse(TradeTime.getMoringFirstStop()); LocalTime restMarketEnd1 = LocalTime.parse(TradeTime.getMoringSecondStart()); LocalTime restMarketStart2 = LocalTime.parse(TradeTime.getMoringSecondStop()); LocalTime restMarketEnd2 = LocalTime.parse(TradeTime.getAfternoonStart()); LocalTime restMarketEnd3 = LocalTime.parse(TradeTime.getAfternoonStop()); do{
TechIndexKlineCycleIndex kLineCycleIndex = new TechIndexKlineCycleIndex(); Date start = DateTimeUntil.StringToDate(starttime.toString(),"HH:mm"); Date end = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); kLineCycleIndex.setTime_open(start); //当前K线周期包含10:15-10:30 if(starttime.compareTo(restMarketStart1)<=0 && endtime.compareTo(restMarketEnd1)>=0){
long diff = getLocalTimeDiff(restMarketEnd1,restMarketStart1)/1000; endtime = TechIndexDateUtils.addSecsLocalTime(endtime,(int)diff);//15*60 } //当前K线end==10:15 else if(endtime.compareTo(restMarketStart1)==0){
endtime = restMarketEnd1;//15*60 } //当前K线end在10:15-10:30之间 else if(endtime.compareTo(restMarketStart1)>0 && endtime.compareTo(restMarketEnd1)<0){
long diff = getLocalTimeDiff(endtime,restMarketStart1)/1000; endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd1,(int)diff);//15*60 } //当前K线周期的endtime>==11:30 if(endtime.compareTo(restMarketStart2)>=0 && endtime.compareTo(restMarketEnd2)<0){
Date date = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); Date date1 = DateTimeUntil.StringToDate(restMarketStart2.toString(),"HH:mm"); int diffmin = (int) ((date.getTime()-date1.getTime())/(1000*60)); endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd2,diffmin*60); } //当前K线周期的endtime>=15:00 && starttime<15:00 if(endtime.compareTo(restMarketEnd3)>=0 && starttime.compareTo(restMarketEnd3)<0){
endtime = restMarketEnd3; } end = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); kLineCycleIndex.setTime_close(end); this.m_lst_klineCycleIndex.add(kLineCycleIndex); starttime = endtime; endtime = TechIndexDateUtils.addSecsLocalTime(starttime, nTimeLen*60); }while(starttime.compareTo(restMarketEnd3) != 0); System.out.println("zxc"); }
有夜盘分钟线
讯享网public void produceKlineIndexForNightMin(ProductTradeTime TradeTime,int nTimeLen){
this.m_lst_klineCycleIndex.clear(); LocalTime starttime = LocalTime.parse(TradeTime.getNightStart()); //晚上21:00:00 LocalTime endtime = TechIndexDateUtils.addSecsLocalTime(starttime, nTimeLen*60); LocalTime restMarketStart0 = LocalTime.parse(TradeTime.getNightStop()); LocalTime restMarketEnd0 = LocalTime.parse(TradeTime.getMoringFirstStart()); LocalTime restMarketStart1 = LocalTime.parse(TradeTime.getMoringFirstStop()); LocalTime restMarketEnd1 = LocalTime.parse(TradeTime.getMoringSecondStart()); LocalTime restMarketStart2 = LocalTime.parse(TradeTime.getMoringSecondStop()); LocalTime restMarketEnd2 = LocalTime.parse(TradeTime.getAfternoonStart()); LocalTime restMarketEnd3 = LocalTime.parse(TradeTime.getAfternoonStop()); if(endtime.compareTo(restMarketStart0)==0){
endtime = restMarketEnd0; } do{
TechIndexKlineCycleIndex kLineCycleIndex = new TechIndexKlineCycleIndex(); Date start = DateTimeUntil.StringToDate(starttime.toString(),"HH:mm"); Date end = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); kLineCycleIndex.setTime_open(start); kLineCycleIndex.setTime_close(end); this.m_lst_klineCycleIndex.add(kLineCycleIndex); starttime = endtime; endtime = TechIndexDateUtils.addSecsLocalTime(starttime, nTimeLen*60); //当前K线周期的endtime落在02:30-09:00内 //跨天 if(restMarketStart0.compareTo(restMarketEnd0)<0){
//有夜盘跨天(0点后收盘)则将在收盘时间外的时间算到第二天开盘 if(endtime.compareTo(restMarketStart0)>=0 && endtime.compareTo(restMarketEnd0)<=0){
Date date = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); Date date1 = DateTimeUntil.StringToDate(restMarketStart0.toString(),"HH:mm"); int diffmin = (int)(date.getTime()-date1.getTime())/(1000*60); endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd0,diffmin*60); } } //没有跨天 if(restMarketStart0.compareTo(restMarketEnd0)>0){
//有夜盘没有跨天(0点前收盘)则将在收盘时间外的时间算到第二天开盘 if(endtime.compareTo(restMarketStart0)>=0 || endtime.compareTo(restMarketEnd0)<=0){
Date date = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); Date date1 = DateTimeUntil.StringToDate(restMarketStart0.toString(),"HH:mm"); int diffmin = (int)(date.getTime()-date1.getTime())/(1000*60); endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd0,diffmin*60); } } //当前K线周期包含10:15-10:30 if(starttime.compareTo(restMarketStart1)<=0 && endtime.compareTo(restMarketEnd1)>=0){
endtime = TechIndexDateUtils.addSecsLocalTime(endtime,15*60); } //当前K线end==10:15 else if(endtime.compareTo(restMarketStart1)==0){
endtime = restMarketEnd1;//15*60 } //当前K线end在10:15-10:30之间 else if(endtime.compareTo(restMarketStart1)>0 && endtime.compareTo(restMarketEnd1)<0){
long diff = getLocalTimeDiff(endtime,restMarketStart1)/1000; endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd1,(int)diff);//15*60 } //当前K线周期的endtime>==11:30 if(endtime.compareTo(restMarketStart2)>=0 && endtime.compareTo(restMarketEnd2)<0){
Date date = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); Date date1 = DateTimeUntil.StringToDate(restMarketStart2.toString(),"HH:mm"); int diffmin = (int) ((date.getTime()-date1.getTime())/(1000*60)); endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd2,diffmin*60); } //当前K线周期的endtime>=15:00 && starttime<15:00 if(endtime.compareTo(restMarketEnd3)>=0 && starttime.compareTo(restMarketEnd3)<0){
endtime = restMarketEnd3; } }while(starttime.compareTo(restMarketEnd3) != 0); System.out.println("zxc"); }
1.2小时线
无夜盘小时线
public void produceKlineIndexNoNightHour(ProductTradeTime TradeTime,int nTimeLen){
this.m_lst_klineCycleIndex.clear(); LocalTime starttime = LocalTime.parse(TradeTime.getMoringFirstStart()); //晚上21:00:00 LocalTime endtime = TechIndexDateUtils.addSecsLocalTime(starttime, nTimeLen * 60*60); LocalTime restMarketEnd0 = LocalTime.parse(TradeTime.getMoringFirstStart()); LocalTime restMarketStart1 = LocalTime.parse(TradeTime.getMoringFirstStop()); LocalTime restMarketEnd1 = LocalTime.parse(TradeTime.getMoringSecondStart()); LocalTime restMarketStart2 = LocalTime.parse(TradeTime.getMoringSecondStop()); LocalTime restMarketEnd2 = LocalTime.parse(TradeTime.getAfternoonStart()); LocalTime restMarketEnd3 = LocalTime.parse(TradeTime.getAfternoonStop()); do{
TechIndexKlineCycleIndex kLineCycleIndex = new TechIndexKlineCycleIndex(); Date start = DateTimeUntil.StringToDate(starttime.toString(),"HH:mm"); Date end = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); kLineCycleIndex.setTime_open(start); //当前K线周期包含10:15-10:30 if(starttime.compareTo(restMarketStart1)<=0 && endtime.compareTo(restMarketEnd1)>=0){
long diff = getLocalTimeDiff(restMarketEnd1,restMarketStart1)/1000; endtime = TechIndexDateUtils.addSecsLocalTime(endtime,(int)diff);//15*60 } //当前K线周期的endtime>==11:30 if(endtime.compareTo(restMarketStart2)>=0 && endtime.compareTo(restMarketEnd2)<0){
Date date = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); Date date1 = DateTimeUntil.StringToDate(restMarketStart2.toString(),"HH:mm"); int diffmin = (int) ((date.getTime()-date1.getTime())/(1000*60)); endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd2,diffmin*60); } //当前K线周期的endtime>=15:00 && starttime<15:00 if(endtime.compareTo(restMarketEnd3)>=0 && starttime.compareTo(restMarketEnd3)<0){
endtime = restMarketEnd3; } end = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); kLineCycleIndex.setTime_close(end); this.m_lst_klineCycleIndex.add(kLineCycleIndex); starttime = endtime; endtime = TechIndexDateUtils.addSecsLocalTime(starttime, nTimeLen * 60*60); }while(starttime.compareTo(restMarketEnd3) != 0); System.out.println("zxc"); }
有夜盘小时线
讯享网public void produceKlineIndexForNightHour(ProductTradeTime TradeTime,int nTimeLen){
this.m_lst_klineCycleIndex.clear(); LocalTime starttime = LocalTime.parse(TradeTime.getNightStart()); //晚上21:00:00 LocalTime endtime = TechIndexDateUtils.addSecsLocalTime(starttime, nTimeLen * 60*60); LocalTime restMarketStart0 = LocalTime.parse(TradeTime.getNightStop()); LocalTime restMarketEnd0 = LocalTime.parse(TradeTime.getMoringFirstStart()); LocalTime restMarketStart1 = LocalTime.parse(TradeTime.getMoringFirstStop()); LocalTime restMarketEnd1 = LocalTime.parse(TradeTime.getMoringSecondStart()); LocalTime restMarketStart2 = LocalTime.parse(TradeTime.getMoringSecondStop()); LocalTime restMarketEnd2 = LocalTime.parse(TradeTime.getAfternoonStart()); LocalTime restMarketEnd3 = LocalTime.parse(TradeTime.getAfternoonStop()); if(endtime.compareTo(restMarketStart0)==0){
endtime = restMarketEnd0; } do{
TechIndexKlineCycleIndex kLineCycleIndex = new TechIndexKlineCycleIndex(); Date start = DateTimeUntil.StringToDate(starttime.toString(),"HH:mm"); Date end = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); kLineCycleIndex.setTime_open(start); kLineCycleIndex.setTime_close(end); this.m_lst_klineCycleIndex.add(kLineCycleIndex); starttime = endtime; endtime = TechIndexDateUtils.addSecsLocalTime(starttime, nTimeLen * 60*60); //当前K线周期的endtime落在02:30-09:00内 //跨天 if(restMarketStart0.compareTo(restMarketEnd0)<0){
if(endtime.compareTo(restMarketStart0)>=0 && endtime.compareTo(restMarketEnd0)<=0){
Date date = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); Date date1 = DateTimeUntil.StringToDate(restMarketStart0.toString(),"HH:mm"); int diffmin = (int)(date.getTime()-date1.getTime())/(1000*60); endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd0,diffmin*60); } } //没有跨天 if(restMarketStart0.compareTo(restMarketEnd0)>0){
if(endtime.compareTo(restMarketStart0)>=0 || endtime.compareTo(restMarketEnd0)<=0){
Date date = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); Date date1 = DateTimeUntil.StringToDate(restMarketStart0.toString(),"HH:mm"); int diffmin = (int)(date.getTime()-date1.getTime())/(1000*60); endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd0,diffmin*60); } } //当前K线周期包含10:15-10:30 if(starttime.compareTo(restMarketStart1)<=0 && endtime.compareTo(restMarketEnd1)>=0){
endtime = TechIndexDateUtils.addSecsLocalTime(endtime,15*60); } //当前K线周期的endtime>==11:30 if(endtime.compareTo(restMarketStart2)>=0 && endtime.compareTo(restMarketEnd2)<0){
Date date = DateTimeUntil.StringToDate(endtime.toString(),"HH:mm"); Date date1 = DateTimeUntil.StringToDate(restMarketStart2.toString(),"HH:mm"); int diffmin = (int) ((date.getTime()-date1.getTime())/(1000*60)); endtime = TechIndexDateUtils.addSecsLocalTime(restMarketEnd2,diffmin*60); } //当前K线周期的endtime>=15:00 && starttime<15:00 if(endtime.compareTo(restMarketEnd3)>=0 && starttime.compareTo(restMarketEnd3)<0){
endtime = restMarketEnd3; } }while(starttime.compareTo(restMarketEnd3) != 0); System.out.println("zxc"); }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/126069.html