コード例 #1
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="session"></param>
 public ResponseListener(O2GSession session)
 {
     mSession           = session;
     mRequestID         = string.Empty;
     mResponse          = null;
     mOrderMonitor      = null;
     mSyncResponseEvent = new EventWaitHandle(false, EventResetMode.AutoReset);
 }
コード例 #2
0
        private void PrintMonitorResult(OrderMonitor orderMonitor)
        {
            if (orderMonitor != null)
            {
                OrderMonitor.ExecutionResult           result = orderMonitor.Result;
                ReadOnlyCollection <O2GTradeRow>       trades;
                ReadOnlyCollection <O2GClosedTradeRow> closedTrades;
                O2GOrderRow order   = orderMonitor.Order;
                String      orderID = order.OrderID;
                trades       = orderMonitor.Trades;
                closedTrades = orderMonitor.ClosedTrades;

                switch (result)
                {
                case OrderMonitor.ExecutionResult.Canceled:
                    if (trades.Count > 0)
                    {
                        PrintTrades(trades, orderID);
                        PrintClosedTrades(closedTrades, orderID);
                        Console.WriteLine("A part of the order has been canceled. Amount = {0}", orderMonitor.RejectAmount);
                    }
                    else
                    {
                        Console.WriteLine("The order: OrderID = {0}  has been canceled.", orderID);
                        Console.WriteLine("The cancel amount = {0}.", orderMonitor.RejectAmount);
                    }
                    break;

                case OrderMonitor.ExecutionResult.FullyRejected:
                    Console.WriteLine("The order has been rejected. OrderID = {0}", orderID);
                    Console.WriteLine("The rejected amount = {0}", orderMonitor.RejectAmount);
                    Console.WriteLine("Rejection cause: {0}", orderMonitor.RejectMessage);
                    break;

                case OrderMonitor.ExecutionResult.PartialRejected:
                    PrintTrades(trades, orderID);
                    PrintClosedTrades(closedTrades, orderID);
                    Console.WriteLine("A part of the order has been rejected. Amount = {0}", orderMonitor.RejectAmount);
                    Console.WriteLine("Rejection cause: {0} ", orderMonitor.RejectMessage);
                    break;

                case OrderMonitor.ExecutionResult.Executed:
                    PrintTrades(trades, orderID);
                    PrintClosedTrades(closedTrades, orderID);
                    break;
                }
            }
        }
コード例 #3
0
        private StartupWorkflow(
            bool triggerSocketMonitor,
            bool triggerOrderMonitor,
            bool triggerAccountMonitor,
            bool triggerCandleMonitor,
            bool triggerStrategyMonitor,
            bool triggerOverlayMonitor) : this()
        {
            // See this link for very detailed explanation of how TaskCompletionSource can block
            // https://blogs.msdn.microsoft.com/seteplia/2018/10/01/the-danger-of-taskcompletionsourcet-class/

            if (triggerSocketMonitor)
            {
                SocketMonitor.SetResult(true);
            }
            if (triggerOrderMonitor)
            {
                OrderMonitor.SetResult(true);
            }
            if (triggerAccountMonitor)
            {
                AccountMonitor.SetResult(true);
            }
            if (triggerCandleMonitor)
            {
                CandleMonitor.SetResult(true);
            }
            if (triggerStrategyMonitor)
            {
                StrategyMonitor.SetResult(true);
            }
            if (triggerOverlayMonitor)
            {
                OverlayMonitor.SetResult(true);
            }
        }
