金融证券中行情数据时间在图形坐标中索引的转换算法

金融证券中行情数据时间在图形坐标中索引的转换算法。

股票(基金,债券,指数)交易时间为

                              上午 9:30----11:30(不包含11:30这个点共120数据) 下午 13:00--15:00(不包含15:00这个点共120数据)

银行间债券交易时间为  

                                 上午9:00---12:00 (不包含12:00这个点共180数据) 下午 13:30--16:30(不包含16:20这个点共180数据)

如果通过时间计算出对应的坐标索引号(实际上多少分钟,只是从0开始计算)?

一、问题

如果通过坐标索引号推出时间?

二、下面我们以银行债券交易时间作为推算,推出相应的算法

上午情况

9:00对应0

9:01对应1

9:59对应59

10:00对应60

。。。。。。

11:59对应179

推出 索引号mins=(hour-9)*60+minute

下午情况

13:30对应180+0=180

13:31对应180+1=181

13:59对应180+29=209

14:00对应180+30=210;

14:30对应180+60=240=180+(14-13)*60-(30-30)=180+60+0=240

。。。。。。。。。。。。

16:29对应180+(16-13)*60-(29-30)=359

通过归纳得

mins=180+(hour-13)*60+(minute-30);

通过上面的推算我们得出了相应的索引号,那么我么如果通过索引号算出相应的时间呢?

上午的情况的索引号mins=(hour-9)*60+minute

我们推出hour的表达式为

     hour=(mins-minute+9*60)/60

          =mins/60-minute/60+9

因为0 <= minute<60 所以minute/60=0;

          =mins/60+9

我们推出minute的表达式

     minute=mins-(hour-9)*60;

因为minute是对所有的分钟除以60后的余数得到的,列如151/60=2   151%60=31

    所以minute=mins%60-0=mins%60

同理我们来计算可得出相应的结果。这里不再推算.

三、代码

下面将算法代码直接贴出来了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
           
            int x = GetMinuteByInterBank(16, 29);
            int y = GetMinuteByStock(14, 59);
            string str = GetTimeFormInterBankBondMinute(359);
            string str1 = GetTimeFormInterBankBondMinute(179);
        }
        //通过时间获取股票(基金,指数,债券)对应的坐标时间索引号
        private static int GetMinuteByStock(int hour,int minute)
        {
            int result = 0;
            if (hour<13)
            {
                result = (hour - 9) * 60 + (minute - 30);
            }
            else
            {
                result = (hour - 13) * 60 + minute+120;
            }
            return result;           
        }
        //通过坐标时间索引号获取股票(基金,指数,债券)对应的时间
        private static string GetTimeFormStockMinute(int mins)
        {
            int hour = 0,minute = 0;        
            string result = null;
            if (hour >120)
            {
                hour=(mins-120)/60+13;
                minute=mins%60;
            }
            else
            {
                hour = (mins + 30) / 60 + 9;
                minute = (mins + 30) % 60;
            }        
            result = String.Format("{0}:{1}", hour.ToString().PadLeft(2, '0'),
                minute.ToString().PadLeft(2, '0'));
            return result;
        }
        //通过坐标时间索引号获取银行间债券对应的时间 
        private static string GetTimeFormInterBankBondMinute(int mins)
        {
            int hour = 0, minute = 0;
            string result = null;
            if (mins > 180)
            {
                hour = (mins - 150) / 60 + 13;
                minute = (mins-150) % 60;
            }
            else
            {
                hour = mins / 60 + 9;
                minute = mins  % 60;
            }
            result = String.Format("{0}:{1}", hour.ToString().PadLeft(2, '0'),
                minute.ToString().PadLeft(2, '0'));
            return result;
        }
        //通过时间获取银行间债券对应的坐标时间索引号
        private static int GetMinuteByInterBank(int hour, int minute)
        {
            int result = 0;
            if (hour < 13)
            {
                result = (hour - 9) * 60 + minute;
            }
            else
            {
                result = (hour - 13) * 60 + (minute - 30)+180;
            }
            return result;
        }   
            
    }
}

 

 

posted @ 2012-11-24 09:31  焦涛  阅读(506)  评论(0)    收藏  举报