コード例 #1
0
ファイル: CoinTrader.cs プロジェクト: lulzzz/CryBot
        private async Task UpdateTrades()
        {
            List <Trade> newTrades = new List <Trade>();

            if (Trades.Count == 0)
            {
                Trades.Add(new Trade {
                    Status = TradeStatus.Empty
                });
            }
            foreach (var trade in Trades.Where(t => t.Status != TradeStatus.Completed))
            {
                var newTrade = await UpdateTrade(trade);

                if (newTrade != Trade.Empty)
                {
                    newTrades.Add(newTrade);
                }
            }

            if (newTrades.Count > 0)
            {
                Trades.AddRange(newTrades);
            }

            var canceledTrades = Trades.Where(t => t.Status == TradeStatus.Canceled).ToList();

            foreach (var canceledTrade in canceledTrades)
            {
                Trades.Remove(canceledTrade);
            }
        }
コード例 #2
0
        /// <summary>Display the trades grid context menu</summary>
        private void ShowContextMenu(DataGridView_.HitTestInfo hit, Trade trade, Order order)
        {
            var cmenu = new ContextMenuStrip();

            if (trade != null)
            {
                var opt = cmenu.Items.Add2(new ToolStripMenuItem("Delete Trade"));
                opt.Enabled =
                    !Bit.AnySet(trade.State, Trade.EState.PendingOrder | Trade.EState.ActivePosition);
                opt.ToolTipText =
                    Bit.AnySet(trade.State, Trade.EState.PendingOrder | Trade.EState.ActivePosition) ? "Cannot delete trades with active or pending orders" :
                    string.Empty;
                opt.Click += (s, a) =>
                {
                    Orders.RemoveAll(trade.Orders);
                    Trades.Remove(trade);
                };
            }
            if (order != null)
            {
                var opt = cmenu.Items.Add2(new ToolStripMenuItem("Delete Order"));
                opt.Enabled =
                    !Bit.AnySet(order.State, Trade.EState.PendingOrder | Trade.EState.ActivePosition);
                opt.ToolTipText =
                    Bit.AnySet(order.State, Trade.EState.PendingOrder | Trade.EState.ActivePosition) ? "Cannot delete trades with active or pending orders" :
                    string.Empty;
                opt.Click += (s, a) =>
                {
                    Orders.Remove(order);
                };
            }
            cmenu.Items.TidySeparators();
            cmenu.Show(m_grid, hit.GridPoint);
        }
コード例 #3
0
 public void RemoveTrade()
 {
     DataConnection.RemoveTrade(SelectedTrade.Id);
     _unfilteredTrades.Remove(SelectedTrade);
     Trades.Remove(SelectedTrade);
     PropertyChanged.Raise(this, nameof(Trades));
     UpdateDateRange();
 }
コード例 #4
0
        /// <summary>
        /// Clears the state items associated with an inactive thrust.
        /// </summary>
        /// <param name="chart">The chart containing the thrust pattern to be purged.</param>
        /// <param name="thrust">The inactive thrust pattern to be purged.</param>
        /// <returns></returns>
        protected virtual async Task PurgeThrust(Chart chart, Thrust thrust)
        {
            // kill and save the signal
            MCE.Signal signal = await SubscriptionCaller.Instance().GetSignalAsync(thrust.SignalID);

            signal.Active = false;
            await SubscriptionCaller.Instance().UpdateSignalAsync(signal);

            // clear the chart
            chart.Patterns.RemoveAll(p => p.Type == MACC.Constants.SignalType.Thrust);
            Orders.Remove(Orders.FirstOrDefault(o => ((MarketMinerOrder)o).SignalID == signal.SignalID));
            Trades.Remove(Trades.FirstOrDefault(t => ((MarketMinerTrade)t).SignalID == signal.SignalID));
        }
コード例 #5
0
ファイル: InMemoryDataStore.cs プロジェクト: zokocx/Mynt
        public Task SaveTradeAsync(Trade trade)
        {
            var items = Trades.Where(x => x.Id == trade.Id).ToList();

            if (items.Count > 0)
            {
                foreach (var item in items)
                {
                    Trades.Remove(item);
                }

                Trades.Add(trade);
            }
            else
            {
                Trades.Add(trade);
            }

            return(Task.FromResult(true));
        }
