Exemplo n.º 1
0
        protected void buySecurities(Securities securities, float price, int amount)
        {
            // 1、下单
            Order order = _createOrder(securities, price, amount, OrderType.BUY);

            _notifyTrader(order);

            // 2、修改持仓
            bool updated = false;

            // 修改可用数量
            foreach (EStockHolder shi in this.Desc.Holders)
            {
                if (shi.Symbol == securities.Symbol)
                {
                    shi.IncomeAmount += amount;
                    shi.CostPrice     = 0;
                    updated           = true;

                    PersistenceRequest req = new PersistenceRequest()
                    {
                        Type = PersistenceType.UPDATE, Body = shi
                    };
                    persistenceActor.Tell(req);
                }
            }

            // 新开仓
            if (!updated)
            {
                EStockHolder shi = new EStockHolder()
                {
                    Symbol       = securities.Symbol,
                    Code         = _getCode(securities.Symbol),
                    CostPrice    = price,
                    LastPrice    = price,
                    IncomeAmount = amount,
                    EnableAmount = 0,
                    Strategy     = this.Desc,
                    Name         = securities.Name,
                };
                this.Desc.Holders.Add(shi);
                PersistenceRequest req = new PersistenceRequest()
                {
                    Type = PersistenceType.SAVE, Body = shi
                };
                persistenceActor.Tell(req);
            }
        }
Exemplo n.º 2
0
        public void save_update_load_find_delete_cube()
        {
            PersistenceRequest req = new PersistenceRequest()
            {
                Type = PersistenceType.LIST, Body = "from ECube"
            };

            persistenceActorRef.Tell(req);
            var result0 = ExpectMsg <List <object> >();

            Assert.Equal(0, result0.Count);

            // 先保存Trader
            ETrader trader = new ETrader()
            {
                Username = "******", Password = "******", ServicePwd = "012345678", Path = "c:/xiadan/xiadan.exe", Date = DateTime.Now
            };

            req = new PersistenceRequest()
            {
                Type = PersistenceType.SAVE, Body = trader
            };
            persistenceActorRef.Tell(req);
            var result = ExpectMsg <ETrader>();

            // 保存strategy
            EStrategy strategy = new EStrategy()
            {
                Type = "Quanter.Strategy.XueQiuStrategy.TraceXueQiuStrategyActor, Quanter.Strategy.XueQiuStrategy", Desc = "测试策略", Name = "组合策略DEMO", EnableBalance = 50000, FrozenBalance = 0, Enabled = true, Date = DateTime.Now, Trader = null
            };
            EStockHolder holder = new EStockHolder()
            {
                Strategy = strategy, Code = "000001", Symbol = "000001.XSHE", Name = "平安银行", CostPrice = 11.03f, LastPrice = 12.0f, IncomeAmount = 1000, EnableAmount = 1000
            };
            EStockHolder holder1 = new EStockHolder()
            {
                Strategy = strategy, Code = "000002", Symbol = "000002.XSHE", Name = "万科A", CostPrice = 9.03f, LastPrice = 12.0f, IncomeAmount = 1000, EnableAmount = 1000
            };

            strategy.Holders.Add(holder);
            strategy.Holders.Add(holder1);


            ECube cube = new ECube()
            {
                Strategy        = strategy,
                Symbol          = "ZH000003",
                PreAdjustmentId = 0,
            };

            req = new PersistenceRequest()
            {
                Type = PersistenceType.SAVE, Body = cube
            };
            persistenceActorRef.Tell(req);
            var result2 = ExpectMsg <ECube>();

            Assert.NotEqual(0, result2.Id);
            Assert.Equal(result2.Symbol, "ZH000003");

            req = new PersistenceRequest()
            {
                Type = PersistenceType.LIST, Body = "from ECube"
            };
            persistenceActorRef.Tell(req);
            var result3 = ExpectMsg <List <object> >();

            Assert.NotEqual(0, result3.Count);
            Assert.Equal("ZH000003", ((ECube)result3[0]).Symbol);
        }
Exemplo n.º 3
0
        protected void buySecurities(Securities securities, float price, int amount)
        {
            // 1、下单
            Order order = _createOrder(securities, price, amount, OrderType.BUY);

            _processRisk(order);
            if (order.Amount == 0)
            {
                return;
            }
            _notifyTrader(order);

            // 2、修改持仓
            bool updated = false;

            // 修改可用数量
            foreach (EStockHolder shi in this.Desc.Holders)
            {
                if (shi.Symbol == securities.Symbol)
                {
                    _log.Debug("更新仓位 {0}, {1}, {2}", securities.Symbol, price, amount);
                    shi.IncomeAmount += amount;
                    shi.CostPrice     = 0;
                    updated           = true;

                    PersistenceRequest req = new PersistenceRequest()
                    {
                        Type = PersistenceType.UPDATE, Body = shi
                    };
                    persistenceActor.Tell(req);
                }
            }

            // 新开仓
            if (!updated)
            {
                _log.Debug("新开仓 {0}, {1}, {2}", securities.Symbol, price, amount);
                EStockHolder shi = new EStockHolder()
                {
                    Symbol       = securities.Symbol,
                    Code         = _getCode(securities.Symbol),
                    CostPrice    = price,
                    LastPrice    = price,
                    IncomeAmount = amount,
                    EnableAmount = 0,
                    Strategy     = this.Desc,
                    Name         = LastClosePriceDataHelper.Instance.LastClosePriceDatas[securities.Symbol].Name,
                };
                this.Desc.Holders.Add(shi);
                PersistenceRequest req = new PersistenceRequest()
                {
                    Type = PersistenceType.SAVE, Body = shi
                };
                persistenceActor.Tell(req);

                // 订阅这个股票价格
                AddSecurities(securities);
            }

            // 修改可用资金
            float usedBanlance = price * amount;

            Desc.EnableBalance -= usedBanlance;
            PersistenceRequest req2 = new PersistenceRequest()
            {
                Type = PersistenceType.SAVE, Body = Desc
            };

            persistenceActor.Tell(req2);
        }