Example #1
0
    public List <DailyBar> GetDailyLine(string symbol, string lastDateString, int n)
    {
        List <DailyBar> gskDailys;

        lock (this._md){
            gskDailys = this._md.GetLastNDailyBars(symbol, n, lastDateString);
        }
        //进行向前复权
        int num = gskDailys.Count;

        if (num > 1)
        {
            DailyBar lastDaily = gskDailys[0];
            for (int i = 1; i < num; i++)
            {
                DailyBar curDaily = gskDailys[i];
                if (curDaily.adj_factor != lastDaily.adj_factor)
                {
                    curDaily.close      = curDaily.close * curDaily.adj_factor / lastDaily.adj_factor;
                    curDaily.high       = curDaily.high * curDaily.adj_factor / lastDaily.adj_factor;
                    curDaily.low        = curDaily.low * curDaily.adj_factor / lastDaily.adj_factor;
                    curDaily.open       = curDaily.open * curDaily.adj_factor / lastDaily.adj_factor;
                    curDaily.pre_close  = curDaily.pre_close * curDaily.adj_factor / lastDaily.adj_factor;
                    curDaily.volume     = (long)(curDaily.volume * lastDaily.adj_factor / curDaily.adj_factor);
                    curDaily.adj_factor = lastDaily.adj_factor;
                }
                lastDaily = curDaily;
            }
            gskDailys.Reverse();            //倒序一下,因为从掘金得到的数据是最新的索引为0
        }
        return(gskDailys);
    }
Example #2
0
        private void calculateMatch(Security curSecurity)
        {
            //if (curSecurity.Symbol != "SZSE.002864") return;
            curSecurity.Matched = false;
            //daliyBars是反序放置的,最新的日线索引最小
            List <DailyBar> dailyBars = this._md.GetLastNDailyBars(curSecurity.Symbol, 20, DateTime.Today.AddDays(-1).ToString("yyyy-MM-dd"));

            if (dailyBars.Count <= 0)
            {
                return;
            }
            this.AdjustDailys(dailyBars);
            //判断昨日是否有长上影线
            DailyBar lastDaily = dailyBars.First();

            //Console.WriteLine(lastDaily.strtime);
            float up = lastDaily.close;

            if (lastDaily.open > up)
            {
                up = lastDaily.open;
            }
            float topShadow = lastDaily.high - up;
            float other     = up - lastDaily.low;

            if (topShadow > other / 3)
            {
                return;
            }
            //判断昨日均价是否收阳
            double avgPrice = lastDaily.amount / lastDaily.volume;

            if (avgPrice < lastDaily.open)
            {
                return;
            }
            //判断最近M天上涨次数是否多于下跌次数
            int m = 10;

            if (dailyBars.Count < m)
            {
                m = dailyBars.Count;
            }
            int incCount = 0;

            for (int i = 0; i < m; i++)
            {
                if (dailyBars[i].close > dailyBars[i].pre_close)
                {
                    incCount++;
                }
            }
            if (incCount <= m / 2)
            {
                return;
            }
            curSecurity.Matched = true;
        }
Example #3
0
        private void AdjustDailys(List <DailyBar> gmDailys)
        {//进行向前复权
            int num = gmDailys.Count;

            if (num > 1)
            {
                DailyBar lastDaily = gmDailys[0];
                for (int i = 1; i < num; i++)
                {
                    DailyBar curDaily = gmDailys[i];
                    if (curDaily.adj_factor != lastDaily.adj_factor)
                    {
                        curDaily.close      = curDaily.close * curDaily.adj_factor / lastDaily.adj_factor;
                        curDaily.high       = curDaily.high * curDaily.adj_factor / lastDaily.adj_factor;
                        curDaily.low        = curDaily.low * curDaily.adj_factor / lastDaily.adj_factor;
                        curDaily.open       = curDaily.open * curDaily.adj_factor / lastDaily.adj_factor;
                        curDaily.pre_close  = curDaily.pre_close * curDaily.adj_factor / lastDaily.adj_factor;
                        curDaily.volume     = (long)(curDaily.volume * lastDaily.adj_factor / curDaily.adj_factor);
                        curDaily.adj_factor = lastDaily.adj_factor;
                    }
                    lastDaily = curDaily;
                }
            }
        }
Example #4
0
 private void Adj_factor(DailyBar bar)
 {
     bar.open = bar.open * bar.adj_factor / baseFactor;
     bar.close = bar.close * bar.adj_factor / baseFactor;
     bar.high = bar.high * bar.adj_factor / baseFactor;
     bar.low = bar.low * bar.adj_factor / baseFactor;
 }
Example #5
0
        public void PushDailyBar(DailyBar bar)
        {
            if (!IsBench)
                Adj_factor(bar);

            string symbol = string.Format("{0}.{1}", bar.exchange, bar.sec_id);
            ta.PushKLine(0, new KLine(symbol, bar.utc_time, bar.open, bar.close, bar.high, bar.low, bar.volume));
        }
Example #6
0
        public KLine GetKLine(DailyBar bar)
        {
            if (!IsBench)
                Adj_factor(bar);

            string symbol = string.Format("{0}.{1}", bar.exchange, bar.sec_id);
            return new KLine(symbol, bar.utc_time, bar.open, bar.close, bar.high, bar.low, bar.volume);
        }
Example #7
0
 public KLineDaily(DailyBar bar)
 {
     this.bar = bar;
 }