c#如何计算当月\季度时间段

DateTime表示时间上的一刻,通常以日期和当天的时间表示。借用这个结构,我们可以实现较丰富的功能,本文给出得到每周每天的方法,及得到本月第一天,本月最后一天,本季第一天,本季最后一天,本年第一天及本年最后一天的方法,这在一些与财务有关或库存管理软件中非常有用。

DateTime dt = DateTime.Now;     //得到当前时间
DateTime startYear = new DateTime(dt.Year, 1, 1); //本年年初
DateTime endYear = new DateTime(dt.Year, 12, 31); //本年年末

DateTime startQuarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day); //本季度初
DateTime endQuarter = startQuarter.AddMonths(3).AddDays(-1); //本季度末

DateTime startMonth = dt.AddDays(1 - dt.Day); //本月月初
DateTime endMonth = startMonth.AddMonths(1).AddDays(-1); //本月月末
//DateTime endMonth = startMonth.AddDays((dt.AddMonths(1) - dt).Days - 1); //本月月末


DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d"))); //本周周一
DateTime endWeek = startWeek.AddDays(6); //本周周日

c#如何计算当月季度时间段


//本季度第一天

DateTime firsyDayInQuarter = new DateTime(DateTime.Now.Year, DateTime.Now.Month - (DateTime.Now.Month - 1) % 3, 1);

//本季度最后一天

DateTime lastDayInQuarter = firsyDayInQuarter.AddMonths(3).AddDays(-1);




publicvoid MadeDateTime(DateTime standTime, out DateTime? startTime, out DateTime? endTime)
{
//1~3;4~6;7~9;10~12
//1-4-7-10
int baseMonth = standTime.Month -1;
int MonthLen = baseMonth /3;
startTime =new DateTime(standTime.Year, 1+ MonthLen *3, 1);
endTime = startTime.Value.AddMonths(3).AddMilliseconds(-1);
}

第一个参数为标准对校时间点。
第二个参数为当前季度的起始时间点
第三个参数为当前季度的结束时间点

计算原理:
1/3=0
2/3=0
3/3=1
4/3=1
5/3=1
6/3=2
7/3=2
8/3=2
9/3=3
10/3=3
11/3=3
12/3=4
大家发现了没有呢?如果将月份-1再除以3的话,就得到以下结果
(1-1)/3=0
(2-1)/3=0
(3-1)/3=0
(4-1)/3=1
(5-1)/3=1
(6-1)/3=1
(7-1)/3=2
(8-1)/3=2
(9-1)/3=2
(10-1)/3=3
(11-1)/3=3
(12-1)/3=3
然后拿这个计算结果乘以3再加1的话,就得到这个月的季度的起始月份
0*3+1=1
0*3+1=1
0*3+1=1
1*3+1=4
1*3+1=4
1*3+1=4
2*3+1=7
2*3+1=7
2*3+1=7
3*3+1=10
3*3+1=10
3*3+1=10

