根据当前月份(如201806)生成当期上期同期日期条件

    /// <summary>
    /// 根据当前月份生成当期上期同期日期条件
    /// </summary>
    public class YF
    {
        private int year;

        public int Year
        {
            get { return year; }
            set { year = value; }
        }
        private int month;

        public int Month
        {
            get { return month; }
            set { month = value; }
        }

        public YF() { }
        public YF(int year, int month)
        {
            this.year = year;
            this.month = month;
        }

        public YF(string yf)
        {
            Regex reg = new Regex(@"\d{6}", RegexOptions.IgnoreCase);
            if (!reg.IsMatch(yf))
                throw new Exception("请输入6位数");
            year = int.Parse(yf.Substring(0, 4));
            month = int.Parse(yf.Substring(4, 2));

        }

        /// <summary>
        /// 去年同期
        /// </summary>
        /// <returns></returns>
        public string GetSTLY()
        {
            DateTime currMonthStart = new DateTime(year, month, 1);
            return currMonthStart.AddYears(-1).ToString("yyyyMM");
        }

        /// <summary>
        /// 获取本期及同期期间表达式(期间格式如:201807)
        /// </summary>
        /// <param name="fieldName"></param>
        /// <returns></returns>
        public string GenerateQjCondition(string fieldName)
        {
            List<string> conds = new List<string>();


            DateTime currMonthStart = new DateTime(year, month, 1);

            //本期
            conds.Add(string.Format(" {0} = '{1}' "
                , fieldName
                , currMonthStart.ToString("yyyyMM")));

            //上期
            /*
            conds.Add(string.Format(" {0} = '{1}' "
                , fieldName
                , currMonthStart.AddMonths(-1).ToString("yyyyMM")));
            */
            //同期
            conds.Add(string.Format(" {0} = '{1}' "
                , fieldName
                , currMonthStart.AddYears(-1).ToString("yyyyMM")));

            return string.Format("({0})", string.Join(" OR ", conds.ToArray()));
        }

        /// <summary>
        /// 获取本期、同期、上期条件表达式
        /// </summary>
        /// <param name="rqFieldName"></param>
        /// <returns></returns>
        public string GenerateRqCondition(string rqFieldName)
        {
            List<string> conds = new List<string>();


            DateTime currMonthStart = new DateTime(year, month, 1);

            //本期
            conds.Add(string.Format("({0} >= '{1}' AND {0} <'{2}' )"
                , rqFieldName
                , currMonthStart.ToString("yyyy-MM-dd")
                , currMonthStart.AddMonths(1).ToString("yyyy-MM-dd")));

            //上期
            conds.Add(string.Format("({0} >= '{1}' AND {0} <'{2}' )"
                , rqFieldName
                , currMonthStart.AddMonths(-1).ToString("yyyy-MM-dd")
                , currMonthStart.ToString("yyyy-MM-dd")));

            //同期
            conds.Add(string.Format("({0} >= '{1}' AND {0} <'{2}' )"
                , rqFieldName
                , currMonthStart.AddYears(-1).ToString("yyyy-MM-dd")
                , currMonthStart.AddYears(-1).AddMonths(1).ToString("yyyy-MM-dd")));

            return string.Format("({0})", string.Join(" OR ", conds.ToArray()));
        }


    }

 

``` {智能估值体系V8} DYNPETTM:=IF(FINANCE_EX(0,1,0)>1.8E8 AND FINANCE_EX(1,1,0)>8E7, CLOSE/MAX(FINANCE_EX(0,1,0)/FINANCE_EX(1,1,0),0.8),1000); PB_RATE:=IF(FINANCE_EX(3,1,0)>0.5 AND CLOSE>3.5, CLOSE/(FINANCE_EX(3,1,0)*0.82+REF(FINANCE_EX(3,1,0),1)*0.18),1000); PEG_VAL:=IF(MAX((FINANCE_EX(4,1,1)/REF(FINANCE_EX(4,1,1),1)-1)*100,0.8)<>0, DYNPETTM/MAX((FINANCE_EX(4,1,1)/REF(FINANCE_EX(4,1,1),1)-1)*100,0.8),1000); {分形波动率V12} VOL_REG:DMA(STD(C,144)/MA(C,144)*SQRT(144),21); VAR_PERIOD:=IF(VOL_REG<0.015,233,IF(VOL_REG<0.035,144,IF(VOL_REG<0.065,55,34))); FAST_LEN:=BARSLAST(CROSS(VOL_REG,0.028))+18; SLOW_LEN:=IF(VOL_REG>0.12,INTPART(VAR_PERIOD*1.438),CEILING(VAR_PERIOD*1.538)); {行业轮动V6矩阵} HY_C:=BLOCK_AVGCLOSE; HY_RET:=(HY_C/REF(HY_C,1)-1)*100; IND_RET:=EMA(HY_C/MAX(BLOCK_AVGOPEN,0.01),5); TRANS_MAT:=EMA(SUM(IF(IND_RET>REF(IND_RET,1) AND REF(IND_RET,1)>REF(IND_RET,2),1,0),60)/ (SUM(IF(REF(IND_RET,1)>REF(IND_RET,2),1,0),60)+1E-4),5); SECTOR_STR:=(TRANS_MAT*EMA(HY_RET,5)*0.68 + REF(TRANS_MAT,3)*EMA(HY_RET,8)*0.32); SECTOR_RK:=RANK(SECTOR_STR,5); SECTOR_FLT:=SECTOR_STR>REF(SECTOR_STR,5)*1.03 AND SECTOR_STR>0.35 AND CROSS(MA(SECTOR_STR,5),MA(SECTOR_STR,13)) AND SECTOR_RK<=3; {九维情绪V16} MARKET_SENT:EMA(ADVANCE/DECLINE,13)*0.42 + EMA(AMO/REF(AMO,3),13)*0.24 + EMA((V/CAPITAL-REF(V/CAPITAL,5))/MAX(REF(V/CAPITAL,5),1),21)*0.18 + EMA(REF(FINANCE(35),1)/CAPITAL,8)*0.14 + EMA(HSZS,5)/MAX(REF(EMA(HSZS,5),8),1)*0.18 + (HHV(H,8)-LLV(L,8))/LLV(L,8)*0.14; {预警系统} 盘中预警:=C>DYNAMIC(1) AND VOL>REF(MA(V,5),1)*2.5 AND CROSS(MACD.DIF,MACD.DEA); 盘后选股:=DYNPETTM<19.8 AND PB_RATE<2.9 AND PEG_VAL<0.95 AND SECTOR_FLT AND MARKET_SENT>0.88 AND HKFLOW_RT>3.2 AND 盘中预警; DRAWTEXT(盘后选股,LOW,'★主升',COLORRED);```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我编辑通达信选股代码,你如何深度理解此代码能用2018-2024年全A股周回测验证此代码选股逻辑的准确性和胜率,评估月胜率达到多少?评估有效信号准确率达到多少?
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值