コード例 #1
0
        /// <summary>
        /// VAR0:=(2*CLOSE+HIGH+LOW)/4;
        /// B:=XMA((VAR0-LLV(LOW,30))/(HHV(HIGH,30)-LLV(LOW,30))*100,12);
        /// 主力做多资金:EMA(B,3),LINETHICK2,COLORWHITE;
        /// </summary>
        /// <param name="kline"></param>
        /// <param name="begin"></param>
        /// <param name="end"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public static TimeSeries <ITimeSeriesItem <double> > indicator_fund_main1(this KLine kline, int begin = 0, int end = 0, PropertyDescriptorCollection param = null)
        {
            TimeSeries <ITimeSeriesItem <double> > close = kline.Select <double>("CLOSE", begin, end);
            TimeSeries <ITimeSeriesItem <double> > open  = kline.Select <double>("OPEN", begin, end);
            TimeSeries <ITimeSeriesItem <double> > high  = kline.Select <double>("HIGH", begin, end);
            TimeSeries <ITimeSeriesItem <double> > low   = kline.Select <double>("LOW", begin, end);
            TimeSeries <ITimeSeriesItem <double> > VAR0  = (close * 2.0 + open + low) / 4;


            TimeSeries <ITimeSeriesItem <double> > t1 = VAR0 - low.LLV(30);
            TimeSeries <ITimeSeriesItem <double> > t2 = high.HHV(30) - low.LLV(30);

            TimeSeries <ITimeSeriesItem <double> > t3 = (t1 / t2) * 100;

            TimeSeries <ITimeSeriesItem <double> > B = t3.XMA(12);

            TimeSeries <ITimeSeriesItem <double> > results = B.EMA(3);

            return(results);
        }
コード例 #2
0
        /// <summary>
        /// VAR0:=(2*CLOSE+HIGH+LOW)/4;
        /// B:=XMA((VAR0-LLV(LOW,30))/(HHV(HIGH,30)-LLV(LOW,30))*100,12);
        /// 主力做多资金:EMA(B,3),LINETHICK2,COLORWHITE;
        /// </summary>
        /// <param name="kline"></param>
        /// <param name="begin"></param>
        /// <param name="end"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public static TimeSeries <ITimeSeriesItem <List <double> > > executeIndicator(this KLine kline, int begin = 0, int end = 0, PropertyDescriptorCollection param = null)
        {
            TimeSeries <ITimeSeriesItem <double> > close = kline.Select <double>("CLOSE", begin, end);
            TimeSeries <ITimeSeriesItem <double> > open  = kline.Select <double>("OPEN", begin, end);
            TimeSeries <ITimeSeriesItem <double> > high  = kline.Select <double>("HIGH", begin, end);
            TimeSeries <ITimeSeriesItem <double> > low   = kline.Select <double>("LOW", begin, end);
            TimeSeries <ITimeSeriesItem <double> > VAR0  = (close * 2.0 + high + low) / 4;


            TimeSeries <ITimeSeriesItem <double> > t1 = VAR0 - low.LLV(20);
            TimeSeries <ITimeSeriesItem <double> > t2 = high.HHV(20) - low.LLV(20);

            TimeSeries <ITimeSeriesItem <double> > t3 = (t1 / t2) * 100;

            //TimeSeries<ITimeSeriesItem<double>> B = t3.XMA(12);
            TimeSeries <ITimeSeriesItem <double> > B = t3.EMA(12);

            TimeSeries <ITimeSeriesItem <double> > mainforces = B.EMA(3);

            TimeSeries <ITimeSeriesItem <double> > retailInverstors = mainforces.EMA(30);


            TimeSeries <ITimeSeriesItem <List <double> > > results = new TimeSeries <ITimeSeriesItem <List <double> > >();

            foreach (ITimeSeriesItem <double> mainforce in mainforces)
            {
                TimeSeriesItem <List <double> > r = new TimeSeriesItem <List <double> >();
                r.Value = new List <double>(new double[2] {
                    0, 0
                });

                r.Date     = mainforce.Date;
                r.Value[0] = mainforce.Value;

                ITimeSeriesItem <double> retailInverstor = retailInverstors[r.Date];
                r.Value[1] = retailInverstor == null ? 0 : retailInverstor.Value;

                results.Add(r);
            }
            return(results);
        }
