public override void OnInit() { //读取日线,计算持仓周期 if (HasPosition) { DateTime curDate = Clock.Now.Date; List <Daily> dailyBars = BarUtils.GetLastNDailys(this.instrument, curDate.AddDays(-1), 40); BarUtils.AdjustDailys(dailyBars); //向前复权 int n = dailyBars.Count; if (n > 0) { int i; for (i = n - 1; i >= 0; i--) { if (dailyBars[i].DateTime <= Position.EntryDate.Date) { break; } } if (dailyBars[i].DateTime < Position.EntryDate.Date) { i++; } if (i < 0) { i = 0; } this.holdingPeriod = n - i + 1; } this.stopLossPrice = Position.EntryPrice * (1 - stopLossRate); } Console.WriteLine("投资组合中的证券 {0} 的持仓周期是 {1} ", this.instrument.Symbol, this.holdingPeriod); }
//如果本地有日线,则先读取本地数据 public static List <Daily> GetLastNDailys(string symbol, int n) { List <Daily> dailys; Instrument inst = InstrumentManager.Instruments[symbol]; if (inst != null) { dailys = BarUtils.GetLastNDailys(inst, dealDate, n); } else { dailys = provider.GetLastNDailys(symbol, n, dealDateString); } return(dailys); }