以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  下个交易日的日期怎么表示  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=8322)

--  作者:ohlc
--  发布时间:2011/10/9 19:43:41
--  下个交易日的日期怎么表示
下个交易日的日期怎么表示?
--  作者:fly
--  发布时间:2011/10/10 9:12:08
--  

下个交易日的日期比较困难,要考虑周末\\节假日\\闰年等因素.

暂时尚无好的办法,还是人脑自动算的好.


--  作者:董小球
--  发布时间:2011/10/10 9:12:11
--  

你就判断今天这个交易日 不就可以判断出下个了么


--  作者:ohlc
--  发布时间:2011/10/11 10:05:14
--  
只考虑星期六和星期天,不考虑其他节假日
--  作者:fly
--  发布时间:2011/10/11 10:23:26
--  

那就是要考虑WEEKDAY--该周期做在的星期数

和当天是哪一月的哪一天了.

 

1.如果WEEKDAY是1到4的值,说明是周一到周四,下一交易日加1就行,注意如果是月末,下一交易日其实是个赋值过程,即年不变,月增1,日为1.

2.如果WEEKDAY是5,说明是周五,下一交易日加3,也要考虑月末的情况.


--  作者:ohlc
--  发布时间:2011/10/11 10:51:43
--  

 对,就是这个思路,但是不知道怎么用函数表示。还有,平年闰年怎么表示,因为二月份比较特殊


--  作者:ohlc
--  发布时间:2011/10/11 10:59:37
--  

第一类:1、3、5、7、8、10、12月

第二类:4、6、9、11月

第三类:2月,又分为平年、闰年


--  作者:fly
--  发布时间:2011/10/11 13:35:22
--  

闰年判断方法:
1.能被400整除的年份;
2.能被4整除但同时不能被100整除的年份。
满足上述两个条件之一的即为闰年。

用指标写出来就是

CON:=year%400=0 or (year%4=0 and not(year%100)=1);//满足这个条件的就是闰年

 

您可以尝试着自己写一下,用到的就是YEAR,MONTH,WEEKDAY等函数


--  作者:fly
--  发布时间:2011/10/11 13:46:27
--  

我是觉得这样写出来,也没什么意义,因为没包括节假日,最终的结果,还是判定不了,下一个交易日

 

如果更详细一下,就是按照下面的写法就可以判断出哪一月有多少天.

您如果觉得这样写出来也还是有意义的.

剩下的,您尝试着自己补充吧.

con:=year%400=0 or (year%4=0 and not(year%100)=1);

if month=1 or month=3 or month=5 or month=7 or month=8 or month=10 or month=12 then daym:=31;//31天的月份

if month=4 or month=6 or month=9 or month=11 then daym:=30;//30天的月份

if con=1 and month=2 then daym:=29;//29天的月份

if con=0 and month=2 then daym:=28;//28天的月份

[此贴子已经被作者于2011-10-11 13:47:16编辑过]

--  作者:ohlc
--  发布时间:2011/10/12 9:16:55
--  

这样写的

大月:=MONTH=1 OR MONTH=3 OR MONTH=5 OR MONTH=7 OR MONTH=8 OR MONTH=10 OR MONTH=12;
小月:=MONTH=4 OR MONTH=6 OR MONTH=9 OR MONTH=11;
二月闰:=year%400=0 or (year%4=0 and not(year%100)=1);
当月天数:=if(大月,31,if(小月,30,if(二月闰,29,28)));
毛日期:=IF(WEEKDAY=5,DATE+3-1000000+20000000,DATE+1-1000000+20000000);
月末日期:=year*10000+MONTH*100+当月天数;
余数:=毛日期-月末日期;
日期:if(余数>0,year*10000+(MONTH+1)*100+余数,毛日期),LINETHICK0,PRECISION0;