Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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() + "个股票生成数据");
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 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);
 }
Ejemplo n.º 7
0
        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();
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
 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;
 }
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 11
0
 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"]));
 }
Ejemplo n.º 12
0
        /// <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);
        }
Ejemplo n.º 13
0
        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));
                }
            }
        }
Ejemplo n.º 14
0
        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();
        }
Ejemplo n.º 15
0
 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());
     }
 }
Ejemplo n.º 16
0
 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);
     }
 }
Ejemplo n.º 17
0
        /// <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("导入完成");
        }
Ejemplo n.º 18
0
        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);
        }
Ejemplo n.º 19
0
 /// <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);
     }
 }
Ejemplo n.º 20
0
        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);
        }
Ejemplo n.º 21
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);
        }
Ejemplo n.º 22
0
        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();
        }
Ejemplo n.º 23
0
        /// <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 + "...");
            }
        }
Ejemplo n.º 24
0
        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();
        }
Ejemplo n.º 25
0
        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);
        }
Ejemplo n.º 26
0
        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);
        }
Ejemplo n.º 27
0
        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;
                }
            }
        }
Ejemplo n.º 28
0
        /// <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");
                }
            }
        }
Ejemplo n.º 29
0
        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);
        }
Ejemplo n.º 30
0
        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());
        }
Ejemplo n.º 32
0
        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);
        }