CTP行情拟合K线:生成K线的开盘时间,收盘时间

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");
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值