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); } }
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); }
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); }