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); }
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; }
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; } } }
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; }
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)); }
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); }
public KLineDaily(DailyBar bar) { this.bar = bar; }