public void InsertTest() { var trade = new TradeBook(); trade.BuyOrderId = "235245213353431"; trade.BuyPrice = 13; trade.BuyVolume = 1; trade.BuyTradeVolume = 0; trade.BuyTradePrice = 0; trade.BuyTradeAmount = 0; trade.SellOrderId = ""; trade.SellPrice = 3; trade.SellVolume = 0; trade.SellTradeVolume = 0; trade.SellTradePrice = 0; trade.SellTradeAmount = 0; trade.Profit = 1; trade.Status = TradeStatus.买单中.ToString(); trade.UpdateDate = DateTime.Now.ToString(); trade.CreateDate = DateTime.Now.ToString(); var result = TradeBookRepository.CrateOrder(trade); //var result = TradeBookRepository.CreateTradeBook2(trade); Assert.IsTrue(result == 1); }
/// <summary> /// 创建交易订单 /// </summary> /// <param name="currency">交易货币类型</param> /// <param name="price">价格</param> /// <param name="volume">交易量</param> /// <param name="profitPrice">利润单价</param> /// <returns></returns> public static bool CreateTrade(CurrencyType currency, decimal price, decimal volume, decimal profitPrice) { if (volume * price > 10) { throw new Exception("主人很穷,测试下单就不要搞那么大数据了吧!"); } var tradeId = 0; var result = new ResponseModel() { Code = "1000" }; //TradeServices.Order(price, volume, TradeType.buy, currency); if (result.Code == "1000") { var tradeBook = new TradeBook(); tradeBook.BuyOrderId = result.Id; tradeBook.BuyPrice = price; tradeBook.BuyVolume = volume; tradeBook.BuyTradeAmount = volume * price; tradeBook.BuyTradePrice = 0; tradeBook.BuyTradeVolume = 0; tradeBook.SellOrderId = ""; tradeBook.SellPrice = 0; tradeBook.SellVolume = 0; tradeBook.SellTradeAmount = 0; tradeBook.SellTradeVolume = 0; tradeBook.SellTradePrice = 0; tradeBook.Profit = profitPrice; tradeBook.Status = TradeStatus.买单中.ToString(); tradeBook.UpdateDate = DateTime.Now.ToString(); tradeBook.CreateDate = DateTime.Now.ToString(); tradeId = TradeBookRepository.CrateOrder(tradeBook); } return(result.Code == "1000" && tradeId > 0); }
/// <summary> /// 创建TradeBook /// </summary> /// <param name="model"></param> /// <returns></returns> public static int CrateOrder(TradeBook model) { var sql = $@"INSERT INTO TradeBook(TradeId,BuyOrderId,BuyPrice,BuyVolume,BuyTradeVolume,BuyTradePrice,BuyTradeAmount,SellOrderId,SellPrice,SellVolume,SellTradeVolume,SellTradePrice,SellTradeAmount,Profit,Status,UpdateDate,CreateDate) VALUES(NULL,'{model.BuyOrderId}',{model.BuyPrice},{model.BuyVolume},{model.BuyTradeVolume},{model.BuyTradePrice},{model.BuyTradeAmount},'{model.SellOrderId}',{model.SellPrice},{model.SellVolume},{model.SellTradeVolume},{model.SellTradePrice},{model.SellTradeAmount},{model.Profit},'{model.Status}','{model.UpdateDate}','{model.CreateDate}')"; return(DataProvider.GetConnection().Execute(sql)); }
private void printTradingLog(TradeBook trade, List <OrderBook> orderBook, StockTickTransaction tickData) { //foreach (var order in orderBook) //{ // if (trade.orderId==order.orderId) // { // Console.WriteLine("成交时间:{0},挂单时间:{1},成交量:{2},成交价:{3},ask1:{4},bid1:{5},lp:{6}", trade.time, order.time, trade.volume, trade.price, tickData.Ask1, tickData.Bid1, tickData.LastPrice); // } //} }
static void Main(string[] args) { TextBook t1 = new TextBook(10, "Man", 23.3); Console.WriteLine(t1.takeprice()); t1.Show(); TradeBook t2 = new TradeBook(20, "Month", 23.3); Console.WriteLine(t2.takeprice()); t2.Show(); }
//按盘口价格模拟成交 private void transactionSimulation(ref List <OrderBook> orderBook, ref List <TradeBook> tradeBook, StockTickTransaction tickData) { //如果orderbook上的挂单时间早于tickData数据的时间,认为orderbook的挂单完全成交。 for (int i = 0; i < orderBook.Count(); i++) { var order = orderBook[i]; if (order.time < tickData.TransactionDateTime) { if (order.price <= tickData.Bid1 && order.volume > 0) //若order的卖价小于等于bid1的价格,认为其在该时刻已经成交了。 { //记录成交信息 TradeBook trade = new TradeBook(); trade.tradeId = tradeId; tradeId += 1; trade.time = tickData.TransactionDateTime; trade.price = order.price; trade.volume = order.volume; trade.orderId = order.orderId; //刷新orderbook情况 UpdateOrderBookWaitingVolume(order.price, orderBook[i].waitingVolume + orderBook[i].volume, i + 1, ref orderBook); order.waitingVolume = 0; order.volume = 0; tradeBook.Add(trade); printTradingLog(trade, orderBook, tickData); } } } //如果orderbook上的挂单时间等于或者晚于tickData数据的时间,按照盘口成交,并减少盘口的量。 var summary = getOrderBookSummary(orderBook);//先汇总挂单价格 //按挂单价格遍历 foreach (var price in summary.Keys) { for (int i = 0; i < orderBook.Count(); i++)//按order挂单的先后顺序成交 { int tradableVolume = getTradableVolumeFromMarket(tickData, price); int tradedVolume = 0; if (tradableVolume <= 0) { break; } var order = orderBook[i]; if (orderBook[i].volume == 0 || orderBook[i].price != price) { continue; } //先成交他人的订单 if (tradableVolume <= orderBook[i].waitingVolume) { //无法成交 UpdateOrderBookWaitingVolume(price, tradableVolume, i, ref orderBook); tradedVolume = tradableVolume; tradableVolume = 0; UpdateTickData(ref tickData, tradedVolume); break; } //再成交策略的挂单 else if (tradableVolume <= orderBook[i].waitingVolume + orderBook[i].volume) { //部分成交 UpdateOrderBookWaitingVolume(price, tradableVolume, i + 1, ref orderBook); TradeBook trade = new TradeBook(); trade.tradeId = tradeId; tradeId += 1; trade.time = tickData.TransactionDateTime; trade.price = price; trade.volume = tradableVolume - orderBook[i].waitingVolume; trade.orderId = orderBook[i].orderId; UpdateOrderBookWaitingVolume(price, tradableVolume, i + 1, ref orderBook); orderBook[i].volume -= tradableVolume - orderBook[i].waitingVolume; orderBook[i].waitingVolume = 0; tradedVolume = tradableVolume; UpdateTickData(ref tickData, tradedVolume); tradableVolume = 0; tradeBook.Add(trade); printTradingLog(trade, orderBook, tickData); break; } else { //完全成交 UpdateOrderBookWaitingVolume(price, orderBook[i].waitingVolume + orderBook[i].volume, i + 1, ref orderBook); TradeBook trade = new TradeBook(); trade.code = code; trade.tradeId = tradeId; tradeId += 1; trade.time = tickData.TransactionDateTime; trade.price = price; trade.volume = orderBook[i].volume; trade.orderId = orderBook[i].orderId; UpdateOrderBookWaitingVolume(price, tradableVolume, i + 1, ref orderBook); tradedVolume = orderBook[i].waitingVolume + orderBook[i].volume; orderBook[i].volume = 0; orderBook[i].waitingVolume = 0; UpdateTickData(ref tickData, tradedVolume); tradableVolume -= tradedVolume; tradeBook.Add(trade); printTradingLog(trade, orderBook, tickData); } } } }
public TradeBook getTradeBook() { TradeBook ret = new TradeBook(ContextModulePINVOKE.Portfolio_getTradeBook(swigCPtr), false); return ret; }
internal static HandleRef getCPtr(TradeBook obj) { return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr; }
public TradeBook getTradeBook() { TradeBook ret = new TradeBook(ContextModulePINVOKE.Portfolio_getTradeBook(swigCPtr), false); return(ret); }
/// <summary> /// 自动卖单 /// </summary> /// <param name="model"></param> /// <returns></returns> public static int UpdateOrder(TradeBook model) { var sql = $@"UPDATE TradeBook SET BuyTradeVolume={model.BuyTradeVolume},BuyTradePrice={model.BuyTradePrice}, BuyTradeAmount={model.BuyTradeAmount},SellOrderId='{model.SellOrderId}',SellPrice={model.SellPrice},SellVolume={model.SellVolume},SellTradeVolume={model.SellTradeVolume},SellTradePrice={model.SellTradePrice},SellTradeAmount={model.SellTradeAmount},Status='{model.Status}',UpdateDate='{DateTime.Now}' WHERE TradeId={model.TradeId}"; return(DataProvider.GetConnection().Execute(sql)); }
internal static HandleRef getCPtr(TradeBook obj) { return((obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr); }