public override object Clone() { var p = new BacktestingProject() { Name = Name, Memo = Memo, IsUnlimited = IsUnlimited, AnalyseGrade = AnalyseGrade, AnalyseStartTime = AnalyseStartTime, CurrentDataSource = CurrentDataSource.Clone() as IDataSource, CurrentTradeGate = CurrentTradeGate, Fine = Fine, Grade = Grade, ProjectStartTime = ProjectStartTime, RiskPolicy = RiskPolicy.Clone() as IRiskControl, Status = Status, TargetPortfolio = TargetPortfolio.Clone() as IPortfolio, TestStrategy = TestStrategy.Clone() as IStrategy, TestCurrentTime = TestCurrentTime, TestEndTime = TestEndTime, TestStartTime = TestStartTime, TestStepDelayMS = TestStepDelayMS, }; ConditionList.ForEach(v => p.ConditionList.Add(v.Clone() as ICondition)); InstrumentList.ForEach(v => p.InstrumentList.Add(v.Clone() as IInstrument)); return(p); }
public override object Clone() { var p = new AnalyseProject() { AnalyseEndTime = AnalyseEndTime, AnalyseStartTime = AnalyseStartTime, ProjectStartTime = ProjectStartTime, CurrentDataSource = CurrentDataSource.Clone() as IDataSource, DefaultFilterNumber = DefaultFilterNumber, Fine = Fine, Grade = Grade, Memo = Memo, Name = Name, TestStepDelayMS = TestStepDelayMS, Status = Status }; InstrumentList.ForEach(v => p.InstrumentList.Add(v.Clone() as IInstrument)); ResultList.ForEach(v => p.ResultList.Add(v.Clone() as IInstrument)); BlockList.ForEach(v => p.BlockList.Add(v.Clone() as IInstrument)); ConditionList.ForEach(v => p.ConditionList.Add(v.Clone() as ICondition)); PredicateList.ForEach(v => p.PredicateList.Add(v.Clone() as ICondition)); return(p); }
//相邻的三元组 public Dictionary <string, List <Tuple <double, double, double> > > Get3DCurve() { var r = new Dictionary <string, List <Tuple <double, double, double> > >(); InstrumentList.ForEach(v => { var l = Get3DCurve(v); r.Add(v.Name, l); }); return(r); }
//得到序列里面所有差值的分布 public Dictionary <string, Tuple <List <Tuple <double, double> >, List <Tuple <double, double> > > > GetDimentionAnalyse(int n = 20) { var r = new Dictionary <string, Tuple <List <Tuple <double, double> >, List <Tuple <double, double> > > >(); InstrumentList.ForEach(v => { var l = GetDimentionAnalyse(v, false, n); var al = GetDimentionAnalyse(v, true, n); r.Add(v.Name, new Tuple <List <Tuple <double, double> >, List <Tuple <double, double> > >(l, al)); }); return(r); }
void AnalyseStep() { InstrumentList.ForEach(v => v.Memo = ""); ConditionList.ForEach(v => v.ClearResult()); foreach (var inst in InstrumentList) { foreach (var condition in ConditionList) { condition.GenerateResult(inst, AnalyseStartTime, analyseTime, AnalyseGrade); } } }
public override void PrepareWork() { TargetPortfolio.PrepareWork(); MarketDataList.Clear(); CurrentDataSource.DataList.Clear(); CurrentValueList.Clear(); StandardValueList.Clear(); OrderList.Clear(); DateTime st = TestStartTime; if (TestStartTime > AnalyseStartTime) { st = AnalyseStartTime; } CurrentDataSource.CacheStartTime = st; CurrentDataSource.CacheEndTime = TestEndTime; TestCurrentTime = TestStartTime; analyseTime = MarketData.GetNextTime(TestCurrentTime, AnalyseGrade); _MaxLost = new Money() { FxCode = Pnl.FxCode, Number = 0 }; if (UseFirstMarketDataInit) { var fdl = new List <IMarketData>(); InstrumentList.ForEach(v => { var d = CurrentDataSource.GetFirstData(v, TestStartTime, TestEndTime, Grade); if (d != null) { fdl.Add(d); } }); TargetPortfolio.ProcessMarketData(fdl); TargetPortfolio.PositionList.ForEach(v => { var d = fdl.FirstOrDefault(m => m.InstrumentTicker == v.InstrumentTicker); if (d != null) { v.Cost = d.Close; } }); } if (IsUnlimited) { TargetPortfolio.IsUnlimited = true; } standardPortfolio = TargetPortfolio.Clone() as IPortfolio; testStartValue = TargetPortfolio.CurrentValue; CurrentDataSource.PrepareWork(); CurrentTradeGate.PrepareWork(); foreach (var condition in ConditionList) { condition.PrepareWork(); condition.GetInstrumentList = () => { return(InstrumentList); }; condition.AnalyseDataSource = CurrentDataSource; } TestStrategy.CurrentPortfolio = TargetPortfolio; TestStrategy.PrepareWork(); RiskPolicy.PrepareWork(); }