private void RaiseNewMyTrade(MyTrade trade) { this.AddInfoLog("New own trade: {0}", trade); NewMyTrade?.Invoke(trade); NewMyTrades?.Invoke(new[] { trade }); }
private void RaiseNewMyTrade(MyTrade trade) { NewMyTrade.SafeInvoke(trade); var multiEvt = NewMyTrades; if (multiEvt == null) { return; } multiEvt.SafeInvoke(new[] { trade }); }
internal void OnAddMyTrade(string portfolio, string securityId, string orderId, double price, double amount, DateTime time, string tradeNo) { NewMyTrade.SafeInvoke(portfolio, securityId, orderId.To <long>(), price.ToDecimal(), amount.Abs().ToDecimal(), time, tradeNo.To <long>()); }
private void RaiseNewMyTrade(MyTrade trade) { NewMyTrade?.Invoke(trade); NewMyTrades?.Invoke(new[] { trade }); }
public Order Create(string data) { var jt = JToken.Parse(data); var stateQuery = GetValueByKey <string>(StatusPath, jt); var channelData = GetValueByKey <string>(NamePath, jt).Split('_'); var channel = channelData[1]; var numberUser = GetValueByKey <int>(NumberPath, jt); var order = _myOrders.Find(o => o.NumberUser == numberUser); if (order == null) { return(null); } var innerData = jt.SelectToken(DataPath); if (channel == "order") { if (stateQuery == "True") { order.State = OrderStateType.Activ; order.NumberMarket = innerData["entrustId"].Value <string>(); NewTrackedOrder?.Invoke(order); } else { order.State = OrderStateType.Fail; } } else if (channel == "getorder") { var state = innerData["status"].Value <string>(); var time = TimeManager.GetDateTimeFromTimeStamp(innerData["trade_date"].Value <long>()); if (state == "3") { order.State = OrderStateType.Activ; order.TimeCreate = time; } if (state == "0") { order.State = OrderStateType.Patrial; } else if (state == "1") { order.State = OrderStateType.Cancel; DeleteOrder(order); } else if (state == "2") { order.State = OrderStateType.Done; DeleteOrder(order); } var tradeVolume = innerData["trade_amount"].Value <decimal>(); var volumeExecute = order.VolumeExecute; if (tradeVolume > volumeExecute) { NewMyTrade?.Invoke(CreateMyTrade(innerData, order, tradeVolume - volumeExecute)); } } return(order); }
private void NewMyTradeHandler(MyTrade trade) { AddGuiAction(() => NewMyTrade.SafeInvoke(trade)); }
public Order Create(string data) { var jt = JToken.Parse(data)["params"]; var stateQuery = jt[0].Value <int>(); var channelData = jt[1]; var order = new Order(); order.NumberUser = Convert.ToInt32(channelData["text"].Value <string>().Split('-')[1]); order.NumberMarket = channelData["id"].Value <string>(); order.SecurityNameCode = channelData["market"].Value <string>(); order.Price = channelData["price"].Value <decimal>(); order.Volume = channelData["amount"].Value <decimal>(); order.Side = channelData["type"].Value <int>() == 2 ? Side.Buy : Side.Sell; order.TypeOrder = OrderPriceType.Limit; order.TimeCreate = TimeManager.GetDateTimeFromTimeStampSeconds(channelData["ctime"].Value <long>()); order.PortfolioNumber = _portfolioNumber; var filledAmount = channelData["filledAmount"].Value <decimal>(); if (filledAmount != 0) { if (!_myOrderVolumes.ContainsKey(order.NumberMarket)) { if (filledAmount != order.Volume) { _myOrderVolumes.Add(order.NumberMarket, filledAmount); } NewMyTrade?.Invoke(CreateMyTrade(channelData, order, filledAmount)); } else { var needVolume = _myOrderVolumes[order.NumberMarket]; if (filledAmount > needVolume) { var currentTradeVolume = filledAmount - needVolume; _myOrderVolumes[order.NumberMarket] += currentTradeVolume; NewMyTrade?.Invoke(CreateMyTrade(channelData, order, currentTradeVolume)); } } } if (stateQuery == 1) { order.State = OrderStateType.Activ; } if (stateQuery == 3 && filledAmount == order.Volume) { order.State = OrderStateType.Done; _myOrderVolumes.Remove(order.NumberMarket); } if (stateQuery == 3 && filledAmount == 0) { order.State = OrderStateType.Cancel; } return(order); }