public override TradeRecords Execute(string code, Properties strategyParam, BacktestParameter backtestParam, ISeller seller = null) { IndicatorRepository repository = (IndicatorRepository)backtestParam.Get <Object>("repository"); if (repository == null) { return(null); } TimeSerialsDataSet ds = repository[code]; if (ds == null) { return(null); } String modeName = strategyParam.Get <String>("mode"); Mode mode = Mode.Find(modeName); if (mode == null) { return(null); } return(mode.DoBuy(ds, strategyParam, backtestParam)); }
/// <summary> /// 月k /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button13_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 + "..."); KLine monthKline = (KLine)tsd.Create("kline", TimeUnit.month, checkBox2.Checked); } }
public void getAllIndicatorsOK2() { var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); var id = Guid.NewGuid(); var id2 = Guid.NewGuid(); string color = "red"; BaseCondition component = new Condition(); Indicator indicator = new Indicator(); Indicator indicator2 = new Indicator(); indicator.Id = id; indicator.Color = color; indicator.Condition = component; indicatorRepo.Add(indicator); indicatorRepo.Save(); indicator2.Id = id2; indicator2.Color = color; indicator2.Condition = component; indicatorRepo.Add(indicator2); indicatorRepo.Save(); List <Indicator> indicators = indicatorRepo.GetAll().ToList(); Assert.IsTrue(indicators[0].Id == id && indicators[1].Id == id2); }
private void button9_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.month); tsd.FundTrendCreate(Utility.Collections.Time.TimeUnit.month); num += 1; } showText(""); MessageBox.Show("生成完成,共有" + num.ToString() + "个股票生成数据"); }
public void UdateIndicatorStringValeExpresionEqualNotOk() { Guid id = Guid.NewGuid(); string color = "red"; Value izq = new StringValue { Data = "hola" }; Value der = new StringValue { Data = "hola" }; BaseCondition component = new Condition { ValueIzq = izq, ValueDer = der, Operator = "=" }; Indicator indicator = new Indicator { Color = color, Id = id, Condition = component }; var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); IndicatorLogic indicatroLogic = new IndicatorLogic(indicatorRepo); indicatroLogic.Update(indicator); }
public void getAllIndicatorsNotOk() { var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); var id = Guid.NewGuid(); Indicator indicators = indicatorRepo.Get(id); }
public void UpdateAreaNotOk() { List <User> managers = new List <User>(); User user = new User { Id = Guid.NewGuid(), Name = "Santiago", LastName = "Larralde", UserName = "******", Password = "******", }; managers.Add(user); List <Indicator> indicators = new List <Indicator>(); Area area = new Area(); Guid id = Guid.NewGuid(); area.Id = id; area.Name = "name"; area.ConnectionString = "connectionString"; area.Indicators = indicators; var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Area> areaRepo = new AreaRepository(context); IRepository <AreaManager> areaManagerRepo = new AreaManagerRepository(context); IRepository <User> userRepo = new UserRepository(context); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); AreaLogic areaLogic = new AreaLogic(areaRepo, areaManagerRepo, userRepo, indicatorRepo); areaLogic.UpdateArea(area); var areas = areaRepo.GetAll().ToList(); }
public void CreateIndicatorStringValeExpresionEqualOk2() { Guid id = Guid.NewGuid(); string color = "red"; Value izq = new StringValue { Data = "hola" }; Value der = new StringValue { Data = "chau" }; BaseCondition component = new Condition { ValueIzq = izq, ValueDer = der, Operator = "=" }; Indicator indicator = new Indicator { Color = color, Id = id, Condition = component }; var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); IndicatorLogic indicatroLogic = new IndicatorLogic(indicatorRepo); indicatroLogic.Create(indicator); var components = indicatorRepo.GetAll().ToList(); bool res = components[0].Condition.Eval(); Assert.IsTrue(res == false); }
public void BindData() { Indicator indicator = new IndicatorRepository().Get( int.Parse(Request.QueryString["id"])); tbName.Text = indicator.IndicatorName; tbUnit.Text = indicator.IndivatorUnit; SpecialtyControl1.SpecialtyId = indicator.SpecialtyId; }
public IndicatorService(CpfValidate cpfValidate, IndicatorRepository repository, PaymentAccountRepository paymentAccountRepository, SendConfirmAccountCode sendConfirmAccountCode, UserRepository userRepository, SendForgotPassEmail sendForgotPassEmail) { _cpfValidate = cpfValidate; _repository = repository; _paymentAccountRepository = paymentAccountRepository; _sendConfirmMail = sendConfirmAccountCode; _userRepository = userRepository; _sendForgotPassEmail = sendForgotPassEmail; }
protected void btnEdit_Click(object sender, EventArgs e) { bool result = new IndicatorRepository().Add( new Indicator { IndicatorName = tbName.Text, IndivatorUnit = tbUnit.Text }); EditConfirm(result, string.Format("Indicator.aspx?specialtyId={0}", Request.QueryString["specialtyId"])); }
/// <summary> /// 对代码集合进行回测 /// </summary> /// <param name="codes"></param> /// <returns></returns> protected virtual List <TradeRecords> doTestByCodes(List <String> codes) { if (codes == null || codes.Count <= 0) { return(new List <TradeRecords>()); } IndicatorRepository repository = (IndicatorRepository)backtestParam.Get <Object>("repository"); if (repository == null) { return(null); } if (buyer == null || Seller == null) { throw new Exception("买卖策略对象无效"); } List <TradeRecords> allTrades = new List <TradeRecords>(); foreach (String code in codes) { TimeSerialsDataSet ds = repository[code]; if (ds == null) { continue; } TradeRecords tr = buyer.Execute(code, props, backtestParam); if (tr == null || tr.Bouts.Count <= 0) { continue; } seller.Execute(tr, props, backtestParam); //最后删除未完成的回合 tr.RemoveUnCompeletedBouts(); if (tr.Bouts.Count > 0) { allTrades.Add(tr); tr.Print(log, true); //tr.Print(log,backtestParam.Get<bool>("printdetailed",false)); log.Info("总回合数=" + allTrades.Sum(x => x.Bouts.Count).ToString() + "," + "总胜率=" + (allTrades.Sum(x => x.WinCount) * 1.0 / allTrades.Sum(x => x.Bouts.Count)).ToString("F3")); } } return(allTrades); }
public void Register(List <string> instList, object indicatorRep) { indicatorRepository = indicatorRep as IndicatorRepository; //we do not empty instrument list because during load, some instruments are added foreach (string inst in instList) { if (null == FindInstrument(inst)) { instruments.Add(new Instrument(inst)); } } }
public void RemoveIndicatorNotExist() { var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); var id = Guid.NewGuid(); string color = "red"; BaseCondition component = new Condition(); Indicator indicator = new Indicator(); indicator.Id = id; indicator.Color = color; indicator.Condition = component; indicatorRepo.Remove(indicator); indicatorRepo.Save(); }
public UserLogic(IRepository <User> repository) { if (repository == null) { this.userRepository = new UserRepository(ContextFactory.GetNewContext()); this.iRepository = new IndicatorRepository(ContextFactory.GetNewContext()); this.logRepository = new LogRepository(ContextFactory.GetNewContext()); this.userIndicatorRepository = new UserIndicatorRepository(); } else { this.userRepository = repository; this.userIndicatorRepository = new UserIndicatorRepository(); this.iRepository = new IndicatorRepository(ContextFactory.GetNewContext()); this.logRepository = new LogRepository(ContextFactory.GetNewContext()); } }
public void Init(IndicatorRepository repository) { if (repository == null) { return; } for (int i = 0; i < codes.Length; i++) { String code = codes[i]; TimeSerialsDataSet ds = repository[code]; if (ds == null) { return; } bspts[i] = ds.CubePtCreateOrLoad(TimeUnit.day); } }
/// <summary> /// 导入 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { if (repository == null) { repository = new IndicatorRepository(textBox2.Text); repository.Initilization(); } List <SecurityProperties> sps = null; if (radioButton1.Checked) { sps = new SHTrader().LoadStockAInfo(this.textBox1.Text); } else if (radioButton2.Checked) { sps = new SZTrader().LoadStockInfo(this.textBox1.Text, "主板"); } else if (radioButton3.Checked) { sps = new SZTrader().LoadStockInfo(this.textBox1.Text, "创业板"); } else if (radioButton4.Checked) { sps = new SZTrader().LoadStockInfo(this.textBox1.Text, "中小板"); } else { MessageBox.Show("需选择导入类型"); return; } if (sps == null) { MessageBox.Show("没有需要导入的数据"); return; } SecurityPropertiesSet securities = repository.Securities; securities.Merge(sps); repository.SaveSecuritiesInfo(); MessageBox.Show("导入完成"); }
public static Strategy LoadFromDescription(string desc, IndicatorRepository ir, IMarketWatch mw) { int rulesIndex = desc.IndexOf("Rules:"); int instIndex = desc.IndexOf("INST:"); string tfs = desc.Substring(3, instIndex - 3); string[] tfsList = tfs.Replace("(", "").Replace(")", "").Split(' '); Strategy result = new Strategy(ir); result.smallPeriod = int.Parse(tfsList[0]); result.defaultPeriod = int.Parse(tfsList[1]); result.largePeriod = int.Parse(tfsList[2]); string inst = desc.Substring(instIndex + 6, rulesIndex - instIndex - 7); result.defaultInstrument = mw.FindInstrument(inst); if (result.defaultInstrument == null) { throw new Exception("Cannot find strategy instrument"); } rulesIndex = desc.IndexOf('{', rulesIndex); string[] rules = desc.Substring(rulesIndex).Split('{'); foreach (string rule in rules) { if (rule.Length == 0) { continue; } string trule = rule.Substring(0, rule.Length - 1); BaseRule ruleObject = BaseRule.LoadFromDescription(trule); //ruleObject.SetPeriods(result.smallPeriod, result.defaultPeriod, result.largePeriod); result.AddRule(ruleObject); } return(result); }
/// <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 RemoveIndicatorOK() { var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); var id = Guid.NewGuid(); string color = "red"; BaseCondition component = new Condition(); Indicator indicator = new Indicator(); indicator.Id = id; indicator.Color = color; indicator.Condition = component; indicatorRepo.Add(indicator); indicatorRepo.Save(); indicatorRepo.Remove(indicator); indicatorRepo.Save(); var indicators = indicatorRepo.GetAll().ToList(); Assert.AreEqual(indicators.Count, 0); }
public ClientContext() { DefaultAccount = new Account(); PortfolioManager = new PortfolioManager(); GeneticEnvironment = new GeneticEnvironment(); MarketWatch = new MarketWatch(); MarketMeter = new MarketMeter(); PerformanceLogic = new PerformanceLogic(); PositionLogic = new PositionLogic(); StrategyRepository = new StrategyRepository(); IndicatorRepository = new IndicatorRepository(); PersistenceLogic = new PersistenceLogic(); PersistenceLogic.Register(this); //we need marketWatch.Instruments in strategyRep before connecting to server when loading report StrategyRepository.Register(MarketWatch, null); //we need this when loading performance PerformanceLogic.Register(this); }
public void AddIndicatorWithSameId() { var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); var id = Guid.NewGuid(); string color = "red"; BaseCondition component = new Condition(); Indicator indicator = new Indicator(); Indicator indicator2 = new Indicator(); indicator.Id = id; indicator.Color = color; indicator.Condition = component; indicatorRepo.Add(indicator); indicatorRepo.Save(); indicator2.Id = id; indicator2.Color = color; indicator2.Condition = component; indicatorRepo.Add(indicator2); indicatorRepo.Save(); }
/// <summary> /// 生成MACD /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button10_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) { continue; } KLine dayLine = tsd.DayKLine; if (dayLine != null) { tsd.Create("macd", TimeUnit.day, checkBox1.Checked); } KLine weekLine = tsd.WeekKLine; if (weekLine != null) { tsd.Create("macd", TimeUnit.week, checkBox1.Checked); } if (tsd == null || tsd.DayKLine == null || tsd.DayKLine.Count <= 0) { continue; } showText(code + "..."); } }
public void CreateAreaNotOkNullName() { List <User> managers = new List <User>(); List <Indicator> indicators = new List <Indicator>(); Area area = new Area(); Guid id = Guid.NewGuid(); area.Id = id; area.Name = null; area.ConnectionString = "connectionString"; area.Indicators = indicators; var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Area> areaRepo = new AreaRepository(context); IRepository <AreaManager> areaManagerRepo = new AreaManagerRepository(context); IRepository <User> userRepo = new UserRepository(context); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); AreaLogic areaLogic = new AreaLogic(areaRepo, areaManagerRepo, userRepo, indicatorRepo); areaLogic.CreateArea(area); var areas = areaRepo.GetAll().ToList(); }
public void GetIndicatorByIdOK() { string contextName = Guid.NewGuid().ToString(); var context = ContextFactory.GetMemoryContext(contextName); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); var id = Guid.NewGuid(); string color = "red"; BaseCondition component = new Condition(); Indicator indicator = new Indicator(); indicator.Id = id; indicator.Color = color; indicator.Condition = component; indicatorRepo.Add(indicator); indicatorRepo.Save(); context = ContextFactory.GetMemoryContext(contextName); indicatorRepo = new IndicatorRepository(context); Indicator obtainedIndicator = indicatorRepo.Get(id); Assert.AreEqual(obtainedIndicator.Id, indicator.Id); }
public void AddIndicatorOK() { var context = ContextFactory.GetMemoryContext(Guid.NewGuid().ToString()); IRepository <Indicator> indicatorRepo = new IndicatorRepository(context); BaseCondition condition1 = new Condition(); BaseCondition condition2 = new Condition(); BaseCondition condition3 = new Condition(); Indicator indicator = new Indicator() { Name = "Indicator 1", Id = Guid.NewGuid(), GreenCondition = condition1, YellowCondition = condition2, RedCondition = condition3 }; indicatorRepo.Add(indicator); indicatorRepo.Save(); var indicators = indicatorRepo.GetAll().ToList(); Assert.AreEqual(indicators[0].Name, indicator.Name); }
private void button11_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) { continue; } KLine dayLine = tsd.DayKLine; if (dayLine == null) { continue; } MACD macd = (MACD)tsd.Create("macd", TimeUnit.day, false); if (macd == null) { continue; } } }
/// <summary> /// 执行方法 /// </summary> /// <param name="context"></param> public override void Execute(CommandContext context) { logger.Debug("执行命令:" + this.ToString()); //取得参数 everydayLinePath = (String)context.GetExternalValue(everydayLinePath); dayLineReposorityPath = (String)context.GetExternalValue(dayLineReposorityPath); mergeDateString = (String)context.GetExternalValue(mergeDateString); mergeDate = DateUtils.Parse(mergeDateString); logger.Debug("取得参数:源路径=" + everydayLinePath + ",合并路径=" + dayLineReposorityPath + ",日期=" + mergeDateString); if (!everydayLinePath.EndsWith("\\")) { everydayLinePath += "\\"; } if (!dayLineReposorityPath.EndsWith("\\")) { dayLineReposorityPath += "\\"; } IndicatorRepository repository = (IndicatorRepository)context.GetExternalValue("{$repository}"); //检查路径 DirectoryInfo dFromInfo = new DirectoryInfo(everydayLinePath); if (!dFromInfo.Exists) { throw new Exception("单日日线存储路径不存在:" + everydayLinePath); } DirectoryInfo dToInfo = new DirectoryInfo(dayLineReposorityPath); if (!dToInfo.Exists) { throw new Exception("日线存储仓库路径不存在:" + dayLineReposorityPath); } FileInfo[] finfos = dFromInfo.GetFiles("*.txt"); logger.Debug("共有" + (finfos == null ? "0" : finfos.Length.ToString()) + "个单日K线数据待合并..."); foreach (FileInfo fInfo in finfos) { logger.Debug("处理" + fInfo.Name + "..."); String market = fInfo.Name.Substring(0, fInfo.Name.IndexOf("#")); String code = fInfo.Name.substring(0, "#", "."); String[] lines = File.ReadAllLines(fInfo.FullName); for (int i = 0; i < lines.Length; i++) { if (lines[i] == null || lines[i] == "") { continue; } if (!lines[i].Contains(",")) { continue; } String[] ss = lines[i].Trim().Split(','); if (ss == null || ss.Length != 7) { continue; } if (ss[0] == null) { continue; } DateTime d = DateUtils.InitDate; if (!DateUtils.TryParse(ss[0].Trim(), out d)) { continue; } if (d.Date != this.mergeDate.Date) { continue; } KLineItem item = new KLineItem(); item.SetValue <String>(KLineItem.PD_CODE.Name, code); item.SetValue <DateTime>(KLineItem.PD_TIME.Name, d); item.SetValue <double>(KLineItem.PD_OPEN.Name, ConvertUtils.ConvertTo <double>(ss[1].Trim())); item.SetValue <double>(KLineItem.PD_HIGH.Name, ConvertUtils.ConvertTo <double>(ss[2].Trim())); item.SetValue <double>(KLineItem.PD_LOW.Name, ConvertUtils.ConvertTo <double>(ss[3].Trim())); item.SetValue <double>(KLineItem.PD_CLOSE.Name, ConvertUtils.ConvertTo <double>(ss[4].Trim())); item.SetValue <double>(KLineItem.PD_VOLUMN.Name, ConvertUtils.ConvertTo <double>(ss[5].Trim())); item.SetValue <double>(KLineItem.PD_TURNOVER.Name, ConvertUtils.ConvertTo <double>(ss[6].Trim())); TimeSerialsDataSet ds = repository[code]; if (ds == null) { continue; } ds.DayKLine[d.Date] = item; ds.Save("kline", TimeUnit.day); logger.Debug("合并到" + market.ToUpper() + code + ".csv"); } } }
public override bool DoSell(string code, TradeBout bout, DateTime d, Properties strategyParam, BacktestParameter backtestParam, out string reason) { reason = ""; if (bout == null) { return(false); } IndicatorRepository repository = (IndicatorRepository)backtestParam.Get <Object>("repository"); if (repository == null) { return(false); } TimeSerialsDataSet ds = repository[bout.Code]; if (ds == null) { return(false); } KLine kline = ds.DayKLine; if (kline == null) { return(false); } //跳过已完成的 if (bout.Completed) { return(false); } TimeSeries <ITimeSeriesItem <char> > btpoints = ds.DayTradeLine.buysellPoints; if (btpoints == null || btpoints.Count <= 0) { return(false); } ITimeSeriesItem <char> item = btpoints[d]; if (item == null || item.Value == 'B') { return(false); } KLineItem klineItemDay = kline[d]; if (klineItemDay == null) { return(false); } double price = klineItemDay.CLOSE; //if (price < bout.BuyInfo.TradePrice) // return true; int amount = bout.BuyInfo.Amount; bout.RecordTrade(2, klineItemDay.Date, TradeDirection.Sell, price, amount, backtestParam.Volumecommission, backtestParam.Stampduty, "日线出S点"); 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()); } }
public IEnumerable <Indicator> GetAllWithObjectTypeAndScore() { var repo = new IndicatorRepository(new DatabaseFactory()); return(repo.GetAllWithObjectTypeAndScore()); }
public override List <TradeInfo> DoBuy(Properties strategyParam, DateTime d, StrategyContext context) { //取得行情库 IndicatorRepository repository = (IndicatorRepository)context.Get <Object>("repository"); if (repository == null) { return(null); } //读取代码 List <String> codes = LoadCodes(strategyParam, context); if (codes == null || codes.Count <= 0) { return(null); } //取得策略参数 double p_mainforcelow = strategyParam.Get <double>("mainforcelow"); int p_monthbutpt = strategyParam.Get <int>("monthbutpt", 0); //double p_mainforceclimb = strategyParam.Get<double>("mainforceclimb"); double p_mainforceslope = strategyParam.Get <double>("mainforceslope"); int p_mainforcerough = strategyParam.Get <int>("mainforcerough"); int p_buypointdays = strategyParam.Get <int>("buypointdays"); int p_maxbuynum = strategyParam.Get <int>("maxbuynum"); GetInMode p_fundpergetin = GetInMode.Parse(strategyParam.Get <String>("getinMode")); GrailParameter p_grail = GrailParameter.Parse(strategyParam.Get <String>("grail")); double stampduty = context.Get <double>("stampduty"); double volumecommission = context.Get <double>("volumecommission"); List <TradeInfo> results = new List <TradeInfo>(); //遍历 foreach (String code in codes) { TimeSerialsDataSet ds = repository[code]; if (ds == null) { continue; } KLine klineDay = ds.DayKLine; if (klineDay == null) { continue; } KLineItem klineItemDay = klineDay[d]; if (klineItemDay == null) { continue; } TimeSeries <ITimeSeriesItem <List <double> > > fundDay = ds.DayFundTrend; if (fundDay == null) { continue; } ITimeSeriesItem <List <double> > fundItemDay = fundDay[d]; if (fundItemDay == null) { continue; } int index = fundDay.IndexOf(fundItemDay); if (index <= 0) { continue; } ITimeSeriesItem <List <double> > prevfundItemDay = fundDay[index - 1]; if (!p_grail.CanBuy(d, code)) //大盘禁止买入的跳过 { continue; } if (p_mainforcelow > 0)//判断主力线上穿p_mainforcelow { if (fundItemDay.Value[0] < p_mainforcelow) { continue; } if (prevfundItemDay.Value[0] > p_mainforcelow) { continue; } } if (p_mainforceslope > 0) //判断主力线上升速度超过p_mainforceslope { if (fundItemDay.Value[0] - prevfundItemDay.Value[0] < p_mainforceslope) { continue; } } TradeInfo tradeInfo = new TradeInfo() { Direction = TradeDirection.Buy, Code = code, Amount = (int)(p_fundpergetin.Value / klineItemDay.CLOSE), EntrustPrice = klineItemDay.CLOSE, EntrustDate = d, TradeDate = d, TradePrice = klineItemDay.CLOSE, Stamps = stampduty, Fee = volumecommission, TradeMethod = TradeInfo.TM_AUTO, Reason = (p_mainforcelow <= 0 ? "" : "[主力线低位" + p_mainforcelow.ToString("F2") + "]") + (p_mainforceslope <= 0 ? "" : "[主力线上升速度超过" + p_mainforceslope.ToString("F2") + "]") }; results.Add(tradeInfo); } return(results); }