コード例 #6
0
ファイル: BrokerAccount.cs プロジェクト: Hallupa/CommonCode
 public void RemoveTrade(Trade tradeDetails)
 {
     Trades.Remove(tradeDetails);
     _brokerAccountUpdatedSubject.OnNext(new BrokerAccountUpdated(this));
 }
コード例 #7
0
        /// <summary>
        /// Processes the Spark update event provided in the EventFeedArgs and updates security properties based on the event type
        /// </summary>
        /// <param name="sender">Event sender</param>
        /// <param name="eventFeedArgs">Event feed args</param>
        internal void EventReceived(object sender, EventFeedArgs eventFeedArgs)
        {
            //Process event
            Spark.Event eventItem = eventFeedArgs.Event;
            switch (eventItem.Type)
            {
            //Depth update
            case Spark.EVENT_NEW_DEPTH:
            case Spark.EVENT_AMEND_DEPTH:
            case Spark.EVENT_DELETE_DEPTH:

                //Check if exchange order book exists and create if it doesn't
                LimitOrderBook orderBook;
                if (!OrderBooks.TryGetValue(eventFeedArgs.Exchange, out orderBook))
                {
                    orderBook = new LimitOrderBook(eventFeedArgs.Symbol, eventFeedArgs.Exchange);
                    OrderBooks.Add(eventFeedArgs.Exchange, orderBook);
                }

                //Submit update to appropriate exchange order book
                orderBook.SubmitEvent(eventItem);
                if (OnDepthUpdate != null)
                {
                    OnDepthUpdate(this, new GenericEventArgs <LimitOrderBook>(eventFeedArgs.TimeStamp, orderBook));
                }
                break;

            //Trade update
            case Spark.EVENT_TRADE:

                //Create and store trade record
                Trade trade = eventItem.ToTrade(eventFeedArgs.Symbol, eventFeedArgs.Exchange, eventFeedArgs.TimeStamp);
                Trades.Add(trade);
                if (OnTradeUpdate != null)
                {
                    OnTradeUpdate(this, new GenericEventArgs <Trade>(eventFeedArgs.TimeStamp, trade));
                }
                break;

            //Trade cancel
            case Spark.EVENT_CANCEL_TRADE:

                //Find original trade in trade record and delete
                Trade cancelledTrade = eventItem.ToTrade(eventFeedArgs.TimeStamp);
                Trade originalTrade  = Trades.Find(x => (x.TimeStamp == cancelledTrade.TimeStamp && x.Price == cancelledTrade.Price && x.Volume == cancelledTrade.Volume));
                if (originalTrade != null)
                {
                    Trades.Remove(originalTrade);
                }
                break;

            //Market state update
            case Spark.EVENT_STATE_CHANGE:
                State = ApiFunctions.ConvertToMarketState(eventItem.State);
                if (OnMarketStateUpdate != null)
                {
                    OnMarketStateUpdate(this, new GenericEventArgs <MarketState>(eventFeedArgs.TimeStamp, State));
                }
                break;

            //Market quote update (change to best market bid-ask prices)
            case Spark.EVENT_QUOTE:
                if (OnQuoteUpdate != null)
                {
                    LimitOrderBook depth = OrderBooks[eventFeedArgs.Exchange];
                    MarketQuote    quote = new MarketQuote(eventFeedArgs.Symbol, eventFeedArgs.Exchange, depth.BidPrice, depth.AskPrice, eventFeedArgs.TimeStamp);
                    OnQuoteUpdate(this, new GenericEventArgs <MarketQuote>(eventFeedArgs.TimeStamp, quote));
                }
                break;

            //IAP (Indicative Auction Price) Update
            case Spark.EVENT_AUCTION_PRICE:
                break;

            default:
                //Console.WriteLine(eventItem.ToOutputString());
                break;
            }
        }