private void button7_Click(object sender, EventArgs e) { if (repository == null) { repository = new IndicatorRepository(textBox2.Text); repository.Initilization(); } SecurityPropertiesSet securities = repository.Securities; List <String> codes = securities.Codes; int num = 0; foreach (String code in codes) { if (code == null || code == "") { continue; } TimeSerialsDataSet tsd = repository[code]; if (tsd == null || tsd.DayKLine == null || tsd.DayKLine.Count <= 0) { continue; } showText(code + "..."); tsd.CubeCreate(Utility.Collections.Time.TimeUnit.day); tsd.FundTrendCreate(Utility.Collections.Time.TimeUnit.day); tsd.CubeCreate(Utility.Collections.Time.TimeUnit.week); tsd.FundTrendCreate(Utility.Collections.Time.TimeUnit.week); num += 1; } showText(""); MessageBox.Show("生成完成,共有" + num.ToString() + "个股票生成数据"); }
/// <summary> /// 生成指标数据 /// </summary> /// <returns></returns> public bool doGenerateIndicator() { showBeginMessage("开始生成指标..."); if (repository == null) { repository = new IndicatorRepository(FileUtils.GetDirectory(props.Get <String>("repository"))); repository.Initilization(); } try { List <String> codes = repository.Securities.Codes; foreach (String code in codes) { TimeSerialsDataSet ds = repository[code]; if (ds == null) { continue; } showProgressMessage(code); KLine kline = ds.DayKLine; TradingLine tradeLine = ds.DayTradeLine; ds.Create("kline", TimeUnit.week); ds.Create("kline", TimeUnit.month); ds.CubeCreate(); ds.CubeCreate(TimeUnit.week); ds.CubeCreate(TimeUnit.month); ds.FundTrendCreate(TimeUnit.day); ds.FundTrendCreate(TimeUnit.week); ds.FundTrendCreate(TimeUnit.month); ds.FundTrendCrossCreate(TimeUnit.day); ds.FundTrendCrossCreate(TimeUnit.week); ds.FundTrendCrossCreate(TimeUnit.month); } showResultMessage(""); return(true); } catch (Exception e) { showResultMessage("生成指标失败", -1, e.Message); return(false); } }
public void Execute() { List <String> codes = new List <string>(); System.IO.File.ReadAllLines(FileUtils.GetDirectory() + "test.csv") .ToList().ForEach(x => codes.Add(x.Split(',')[1])); IndicatorRepository repository = new IndicatorRepository("d:\\repository\\"); repository.Initilization(); foreach (String code in codes) { //生成数据 TimeSerialsDataSet ds = repository[code]; KLine dayLine = ds.DayKLine; KLine weekLine = dayLine.CreateWeek(); ds.WeekKLine = weekLine; TimeSeries <ITimeSeriesItem <double> > dayClose = dayLine.Select <double>("close", 0, 0); TimeSeries <ITimeSeriesItem <double> > weekClose = weekLine.Select <double>("close", 0, 0); TradingLine dayTradeLine = ds.CubeCreateOrLoad(TimeUnit.day); TradingLine weekTradeLine = ds.CubeCreateOrLoad(TimeUnit.week); TimeSeries <ITimeSeriesItem <List <double> > > dayFunds = ds.FundTrendCreate(TimeUnit.day); TimeSeries <ITimeSeriesItem <List <double> > > weekFunds = ds.FundTrendCreate(TimeUnit.week); TimeSeries <ITimeSeriesItem <double> > dayCross = ds.FundTrendCrossCreateOrLoad(TimeUnit.day); TimeSeries <ITimeSeriesItem <double> > weedCross = ds.FundTrendCrossCreateOrLoad(TimeUnit.week); //测试买入 List <TradeBout> bouts = new List <TradeBout>(); TimeSeries <ITimeSeriesItem <char> > dayTradePt = dayTradeLine.buysellPoints; for (int i = 0; i < dayTradePt.Count; i++) { ITimeSeriesItem <char> item = dayTradePt[i]; if (item.Value == 'S') { continue; } if (item.Date < begin || item.Date > end) { continue; } DateTime buyPtDate = item.Date; int index = dayFunds.IndexOf(buyPtDate); while (index <= dayFunds.Count) { ITimeSeriesItem <List <double> > fundItem = dayFunds[index]; if (fundItem == null) { index += 1; continue; } if (fundItem.Value[0] <= fundItem.Value[1]) { index += 1; continue; } TradeBout bout = new TradeBout(code); KLineItem klineItem = dayLine.GetNearest(fundItem.Date, false); if (klineItem == null) { index += 1; continue; } bout.RecordTrade(1, klineItem.Date, TradeDirection.Buy, klineItem.CLOSE, (int)(funds / klineItem.CLOSE), 0, 0, "发出B点且主力=" + fundItem.Value[0].ToString("F3") + "大于散户" + fundItem.Value[1].ToString("F3") + ",日期=" + fundItem.Date.ToString("yyyyMMdd")); bouts.Add(bout); break; } } //测试卖出 for (int i = 0; i < bouts.Count; i++) { DateTime buyDate = bouts[i].BuyInfo.TradeDate; int buyIndex = dayLine.IndexOf(buyDate); int index = buyIndex + 1; while (index <= dayLine.Count - 1) { KLineItem item = dayLine[index]; if (index - buyIndex >= maxdays) { bouts[i].RecordTrade(2, item.Date, TradeDirection.Sell, item.CLOSE, bouts[i].BuyInfo.Amount, 0, 0, "大于" + maxdays.ToString() + "天卖出"); break; } else { double profile = (item.HIGH - bouts[i].BuyInfo.TradePrice) / bouts[i].BuyInfo.TradePrice; if (profile >= maxProfilt) { bouts[i].RecordTrade(2, item.Date, TradeDirection.Sell, (bouts[i].BuyInfo.TradePrice * (1 + maxProfilt)), bouts[i].BuyInfo.Amount, 0, 0, "利润大于" + maxdays.ToString() + "天卖出"); break; } } index += 1; } } //去掉未完成的 for (int i = 0; i < bouts.Count; i++) { if (!bouts[i].Completed) { bouts.RemoveAt(i--); } } TradeRecords tradeRecords = new TradeRecords(); tradeRecords.Bouts.AddRange(bouts); //打印结果 for (int i = 0; i < bouts.Count; i++) { Console.WriteLine(bouts[i].ToString()); } Console.WriteLine(tradeRecords.ToString()); } }