コード例 #3
0
ファイル: MACD.cs プロジェクト: haibo-chen/Security
        /// <summary>
        /// DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
        /// DEA:EMA(DIF, MID);
        /// MACD:(DIF-DEA)*2,COLORSTICK;
        /// 其中SHORT = 12,LONG = 26,MID = 9
        /// </summary>
        /// <param name="kline"></param>
        /// <returns></returns>
        public static MACD Create(KLine kline)
        {
            if (kline == null)
            {
                return(null);
            }
            int p_short = 12, p_long = 26, p_mid = 9;

            TimeSeries <ITimeSeriesItem <double> > CLOSE = kline.Select <double>("close");
            TimeSeries <ITimeSeriesItem <double> > DIF = CLOSE.EMA(p_short) - CLOSE.EMA(p_long);
            TimeSeries <ITimeSeriesItem <double> > DEA = DIF.EMA(p_mid);
            TimeSeries <ITimeSeriesItem <double> > MACD = (DIF - DEA) * 2;

            MACD macd = new MACD(kline.Code, kline.TimeUnit);

            double prevDif = 0, prevdea = 0;

            for (int i = 0; i < kline.Count; i++)
            {
                DateTime d    = kline[i].Date;
                MACDItem item = new MACDItem();
                item.Date = d;


                ITimeSeriesItem <double> difItem = DIF[d];
                if (difItem == null)
                {
                    continue;
                }
                item.DIF = difItem.Value;
                if (prevDif == 0)
                {
                    prevDif = difItem.Value;
                }

                ITimeSeriesItem <double> deaItem = DEA[d];
                if (deaItem == null)
                {
                    continue;
                }
                item.DEA = deaItem.Value;
                if (prevdea == 0)
                {
                    prevdea = deaItem.Value;
                }

                ITimeSeriesItem <double> macdItem = MACD[d];
                if (macdItem == null)
                {
                    continue;
                }
                item.MACD = macdItem.Value;

                if (prevDif < prevdea && difItem.Value > deaItem.Value)
                {
                    item.CROSS = difItem.Value - deaItem.Value;//金叉点
                }
                else if (prevDif > prevdea && difItem.Value < deaItem.Value)
                {
                    item.CROSS = difItem.Value - deaItem.Value;//死叉点
                }
                macd.Add(item);

                prevDif = difItem.Value;
                prevdea = deaItem.Value;
            }

            return(macd);
        }
コード例 #4
0
ファイル: TradingLine.cs プロジェクト: haibo-chen/Security
        /// <summary>
        /// 买线:EMA(CLOSE,3),COLORRED,LINETHICK1;
        /// 卖线:EMA(SLOPE(CLOSE,21)*20+CLOSE,42),COLORBLUE,LINETHICK2;
        /// </summary>
        /// <param name="kline"></param>
        /// <returns></returns>
        public static TradingLine indicator_trading_stereo1(this KLine kline, int begin = 0, int end = 0)
        {
            TimeSeries <ITimeSeriesItem <double> > close = kline.Select <double>("close", begin, end);

            TimeSeries <ITimeSeriesItem <double> > buyLine       = close.EMA(3);
            TimeSeries <ITimeSeriesItem <double> > sellLine      = (close.SLOPE(21) * 20 + close).EMA(42);
            TimeSeries <ITimeSeriesItem <char> >   buysellPoints = new TimeSeries <ITimeSeriesItem <char> >();

            int buy_gt_sell = 1, sell_gt_buy = 2; //买大于卖为1,卖大于买为2
            int state = 0;                        //前一个状态

            for (int i = 0; i < buyLine.Count; i++)
            {
                ITimeSeriesItem <double> buyItem  = buyLine[i];
                ITimeSeriesItem <double> sellItem = sellLine[buyItem.Date];
                if (sellItem == null)
                {
                    continue;
                }
                double t = buyItem.Value - sellItem.Value;
                if (t == 0)
                {
                    continue;
                }
                if (state == 0)
                {
                    state = t > 0 ? buy_gt_sell : sell_gt_buy;
                    continue;
                }
                int cs = t > 0 ? buy_gt_sell : sell_gt_buy;
                if (cs == state)
                {
                    continue;
                }

                if (state == buy_gt_sell)
                {
                    TimeSeriesItem <char> v = new TimeSeriesItem <char>()
                    {
                        Date  = buyItem.Date,
                        Value = 'S'
                    };
                    buysellPoints.Add(v);
                }
                else if (state == sell_gt_buy)
                {
                    TimeSeriesItem <char> v = new TimeSeriesItem <char>()
                    {
                        Date  = buyItem.Date,
                        Value = 'B'
                    };
                    buysellPoints.Add(v);
                }
                state = cs;
            }

            return(new TradingLine()
            {
                buyLine = buyLine,
                sellLine = sellLine,
                buysellPoints = buysellPoints
            });
        }
コード例 #5
0
        /// <summary>
        /// VAR0:=(2*CLOSE+HIGH+LOW)/4;
        ///B:=XMA((VAR0-LLV(LOW,30))/(HHV(HIGH,30)-LLV(LOW,30))*100,12);
        ///主力做多资金:EMA(B,3),LINETHICK2,COLORWHITE;
        ///个股做空资金:EMA(主力做多资金,30),COLORD9D919,LINETHICK2;
        /// </summary>
        /// <param name="kline"></param>
        /// <param name="begin"></param>
        /// <param name="end"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public static TimeSeries <ITimeSeriesItem <double> > indicator_fund_ratailinvestor1(this KLine kline, int begin = 0, int end = 0, PropertyDescriptorCollection param = null)
        {
            TimeSeries <ITimeSeriesItem <double> > t1 = kline.indicator_fund_main1(begin, end, param);

            return(t1.EMA(30));
        }