コード例 #1
0
 public void OnClosedTradeAdded(O2GClosedTradeRow closedTrade)
 {
     for (int i = 0; i < mMonitors.Count; i++)
     {
         mMonitors[i].OnClosedTradeAdded(closedTrade);
     }
 }
コード例 #2
0
        public void onAdded(string sRowID, O2GRow rowData)
        {
            O2GTableType type = rowData.TableType;

            switch (type)
            {
            case O2GTableType.Orders:
                O2GOrderRow orderRow = (O2GOrderRow)rowData;
                if (mBatchOrderMonitor != null && mRequestIDs.Contains(orderRow.RequestID))
                {
                    Console.WriteLine("The order has been added. Order ID: {0}, Rate: {1}, Time In Force: {2}",
                                      orderRow.OrderID,
                                      orderRow.Rate,
                                      orderRow.TimeInForce);
                    mBatchOrderMonitor.OnOrderAdded(orderRow);
                }
                break;

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

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

            case O2GTableType.Messages:
                O2GMessageRow messageRow = (O2GMessageRow)rowData;
                if (mBatchOrderMonitor != null)
                {
                    mBatchOrderMonitor.OnMessageAdded(messageRow);
                    if (mBatchOrderMonitor.IsBatchExecuted())
                    {
                        PrintResult();
                        mResponseListener.StopWaiting();
                    }
                }
                break;
            }
        }
コード例 #3
0
        private void PrintClosedTrades(ReadOnlyCollection <O2GClosedTradeRow> closedTrades, string orderID)
        {
            if (closedTrades.Count == 0)
            {
                return;
            }
            Console.WriteLine("For the order: OrderID = {0} the following positions have been closed: ", orderID);

            for (int i = 0; i < closedTrades.Count; i++)
            {
                O2GClosedTradeRow closedTrade = closedTrades[i];
                String            tradeID     = closedTrade.TradeID;
                int    amount = closedTrade.Amount;
                double rate   = closedTrade.CloseRate;
                Console.WriteLine("Closed Trade ID: {0}; Amount: {1}; Closed Rate: {2}", tradeID, amount, rate);
            }
        }
コード例 #4
0
        /// <summary>
        /// Process trade closing during order execution
        /// </summary>
        public void OnClosedTradeAdded(O2GClosedTradeRow closedTradeRow)
        {
            string sOrderID            = mOrder.OrderID;
            string sClosedTradeOrderID = closedTradeRow.CloseOrderID;

            if (sClosedTradeOrderID.Equals(sOrderID))
            {
                mClosedTrades.Add(closedTradeRow);

                if (mState == OrderState.OrderExecuted ||
                    mState == OrderState.OrderRejected ||
                    mState == OrderState.OrderCanceled)
                {
                    if (IsAllTradesReceived())
                    {
                        SetResult(true);
                    }
                }
            }
        }
コード例 #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))
                {
                    mOrderID = orderRow.OrderID;
                    PrintOrder("New order is added", orderRow);
                }
                break;

            case O2GTableType.Trades:
                O2GTradeRow tradeRow = (O2GTradeRow)rowData;
                Console.WriteLine("Position is opened: TradeID='{0}', TradeIDOrigin='{1}'",
                                  tradeRow.TradeID, tradeRow.TradeIDOrigin);
                break;

            case O2GTableType.ClosedTrades:
                O2GClosedTradeRow closedTradeRow = (O2GClosedTradeRow)rowData;
                Console.WriteLine("Position is closed: TradeID='{0}'",
                                  closedTradeRow.TradeID);
                break;

            case O2GTableType.Messages:
                O2GMessageRow messageRow = (O2GMessageRow)rowData;
                string        text       = messageRow.Text;
                int           findPos    = text.IndexOf(mOrderID);
                if (findPos >= 0)
                {
                    Console.WriteLine("Feature='{0}', Message='{1}'",
                                      messageRow.Feature, text);
                }
                break;
            }
        }
コード例 #6
0
        /// <summary>
        /// Process trade closing during order execution
        /// </summary>
        public void OnClosedTradeAdded(O2GClosedTradeRow closedTradeRow)
        {
            string sOrderID = mOrder.OrderID;
            string sClosedTradeOrderID = closedTradeRow.CloseOrderID;
            if (sClosedTradeOrderID.Equals(sOrderID))
            {
                mClosedTrades.Add(closedTradeRow);

                if (mState == OrderState.OrderExecuted ||
                    mState == OrderState.OrderRejected ||
                    mState == OrderState.OrderCanceled)
                {
                    if (IsAllTradesReceived())
                        SetResult(true);
                }
            }
        }
