金融证券中行情数据时间在图形坐标中索引的转换算法
金融证券中行情数据时间在图形坐标中索引的转换算法。
股票(基金,债券,指数)交易时间为
上午 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; } } }