コード例 #4
0
        public void onTablesUpdates(O2GResponse data)
        {
            O2GResponseReaderFactory factory = mSession.getResponseReaderFactory();

            if (factory != null)
            {
                O2GTablesUpdatesReader reader = factory.createTablesUpdatesReader(data);
                for (int ii = 0; ii < reader.Count; ii++)
                {
                    switch (reader.getUpdateTable(ii))
                    {
                    case O2GTableType.Accounts:
                        O2GAccountRow account = reader.getAccountRow(ii);
                        //Show balance updates
                        Console.WriteLine("Balance: {0}", account.Balance);
                        break;

                    case O2GTableType.Orders:
                        O2GOrderRow order = reader.getOrderRow(ii);
                        switch (reader.getUpdateType(ii))
                        {
                        case O2GTableUpdateType.Insert:
                            if ((OrderMonitor.IsClosingOrder(order) || OrderMonitor.IsOpeningOrder(order)) &&
                                mOrderMonitor == null)
                            {
                                Console.WriteLine("The order has been added. Order ID: {0}, Rate: {1}, Time In Force: {2}",
                                                  order.OrderID,
                                                  order.Rate,
                                                  order.TimeInForce);
                                mOrderMonitor = new OrderMonitor(order);
                            }
                            break;

                        case O2GTableUpdateType.Delete:
                            if (mOrderMonitor != null)
                            {
                                Console.WriteLine("The order has been deleted. Order ID: {0}", order.OrderID);
                                mOrderMonitor.OnOrderDeleted(order);
                                while (mOrderMonitor.IsOrderCompleted != true)
                                {
                                    Thread.Sleep(100);
                                }
                                PrintResult();
                                mSyncResponseEvent.Set();
                            }
                            break;
                        }
                        break;

                    case O2GTableType.Trades:
                        O2GTradeRow trade = reader.getTradeRow(ii);
                        if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert)
                        {
                            if (mOrderMonitor != null)
                            {
                                mOrderMonitor.OnTradeAdded(trade);
                                if (mOrderMonitor.IsOrderCompleted)
                                {
                                    PrintResult();
                                    mSyncResponseEvent.Set();
                                }
                            }
                        }
                        break;

                    case O2GTableType.ClosedTrades:
                        O2GClosedTradeRow closedTrade = reader.getClosedTradeRow(ii);
                        if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert)
                        {
                            if (mOrderMonitor != null)
                            {
                                mOrderMonitor.OnClosedTradeAdded(closedTrade);
                                if (mOrderMonitor.IsOrderCompleted)
                                {
                                    PrintResult();
                                    mSyncResponseEvent.Set();
                                }
                            }
                        }
                        break;

                    case O2GTableType.Messages:
                        O2GMessageRow message = reader.getMessageRow(ii);
                        if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert)
                        {
                            if (mOrderMonitor != null)
                            {
                                mOrderMonitor.OnMessageAdded(message);
                                if (mOrderMonitor.IsOrderCompleted)
                                {
                                    PrintResult();
                                    mSyncResponseEvent.Set();
                                }
                            }
                        }
                        break;
                    }
                }
            }
        }
コード例 #5
0
        public void onAdded(string sRowID, O2GRow rowData)
        {
            O2GTableType type = rowData.TableType;

            switch (type)
            {
            case O2GTableType.Orders:
                O2GOrderRow orderRow = (O2GOrderRow)rowData;
                if (mRequestID.Equals(orderRow.RequestID))
                {
                    if ((OrderMonitor.IsClosingOrder(orderRow) || OrderMonitor.IsOpeningOrder(orderRow)) &&
                        mOrderMonitor == null)
                    {
                        Console.WriteLine("The order has been added. Order ID: {0}, Rate: {1}, Time In Force: {2}",
                                          orderRow.OrderID,
                                          orderRow.Rate,
                                          orderRow.TimeInForce);
                        mOrderMonitor = new OrderMonitor(orderRow);
                    }
                }
                break;

            case O2GTableType.Trades:
                O2GTradeRow tradeRow = (O2GTradeRow)rowData;
                if (mOrderMonitor != null)
                {
                    mOrderMonitor.OnTradeAdded(tradeRow);
                    if (mOrderMonitor.IsOrderCompleted)
                    {
                        PrintResult();
                        mResponseListener.StopWaiting();
                    }
                }
                break;

            case O2GTableType.ClosedTrades:
                O2GClosedTradeRow closedTradeRow = (O2GClosedTradeRow)rowData;
                if (mOrderMonitor != null)
                {
                    mOrderMonitor.OnClosedTradeAdded(closedTradeRow);
                    if (mOrderMonitor.IsOrderCompleted)
                    {
                        PrintResult();
                        mResponseListener.StopWaiting();
                    }
                }
                break;

            case O2GTableType.Messages:
                O2GMessageRow messageRow = (O2GMessageRow)rowData;
                if (mOrderMonitor != null)
                {
                    mOrderMonitor.OnMessageAdded(messageRow);
                    if (mOrderMonitor.IsOrderCompleted)
                    {
                        PrintResult();
                        mResponseListener.StopWaiting();
                    }
                }
                break;
            }
        }
コード例 #6
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="responseListener"></param>
 public TableListener(ResponseListener responseListener)
 {
     mOrderMonitor     = null;
     mResponseListener = responseListener;
     mRequestID        = string.Empty;
 }