コード例 #7
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 (mBatchOrderMonitor != null)
                            {
                                Console.WriteLine("The order has been added. Order ID: {0}, Rate: {1}, Time In Force: {2}",
                                                  order.OrderID,
                                                  order.Rate,
                                                  order.TimeInForce);
                                mBatchOrderMonitor.OnOrderAdded(order);
                            }
                            break;

                        case O2GTableUpdateType.Delete:
                            if (mBatchOrderMonitor != null)
                            {
                                Console.WriteLine("The order has been deleted. Order ID: {0}", order.OrderID);
                                mBatchOrderMonitor.OnOrderDeleted(order);
                                if (mBatchOrderMonitor.IsBatchExecuted())
                                {
                                    PrintResult();
                                    mSyncResponseEvent.Set();
                                }
                            }
                            break;
                        }
                        break;

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

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

                    case O2GTableType.Messages:
                        O2GMessageRow message = reader.getMessageRow(ii);
                        if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert)
                        {
                            if (mBatchOrderMonitor != null)
                            {
                                mBatchOrderMonitor.OnMessageAdded(message);
                                if (mBatchOrderMonitor.IsBatchExecuted())
                                {
                                    PrintResult();
                                    mSyncResponseEvent.Set();
                                }
                            }
                        }
                        break;
                    }
                }
            }
        }
コード例 #8
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 ((OrderMonitorNetting.IsClosingOrder(orderRow) || OrderMonitorNetting.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);
                        O2GTradeRow trade    = null;
                        string      sTradeID = orderRow.TradeID;
                        if (mTradesTable != null)
                        {
                            for (int j = 0; j < mTradesTable.Count; j++)
                            {
                                if (sTradeID.Equals(mTradesTable.getRow(j).TradeID))
                                {
                                    trade = mTradesTable.getRow(j);
                                    break;
                                }
                            }
                        }
                        if (trade == null)
                        {
                            mOrderMonitor = new OrderMonitorNetting(orderRow);
                        }
                        else
                        {
                            mOrderMonitor = new OrderMonitorNetting(orderRow, trade.Amount);
                        }
                    }
                }
                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;
            }
        }
コード例 #9
0
        public void onTablesUpdates(O2GResponse response)
        {
            O2GResponseReaderFactory factory = mSession.getResponseReaderFactory();

            if (factory != null)
            {
                O2GTablesUpdatesReader reader = factory.createTablesUpdatesReader(response);
                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 (mRequestID.Equals(order.RequestID))
                            {
                                mOrderID = order.OrderID;
                                printOrder("New order is added", order);
                            }
                            break;

                        case O2GTableUpdateType.Update:
                            printOrder("An order is changed", order);
                            break;

                        case O2GTableUpdateType.Delete:
                            if (mRequestID.Equals(order.RequestID))
                            {
                                string sStatus = order.Status;
                                if (sStatus.Equals("R"))
                                {
                                    printOrder("An order has been rejected", order);
                                }
                                else
                                {
                                    printOrder("An order is going to be removed", order);
                                }
                                mSyncResponseEvent.Set();
                            }
                            break;
                        }
                        break;

                    case O2GTableType.Trades:
                        O2GTradeRow trade = reader.getTradeRow(ii);
                        if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert)
                        {
                            Console.WriteLine("Position is opened: TradeID='{0}', TradeIDOrigin='{1}'",
                                              trade.TradeID, trade.TradeIDOrigin);
                        }
                        break;

                    case O2GTableType.ClosedTrades:
                        O2GClosedTradeRow closedTrade = reader.getClosedTradeRow(ii);
                        if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert)
                        {
                            Console.WriteLine("Position is closed: TradeID='{0}'",
                                              closedTrade.TradeID);
                        }
                        break;

                    case O2GTableType.Messages:
                        O2GMessageRow message = reader.getMessageRow(ii);
                        if (reader.getUpdateType(ii) == O2GTableUpdateType.Insert)
                        {
                            string text    = message.Text;
                            int    findPos = text.IndexOf(mOrderID);
                            if (findPos >= 0)
                            {
                                Console.WriteLine("Feature='{0}', Message='{1}'",
                                                  message.Feature, text);
                            }
                        }
                        break;
                    }
                }
            }
        }
コード例 #10
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 ((OrderMonitorNetting.IsClosingOrder(order) || OrderMonitorNetting.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);
                                O2GTradeRow tradeRow = null;
                                string      sTradeID = order.TradeID;
                                if (mTradesTable != null)
                                {
                                    for (int j = 0; j < mTradesTable.Count; j++)
                                    {
                                        if (sTradeID.Equals(mTradesTable.getRow(j).TradeID))
                                        {
                                            tradeRow = mTradesTable.getRow(j);
                                            break;
                                        }
                                    }
                                }
                                if (tradeRow == null)
                                {
                                    mOrderMonitor = new OrderMonitorNetting(order);
                                }
                                else
                                {
                                    mOrderMonitor = new OrderMonitorNetting(order, tradeRow.Amount);
                                }
                            }
                            break;

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

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

                        case O2GTableUpdateType.Update:
                            if (mOrderMonitor != null)
                            {
                                mOrderMonitor.OnTradeUpdated(trade);
                                if (mOrderMonitor.IsOrderCompleted)
                                {
                                    PrintResult();
                                    mSyncResponseEvent.Set();
                                }
                            }
                            break;
                        }
                        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;
                    }
                }
            }
        }
コード例 #11
0
 public void OnClosedTradeAdded(O2GClosedTradeRow closedTrade)
 {
     for (int i = 0; i < mMonitors.Count; i++)
         mMonitors[i].OnClosedTradeAdded(closedTrade);
 }