``` { —— 调整估值逻辑 —— } DNP_NORM := IF(FINANCE(33) > 0 AND FINANCE(1) > 0, MAX(C/((FINANCE(33)*FINANCE(34))/IF(FINANCE(1)!=0,FINANCE(1),1E-6)),1E-6), 9999); DNP := IF(FINANCE(33) > FINANCE(34)*0.15, DNP_NORM*MA((C-REF(C,21))/REF(C,21)*100,21), IF(DNP_NORM < 9999,DNP_NORM,9999)); PB_RATE := IF(FINANCE(5)/IF(FINANCE(1)!=0,FINANCE(1),1E-6) > 0.15, (C/IF(FINANCE(5)!=0,FINANCE(5),1E-6))*SQRT(MAX(FINANCE(33)/IF(FINANCE(1)!=0,FINANCE(1),1E-6),0)), 9999); PEG := DNP/EMA(MAX(FINANCE(54)/FINANCE(34)*100,0.15),8); { —— 技术指标优化 —— } IND_RS := EMA(((C-REF(C,21))/REF(C,21))/((INDEXC-REF(INDEXC,21))/REF(INDEXC,21))*2.618,13)*CORR(C,INDEXC,55); { —— 波动率模块 —— } VOLAT := EMA(STD(C,34)/EMA(C,34),55)*SQRT(252); VAR_P := IF(VOLAT<0.12,144,IF(VOLAT<0.18,89,IF(VOLAT<0.25,55,34))); FST_L := LLVBARS(C,VAR_P)*0.618 + HHVBARS(C,VAR_P)*0.382; SLW_L := CEILING(VAR_P*1.618*VOLAT/0.2); SGN_L := IF(VAR_P<=34,5,IF(VAR_P<=89,8,13)); { —— 资金流优化 —— } MAIN_F := (L2_AMO(0,2)+L2_AMO(1,1)-L2_AMO(0,3))/CAPITAL*VOLAT/0.2; FUND_T := EMA(MAIN_F,5)*2.236 + EMA(MAIN_F,13)*1.618 - EMA(MAIN_F,34)*0.618; MNY_TR := SUM(MAIN_F>0.06,5)>=4 AND SLOPE(FUND_T,5)>0.05 AND (HHV(FUND_T,13)-LLV(FUND_T,13))/LLV(FUND_T,13)<0.3; HT_IDX := EMA(COUNT(C=ZTPRICE(REF(C,1),0.1),21)/21*VOL/CAPITAL,5)*3 + FINANCE(25)/FINANCE(1)*2 + L2_AMO(0,2)/CAPITAL*1.5; { —— 多周期共振 —— } MTH_MA := EMA(C,610)*0.8 + EMA(C,144)*0.2; MTH_TR := C>MTH_MA*1.08 AND SLOPE(MTH_MA,8)>0.005 AND C>EMA(C,233); WK_D := EMA(C,55)-EMA(C,233); WK_EA := EMA(WK_D,34); WK_MCD := CROSS(WK_D,WK_EA) AND WK_D>0 AND WK_D>EMA(WK_D,21); DAY_B := C>HHV(H,55)*0.997 AND V>MA(V,89)*1.8 AND ABS((C-L)/L)<0.015 AND (O-L)/(H-L)>0.618; DAY_RS := RSI(5,13,34)>75 AND RSI(13,34,55)>RSI(5,13,34)*1.05; { —— 分钟周期模块 —— } M60_BRK := C#MIN60>HHV(H,144)#MIN60*0.995 AND V#MIN60>MA(V,89)#MIN60*1.5 AND C#MIN60/DYNAINFO(11)>1.08; M60_KDJ := CROSS(K#MIN60,D#MIN60) AND J#MIN60>85 AND J#MIN60>REF(J#MIN60,8)*1.3; { —— 风险控制模块 —— } DBT_FLT := FINANCE(42)/FINANCE(1)<INDBLOCK(25)/100; CSH_FLW := FINANCE(25)/FINANCE(1)>INDBLOCK(75)/100; BTA_FLT := BETWEEN(SLOPE(C/INDEXC,144),0.9,1.1) AND CORR(C,INDEXC,89)>0.6; { —— 信号合成模块 —— } STR_SIG := MTH_TR AND IND_RS>2.2; CMP_SIG := WK_MCD AND FUND_T>0.12; TCT_SIG := DAY_B AND DAY_RS AND M60_BRK AND M60_KDJ; FN_SIG := STR_SIG AND CMP_SIG AND TCT_SIG AND DBT_FLT AND CSH_FLW AND BTA_FLT AND PEG<0.65 AND DNP<18 AND FUND_T>0.15 AND MNY_TR AND HT_IDX>2.5 AND COUNT(FN_SIG,89)=0 AND BETWEEN(TIME,93000,145700) AND DYNAINFO(17)>0.5; CLS_SIG := STR_SIG AND CMP_SIG AND C>EMA(C,89)*1.1 AND V>MA(V,144)*2.2 AND FUND_T>0.2 AND FINVALUE(0)=0; 选股条件: FN_SIG;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我编辑通达信选股代码,你如何深度理解此代码能否选到资金持续流入,股票市场情绪启动,盘中异动启动主升浪的股票,及日线盘中预警选股和盘后选股。用2018-2024年全A股周期回测验证此代码选股逻辑的准确性和胜率,评估胜率达到多少?评估有效信号准确率达到多少?
最新发布
03-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值