示例#1
0
        public void UnsubscribeEvents(O2GTableManager manager)
        {
            O2GOrdersTable       ordersTable       = (O2GOrdersTable)manager.getTable(O2GTableType.Orders);
            O2GTradesTable       tradesTable       = (O2GTradesTable)manager.getTable(O2GTableType.Trades);
            O2GMessagesTable     messagesTable     = (O2GMessagesTable)manager.getTable(O2GTableType.Messages);
            O2GClosedTradesTable closedTradesTable = (O2GClosedTradesTable)manager.getTable(O2GTableType.ClosedTrades);

            ordersTable.unsubscribeUpdate(O2GTableUpdateType.Insert, this);
            ordersTable.subscribeUpdate(O2GTableUpdateType.Update, this);
            ordersTable.unsubscribeUpdate(O2GTableUpdateType.Delete, this);
            tradesTable.unsubscribeUpdate(O2GTableUpdateType.Insert, this);
            tradesTable.unsubscribeUpdate(O2GTableUpdateType.Update, this);
            closedTradesTable.unsubscribeUpdate(O2GTableUpdateType.Insert, this);
            messagesTable.unsubscribeUpdate(O2GTableUpdateType.Insert, this);
        }
示例#2
0
 /// <summary>
 /// Find valid account
 /// </summary>
 /// <param name="tableManager"></param>
 /// <returns>account</returns>
 private static O2GAccountRow GetAccount(O2GTableManager tableManager, string sAccountID)
 {
     bool bHasAccount = false;
     O2GAccountRow account = null;
     O2GAccountsTable accountsTable = (O2GAccountsTable)tableManager.getTable(O2GTableType.Accounts);
     for (int i = 0; i < accountsTable.Count; i++)
     {
         account = accountsTable.getRow(i);
         string sAccountKind = account.AccountKind;
         if (sAccountKind.Equals("32") || sAccountKind.Equals("36"))
         {
             if (account.MarginCallFlag.Equals("N"))
             {
                 if (string.IsNullOrEmpty(sAccountID) || sAccountID.Equals(account.AccountID))
                 {
                     bHasAccount = true;
                     break;
                 }
             }
         }
     }
     if (!bHasAccount)
     {
         return null;
     }
     else
     {
         return account;
     }
 }
示例#3
0
        /// <summary>
        /// Find valid account
        /// </summary>
        /// <param name="tableManager"></param>
        /// <returns>account</returns>
        private static O2GAccountRow GetAccount(O2GTableManager tableManager, string sAccountID)
        {
            bool             bHasAccount   = false;
            O2GAccountRow    account       = null;
            O2GAccountsTable accountsTable = (O2GAccountsTable)tableManager.getTable(O2GTableType.Accounts);

            for (int i = 0; i < accountsTable.Count; i++)
            {
                account = accountsTable.getRow(i);
                string sAccountKind = account.AccountKind;
                if (sAccountKind.Equals("32") || sAccountKind.Equals("36"))
                {
                    if (account.MarginCallFlag.Equals("N"))
                    {
                        if (string.IsNullOrEmpty(sAccountID) || sAccountID.Equals(account.AccountID))
                        {
                            bHasAccount = true;
                            break;
                        }
                    }
                }
            }
            if (!bHasAccount)
            {
                return(null);
            }
            else
            {
                return(account);
            }
        }
示例#4
0
        public Offers(O2GTableManager mTblMgr)
        {
            while (mTblMgr.getStatus() != O2GTableManagerStatus.TablesLoaded && mTblMgr.getStatus() != O2GTableManagerStatus.TablesLoadFailed)
            {
                Thread.Sleep(50);
            }
            O2GOffersTable   table    = (O2GOffersTable)mTblMgr.getTable(O2GTableType.Offers);
            OffersListener   listener = new OffersListener();
            O2GOfferTableRow row      = null;

            table.subscribeUpdate(O2GTableUpdateType.Insert, listener);
            table.subscribeUpdate(O2GTableUpdateType.Update, listener);
            try
            {
                mTblMgr.lockUpdates();
                for (int ii = 0; ii < table.Count; ii++)
                {
                    row = table.getRow(ii);

                    foreach (O2GTableColumn CurrentColumn in table.Columns)
                    {
                        if (CurrentColumn.ID == "Instrument")
                        {
                            CurrencyList.Add(row.getCell(1).ToString());
                        }
                    }
                }
            }
            finally
            {
                mTblMgr.unlockUpdates();
            }
            table.unsubscribeUpdate(O2GTableUpdateType.Insert, listener);
            table.unsubscribeUpdate(O2GTableUpdateType.Update, listener);
        }
示例#5
0
        public void subscibeForEvents()
        {
            // grab a table manager
            tableManager = mSession.getTableManager();
            O2GTableManagerStatus managerStatus = tableManager.getStatus();

            while (managerStatus == O2GTableManagerStatus.TablesLoading)
            {
                Thread.Sleep(50);
                managerStatus = tableManager.getStatus();
            }
            logger.Info("tableManagerStatus: " + tableManager.getStatus().ToString());
            if (managerStatus == O2GTableManagerStatus.TablesLoadFailed) //Have to handle this better at some point.
            {
                return;
            }
            if (tableManager != null)
            {
                offersTbl = (O2GOffersTable)tableManager.getTable(O2GTableType.Offers);

                O2GSessionDescriptorCollection descs = mSession.getTradingSessionDescriptors();
                foreach (O2GSessionDescriptor desc in descs)
                {
                    Console.WriteLine("'{0}' '{1}' '{2}' {3}", desc.Id, desc.Name, desc.Description, desc.RequiresPin);
                    logger.Debug("{0}, {1}, {2}, {3}", desc.Id, desc.Name, desc.Description, desc.RequiresPin);
                    serverName = desc.Name;
                }
                O2GResponse resp = mSession.getLoginRules().getSystemPropertiesResponse();
            }
        }
        /// <summary>
        /// Get initial Trades state
        /// </summary>
        /// <param name="tableManager"></param>
        /// <returns>TradesTable</returns>
        private static O2GTradesTable GetTradesTable(O2GTableManager tableManager)
        {
            O2GTradesTable tradesTable = null;

            tradesTable = (O2GTradesTable)tableManager.getTable(O2GTableType.Trades);
            return(tradesTable);
        }
示例#7
0
 // Print orders table
 private static void PrintOrders(O2GTableManager tableManager)
 {
     tableManager.lockUpdates();
     try
     {
         O2GOrdersTable ordersTable = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
         for (int ii = 0; ii < ordersTable.Count; ii++)
         {
             O2GOrderTableRow orderRow = ordersTable.getRow(ii);
             Console.WriteLine("Order: " + orderRow.OrderID);
             Console.WriteLine("AccountID = " + orderRow.AccountID);
             Console.WriteLine("OfferID = " + orderRow.OfferID);
             Console.WriteLine("Type = " + orderRow.Type);
             Console.WriteLine("Rate = " + orderRow.Rate);
             Console.WriteLine("Buy/Sell = " + orderRow.BuySell);
             Console.WriteLine("Status = " + orderRow.Status);
             Console.WriteLine("Limit = " + orderRow.Limit);
             Console.WriteLine("Stop = " + orderRow.Stop);
         }
     }
     finally
     {
         tableManager.unlockUpdates();
     }
 }
示例#8
0
        /// <summary>
        /// Find valid offer by instrument name
        /// </summary>
        /// <param name="tableManager"></param>
        /// <param name="sInstrument"></param>
        /// <returns>offer</returns>
        private static O2GOfferRow GetOffer(O2GTableManager tableManager, string sInstrument)
        {
            bool           bHasOffer   = false;
            O2GOfferRow    offer       = null;
            O2GOffersTable offersTable = (O2GOffersTable)tableManager.getTable(O2GTableType.Offers);

            for (int i = 0; i < offersTable.Count; i++)
            {
                offer = offersTable.getRow(i);
                if (offer.Instrument.Equals(sInstrument))
                {
                    if (offer.SubscriptionStatus.Equals("T"))
                    {
                        bHasOffer = true;
                        break;
                    }
                }
            }
            if (!bHasOffer)
            {
                return(null);
            }
            else
            {
                return(offer);
            }
        }
示例#9
0
        /// <summary>
        /// Get orders data for closing all positions
        /// </summary>
        /// <param name="tableManager"></param>
        /// <param name="sAccountID"></param>
        /// <returns></returns>
        private static Dictionary <string, CloseOrdersData> GetCloseOrdersData(O2GTableManager tableManager, string sAccountID)
        {
            Dictionary <string, CloseOrdersData> closeOrdersData = new Dictionary <string, CloseOrdersData>();
            O2GTradeRow    trade       = null;
            O2GTradesTable tradesTable = (O2GTradesTable)tableManager.getTable(O2GTableType.Trades);

            for (int i = 0; i < tradesTable.Count; i++)
            {
                trade = tradesTable.getRow(i);
                string sOfferID = trade.OfferID;
                string sBuySell = trade.BuySell;
                // Set opposite side
                OrderSide side = (sBuySell.Equals(Constants.Buy) ? OrderSide.Sell : OrderSide.Buy);

                if (closeOrdersData.ContainsKey(sOfferID))
                {
                    OrderSide currentSide = closeOrdersData[sOfferID].Side;
                    if (currentSide != OrderSide.Both && currentSide != side)
                    {
                        closeOrdersData[sOfferID].Side = OrderSide.Both;
                    }
                }
                else
                {
                    CloseOrdersData data = new CloseOrdersData(sAccountID, side);
                    closeOrdersData.Add(sOfferID, data);
                }
            }
            return(closeOrdersData);
        }
示例#10
0
        public void UnsubscribeEvents(O2GTableManager manager)
        {
            O2GOrdersTable ordersTable = (O2GOrdersTable)manager.getTable(O2GTableType.Orders);

            ordersTable.unsubscribeUpdate(O2GTableUpdateType.Insert, this);
            ordersTable.unsubscribeUpdate(O2GTableUpdateType.Delete, this);
        }
示例#11
0
 public void UnsubscribeEvents(O2GTableManager manager)
 {
     O2GOrdersTable ordersTable = (O2GOrdersTable)manager.getTable(O2GTableType.Orders);
     ordersTable.subscribeUpdate(O2GTableUpdateType.Insert, this);
     ordersTable.subscribeUpdate(O2GTableUpdateType.Update, this);
     ordersTable.subscribeUpdate(O2GTableUpdateType.Delete, this);
 }
示例#12
0
 public void unsubcribeEvents()
 {
     if (tableManager != null)
     {
         offersTbl    = (O2GOffersTable)tableManager.getTable(O2GTableType.Offers);
         tableManager = null;
     }
 }
示例#13
0
 // Print orders table using IO2GEachRowListener
 public static void PrintOrders(O2GTableManager tableManager, string sAccountID)
 {
     O2GOrdersTable ordersTable = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
     if (ordersTable.Count == 0)
     {
         Console.WriteLine("Table is empty!");
     }
     else
     {
         ordersTable.forEachRow(new EachRowListener(sAccountID));
     }
 }
示例#14
0
 // Find orders by request ID and print it
 private static void FindOrders(O2GTableManager tableManager, string sRequestID)
 {
     O2GOrdersTable ordersTable = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
     O2GTableIterator ordersIterator = new O2GTableIterator();
     O2GOrderTableRow orderRow = null;
     while (ordersTable.getNextRowByColumnValue("RequestID", sRequestID, ordersIterator, out orderRow))
     {
         Console.WriteLine("Order:{0}, OfferID={1}, Type={2}, Rate={3:N4}, BuySell={4}, Status={5}, Limit={6:N4}, Stop={7:N4}, RequestID={8}",
                 orderRow.OrderID, orderRow.OfferID, orderRow.Type, orderRow.Rate, orderRow.BuySell, orderRow.Status,
                 orderRow.Limit, orderRow.Stop, orderRow.RequestID);
     }
 }
示例#15
0
        private SessionStatusMessage doLogin(string[] loginData)
        {
            //session.subscribeSessionStatus(sessionStatusResponseListener);

            session.useTableManager(O2GTableManagerMode.Yes, null);

            session.login(loginData[0], loginData[1], loginData[2], loginData[3]);
            sessionStatusResponseListener.WaitEvents();

            if (sessionStatusResponseListener.Error)
            {
                return(new SessionStatusMessage(SessionStatusEnum.ERROR1, "FXCM: " + sessionStatusResponseListener.ErrorMessage));
            }
            if (sessionStatusResponseListener.SessionStatus == O2GSessionStatusCode.SessionLost)
            {
                return(new SessionStatusMessage(SessionStatusEnum.ERROR2, "FXCM: Session Lost"));
            }
            if (sessionStatusResponseListener.SessionStatus == O2GSessionStatusCode.Unknown)
            {
                return(new SessionStatusMessage(SessionStatusEnum.ERROR3, "FXCM: Uknown Error"));
            }

            tableMgr = session.getTableManager();
            Task.Delay(1000);
            if (tableMgr == null)
            {
                return(new SessionStatusMessage(SessionStatusEnum.ERROR4, "FXCM: TableManage is null"));
            }

            O2GTableManagerStatus managerStatus = tableMgr.getStatus();

            int i = 0;

            while (managerStatus == O2GTableManagerStatus.TablesLoading)
            {
                Thread.Sleep(200);
                managerStatus = tableMgr.getStatus();
                if (i++ > 9)
                {
                    break;
                }
            }
            if (managerStatus == O2GTableManagerStatus.TablesLoadFailed)
            {
                return(new SessionStatusMessage(SessionStatusEnum.ERROR3, "FXCM: TablesLoadFailed"));
            }

            offersTable             = (O2GOffersTable)tableMgr.getTable(O2GTableType.Offers);
            offersTable.RowChanged += offersTableUpdated;

            return(new SessionStatusMessage(SessionStatusEnum.Connected, "FXCM: Connected"));
        }
示例#16
0
 // Find orders by type and buysell and print it
 private static void FindOrdersByTypeAndDirection(O2GTableManager tableManager, String sOrderType, string sBuySell)
 {
     O2GOrdersTable ordersTable = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
     O2GTableIterator ordersIterator = new O2GTableIterator();
     O2GOrderTableRow orderRow = null;
     while (ordersTable.getNextRowByMultiColumnValues(new String[] { "Type", "BuySell" }, new Object[] { sOrderType, sBuySell },
             ordersIterator, out orderRow))
     {
         Console.WriteLine("Order:{0}, OfferID={1}, Type={2}, Rate={3:N4}, BuySell={4}, Status={5}, Limit={6:N4}, Stop={7:N4}, RequestID={8}",
                 orderRow.OrderID, orderRow.OfferID, orderRow.Type, orderRow.Rate, orderRow.BuySell, orderRow.Status,
                 orderRow.Limit, orderRow.Stop, orderRow.RequestID);
     }
 }
示例#17
0
        // Find orders by request ID and print it
        private static void FindOrders(O2GTableManager tableManager, string sRequestID)
        {
            O2GOrdersTable   ordersTable    = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
            O2GTableIterator ordersIterator = new O2GTableIterator();
            O2GOrderTableRow orderRow       = null;

            while (ordersTable.getNextRowByColumnValue("RequestID", sRequestID, ordersIterator, out orderRow))
            {
                Console.WriteLine("Order:{0}, OfferID={1}, Type={2}, Rate={3:N4}, BuySell={4}, Status={5}, Limit={6:N4}, Stop={7:N4}, RequestID={8}",
                                  orderRow.OrderID, orderRow.OfferID, orderRow.Type, orderRow.Rate, orderRow.BuySell, orderRow.Status,
                                  orderRow.Limit, orderRow.Stop, orderRow.RequestID);
            }
        }
示例#18
0
 /// <summary>
 /// Print accounts and get the first account
 /// </summary>
 /// <param name="session"></param>
 /// <returns></returns>
 private static O2GAccountRow GetAccount(O2GTableManager tableManager)
 {
     O2GAccountsTable accountsTable = (O2GAccountsTable)tableManager.getTable(O2GTableType.Accounts);
     O2GTableIterator accountsIterator = new O2GTableIterator();
     O2GAccountTableRow accountRow = null;
     accountsTable.getNextRow(accountsIterator, out accountRow);
     while (accountRow != null)
     {
         Console.WriteLine("AccountID: {0}, Balance: {1:N2}, Used margin: {2:N2}", accountRow.AccountID, accountRow.Balance, accountRow.UsedMargin);
         accountsTable.getNextRow(accountsIterator, out accountRow);
     }
     return accountsTable.getRow(0);
 }
        // Print orders table using IO2GEachRowListener
        public static void PrintTrades(O2GTableManager tableManager, string sAccountID)
        {
            O2GTradesTable tradesTable = (O2GTradesTable)tableManager.getTable(O2GTableType.Trades);

            if (tradesTable.Count == 0)
            {
                Console.WriteLine("Table is empty!");
            }
            else
            {
                tradesTable.forEachRow(new EachRowListener(sAccountID));
            }
        }
示例#20
0
        // Find orders by type and buysell and print it
        private static void FindOrdersByTypeAndDirection(O2GTableManager tableManager, String sOrderType, string sBuySell)
        {
            O2GOrdersTable   ordersTable    = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
            O2GTableIterator ordersIterator = new O2GTableIterator();
            O2GOrderTableRow orderRow       = null;

            while (ordersTable.getNextRowByMultiColumnValues(new String[] { "Type", "BuySell" }, new Object[] { sOrderType, sBuySell },
                                                             ordersIterator, out orderRow))
            {
                Console.WriteLine("Order:{0}, OfferID={1}, Type={2}, Rate={3:N4}, BuySell={4}, Status={5}, Limit={6:N4}, Stop={7:N4}, RequestID={8}",
                                  orderRow.OrderID, orderRow.OfferID, orderRow.Type, orderRow.Rate, orderRow.BuySell, orderRow.Status,
                                  orderRow.Limit, orderRow.Stop, orderRow.RequestID);
            }
        }
        /// <summary>
        /// Print accounts and get the first account
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        private static O2GAccountRow GetAccount(O2GTableManager tableManager)
        {
            O2GAccountsTable   accountsTable    = (O2GAccountsTable)tableManager.getTable(O2GTableType.Accounts);
            O2GTableIterator   accountsIterator = new O2GTableIterator();
            O2GAccountTableRow accountRow       = null;

            accountsTable.getNextRow(accountsIterator, out accountRow);
            while (accountRow != null)
            {
                Console.WriteLine("AccountID: {0}, Balance: {1}", accountRow.AccountID, accountRow.Balance);
                accountsTable.getNextRow(accountsIterator, out accountRow);
            }
            return(accountsTable.getRow(0));
        }
示例#22
0
 // Find conditional orders and print it
 private static void FindConditionalOrders(O2GTableManager tableManager)
 {
     O2GOrdersTable ordersTable = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
     O2GTableIterator ordersIterator = new O2GTableIterator();
     O2GOrderTableRow orderRow = null;
     Object[] orderTypes = new Object[] { Constants.Orders.LimitEntry, Constants.Orders.StopEntry,
             Constants.Orders.Limit, Constants.Orders.Stop, Constants.Orders.Entry, "LTE", "STE" };
     while (ordersTable.getNextRowByColumnValues("Type", orderTypes, ordersIterator, out orderRow))
     {
         Console.WriteLine("Order:{0}, OfferID={1}, Type={2}, Rate={3:N4}, BuySell={4}, Status={5}, Limit={6:N4}, Stop={7:N4}, RequestID={8}",
                 orderRow.OrderID, orderRow.OfferID, orderRow.Type, orderRow.Rate, orderRow.BuySell, orderRow.Status,
                 orderRow.Limit, orderRow.Stop, orderRow.RequestID);
     }
 }
示例#23
0
        // Find conditional orders and print it
        private static void FindConditionalOrders(O2GTableManager tableManager)
        {
            O2GOrdersTable   ordersTable    = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
            O2GTableIterator ordersIterator = new O2GTableIterator();
            O2GOrderTableRow orderRow       = null;

            Object[] orderTypes = new Object[] { Constants.Orders.LimitEntry, Constants.Orders.StopEntry,
                                                 Constants.Orders.Limit, Constants.Orders.Stop, Constants.Orders.Entry, "LTE", "STE" };
            while (ordersTable.getNextRowByColumnValues("Type", orderTypes, ordersIterator, out orderRow))
            {
                Console.WriteLine("Order:{0}, OfferID={1}, Type={2}, Rate={3:N4}, BuySell={4}, Status={5}, Limit={6:N4}, Stop={7:N4}, RequestID={8}",
                                  orderRow.OrderID, orderRow.OfferID, orderRow.Type, orderRow.Rate, orderRow.BuySell, orderRow.Status,
                                  orderRow.Limit, orderRow.Stop, orderRow.RequestID);
            }
        }
示例#24
0
 /// <summary>
 /// Find order by id and print it
 /// </summary>
 /// <param name="session"></param>
 /// <param name="sAccountID"></param>
 /// <param name="sOrderID"></param>
 /// <param name="responseListener"></param>
 private static void FindOrder(O2GTableManager tableManager, string sAccountID, string sOrderID)
 {
     O2GOrdersTable ordersTable = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
     O2GOrderTableRow orderRow = null;
     ordersTable.findRow(sOrderID, out orderRow);
     if (orderRow != null && sAccountID.Equals(orderRow.AccountID))
     {
         Console.WriteLine("OrderID={0}; AccountID={1); Type={2}; Status={3}; OfferID={4}; Amount={5}; BuySell={6}; Rate={7}",
                 orderRow.OrderID, orderRow.AccountID, orderRow.Type, orderRow.Status, orderRow.OfferID,
                 orderRow.Amount, orderRow.BuySell, orderRow.Rate);
     }
     else
     {
         Console.WriteLine("Order '{0}' is not found", sOrderID);
     }
 }
示例#25
0
        /// <summary>
        /// Find order by id and print it
        /// </summary>
        /// <param name="session"></param>
        /// <param name="sAccountID"></param>
        /// <param name="sOrderID"></param>
        /// <param name="responseListener"></param>
        private static void FindOrder(O2GTableManager tableManager, string sAccountID, string sOrderID)
        {
            O2GOrdersTable   ordersTable = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
            O2GOrderTableRow orderRow    = null;

            ordersTable.findRow(sOrderID, out orderRow);
            if (orderRow != null && sAccountID.Equals(orderRow.AccountID))
            {
                Console.WriteLine("OrderID={0}; AccountID={1}; Type={2}; Status={3}; OfferID={4}; Amount={5}; BuySell={6}; Rate={7}",
                                  orderRow.OrderID, orderRow.AccountID, orderRow.Type, orderRow.Status, orderRow.OfferID,
                                  orderRow.Amount, orderRow.BuySell, orderRow.Rate);
            }
            else
            {
                Console.WriteLine("Order '{0}' is not found", sOrderID);
            }
        }
示例#26
0
文件: Form1.cs 项目: Purhap/QLowTrade
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ConnectBt_Click(object sender, EventArgs e)
        {
            //mSession = O2GTransport.createSession();
            statusListener = new MySessionStatusListener(mSession, "tempDb", "pin");
            mSession.subscribeSessionStatus(statusListener);
            mSession.useTableManager(O2GTableManagerMode.Yes, null);

            mSession.login("70882056", "2945", "http://www.fxcorporate.com/Hosts.jsp", "Demo");

            while (statusListener.Status != O2GSessionStatusCode.Connected && statusListener.Status != O2GSessionStatusCode.Disconnected)
            {
                Thread.Sleep(50);
            }

            if (statusListener.Status == O2GSessionStatusCode.Connected)
            {
                O2GTableManager manager = mSession.getTableManager();
                while (manager.getStatus() == O2GTableManagerStatus.TablesLoading)
                {
                    Thread.Sleep(50);
                }

                O2GOffersTable offers = null;

                if (manager.getStatus() == O2GTableManagerStatus.TablesLoaded)
                {
                    offers = (O2GOffersTable)manager.getTable(O2GTableType.Offers);
                    printOffers(offers);
                    offers.RowChanged += new EventHandler <RowEventArgs>(offers_RowChanged);
                }
                else
                {
                    statusLabel.Text = "Tables loading failed!";
                }
                if (offers != null)
                {
                    offers.RowChanged -= new EventHandler <RowEventArgs>(offers_RowChanged);
                }
                //mSession.logout();
            }
            //mSession.unsubscribeSessionStatus(statusListener);
            //mSession.Dispose();

            statusLabel.Text      = "Connected";
            statusLabel.BackColor = Color.GreenYellow;
        }
示例#27
0
        public Offers(MainForm CurrentForm, O2GTableManager mTblMgr)
        {
            CreateTable();

            CurrentForm.PopulateTable(OffersTable);

            while (mTblMgr.getStatus() != O2GTableManagerStatus.TablesLoaded && mTblMgr.getStatus() != O2GTableManagerStatus.TablesLoadFailed)
            {
                Thread.Sleep(50);
            }
            O2GOffersTable   table    = (O2GOffersTable)mTblMgr.getTable(O2GTableType.Offers);
            OffersListener   listener = new OffersListener();
            O2GOfferTableRow row      = null;

            for (int i = 0; i < table.Count; i++)
            {
                DataRow CurrentRow = OffersTable.NewRow();
                OffersTable.Rows.Add(CurrentRow);
            }

            CurrentForm.GetTableData(table, listener, row, mTblMgr);
        }
示例#28
0
        /// <summary>
        /// Get orders data for closing all positions
        /// </summary>
        /// <param name="session"></param>
        /// <param name="sAccountID"></param>
        /// <param name="responseListener"></param>
        /// <returns></returns>
        private static bool GetCloseOrdersData(O2GTableManager tableManager, string sAccountID, string sOfferID, out CloseOrdersData closeOrdersData)
        {
            bool bIsTradesFound = false;

            closeOrdersData = new CloseOrdersData();
            O2GTradesTable tradesTable = (O2GTradesTable)tableManager.getTable(O2GTableType.Trades);

            for (int i = 0; i < tradesTable.Count; i++)
            {
                O2GTradeRow trade = tradesTable.getRow(i);

                if (!trade.OfferID.Equals(sOfferID))
                {
                    continue;
                }
                bIsTradesFound = true;
                string sBuySell = trade.BuySell;
                // Set opposite side
                OrderSide side = (sBuySell.Equals(Constants.Buy) ? OrderSide.Sell : OrderSide.Buy);
                if (closeOrdersData.OfferID.Equals(sOfferID))
                {
                    OrderSide currentSide = closeOrdersData.Side;
                    if (currentSide != OrderSide.Both && currentSide != side)
                    {
                        closeOrdersData.Side = OrderSide.Both;
                    }
                }
                else
                {
                    closeOrdersData.OfferID   = sOfferID;
                    closeOrdersData.AccountID = sAccountID;
                    closeOrdersData.Side      = side;
                }
            }
            return(bIsTradesFound);
        }
示例#29
0
        /// <summary>
        /// Find the first opened position by AccountID and OfferID
        /// </summary>
        /// <param name="session"></param>
        /// <param name="sAccountID"></param>
        /// <param name="sOfferID"></param>
        /// <param name="responseListener"></param>
        /// <returns></returns>
        private static O2GTradeRow GetTrade(O2GTableManager tableManager, string sAccountID, string sOfferID)
        {
            bool           bHasTrade   = false;
            O2GTradeRow    trade       = null;
            O2GTradesTable tradesTable = (O2GTradesTable)tableManager.getTable(O2GTableType.Trades);

            for (int i = 0; i < tradesTable.Count; i++)
            {
                trade = tradesTable.getRow(i);
                if (trade.AccountID.Equals(sAccountID) && trade.OfferID.Equals(sOfferID))
                {
                    bHasTrade = true;
                    break;
                }
            }
            if (!bHasTrade)
            {
                return(null);
            }
            else
            {
                return(trade);
            }
        }
示例#30
0
 /// <summary>
 /// Find valid offer by instrument name
 /// </summary>
 /// <param name="tableManager"></param>
 /// <param name="sInstrument"></param>
 /// <returns>offer</returns>
 private static O2GOfferRow GetOffer(O2GTableManager tableManager, string sInstrument)
 {
     bool bHasOffer = false;
     O2GOfferRow offer = null;
     O2GOffersTable offersTable = (O2GOffersTable)tableManager.getTable(O2GTableType.Offers);
     for (int i = 0; i < offersTable.Count; i++)
     {
         offer = offersTable.getRow(i);
         if (offer.Instrument.Equals(sInstrument))
         {
             if (offer.SubscriptionStatus.Equals("T"))
             {
                 bHasOffer = true;
                 break;
             }
         }
     }
     if (!bHasOffer)
     {
         return null;
     }
     else
     {
         return offer;
     }
 }
示例#31
0
        public void UnsubscribeEvents(O2GTableManager manager)
        {
            var table = (O2GOffersTable)manager.getTable(O2GTableType.Offers);

            table.unsubscribeUpdate(O2GTableUpdateType.Update, this);
        }
示例#32
0
 /// <summary>
 /// Find the first opened position by AccountID and OfferID
 /// </summary>
 /// <param name="session"></param>
 /// <param name="sAccountID"></param>
 /// <param name="sOfferID"></param>
 /// <param name="responseListener"></param>
 /// <returns></returns>
 private static O2GTradeRow GetTrade(O2GTableManager tableManager, string sAccountID, string sOfferID)
 {
     bool bHasTrade = false;
     O2GTradeRow trade = null;
     O2GTradesTable tradesTable = (O2GTradesTable)tableManager.getTable(O2GTableType.Trades);
     for (int i = 0; i < tradesTable.Count; i++)
     {
         trade = tradesTable.getRow(i);
         if (trade.AccountID.Equals(sAccountID) && trade.OfferID.Equals(sOfferID))
         {
             bHasTrade = true;
             break;
         }
     }
     if (!bHasTrade)
     {
         return null;
     }
     else
     {
         return trade;
     }
 }
示例#33
0
        /// <summary>
        /// Get orders data for closing all positions
        /// </summary>
        /// <param name="session"></param>
        /// <param name="sAccountID"></param>
        /// <param name="responseListener"></param>
        /// <returns></returns>
        private static bool GetCloseOrdersData(O2GTableManager tableManager, string sAccountID, string sOfferID, out CloseOrdersData closeOrdersData)
        {
            bool bIsTradesFound = false;
            closeOrdersData = new CloseOrdersData();
            O2GTradesTable tradesTable = (O2GTradesTable)tableManager.getTable(O2GTableType.Trades);
            for (int i = 0; i < tradesTable.Count; i++)
            {
                O2GTradeRow trade = tradesTable.getRow(i);

                if (!trade.OfferID.Equals(sOfferID))
                {
                    continue;
                }
                bIsTradesFound = true;
                string sBuySell = trade.BuySell;
                // Set opposite side
                OrderSide side = (sBuySell.Equals(Constants.Buy) ? OrderSide.Sell : OrderSide.Buy);
                if (closeOrdersData.OfferID.Equals(sOfferID))
                {
                    OrderSide currentSide = closeOrdersData.Side;
                    if (currentSide != OrderSide.Both && currentSide != side)
                    {
                        closeOrdersData.Side = OrderSide.Both;
                    }
                }
                else
                {
                    closeOrdersData.OfferID = sOfferID;
                    closeOrdersData.AccountID = sAccountID;
                    closeOrdersData.Side = side;
                }
            }
            return bIsTradesFound;
        }
示例#34
0
        public ForexConnect(string userid, string password, Form1 form, string symbol)
        {
            ForexConnect.sInstrument = symbol;
            Console.WriteLine(ForexConnect.sInstrument);
            fm = form;

            string sUserID     = userid;
            string sPassword   = password;
            string sURL        = "http://www.fxcorporate.com/Hosts.jsp";
            string sConnection = "Demo";

            try
            {
                mSession = O2GTransport.createSession();

                SessionStatusListener statusListener = new SessionStatusListener(mSession);
                mSession.subscribeSessionStatus(statusListener);
                mSession.useTableManager(O2GTableManagerMode.Yes, null);

                mSession.login(sUserID, sPassword, sURL, sConnection);

                while (statusListener.Status != O2GSessionStatusCode.Connected && statusListener.Status != O2GSessionStatusCode.Disconnected)
                {
                    Thread.Sleep(50);
                }
                if (statusListener.Status == O2GSessionStatusCode.Connected)
                {
                    O2GTableManager manager = mSession.getTableManager();
                    while (manager.getStatus() == O2GTableManagerStatus.TablesLoading)
                    {
                        Thread.Sleep(50);
                    }
                    O2GOffersTable offers = null;
                    if (manager.getStatus() == O2GTableManagerStatus.TablesLoaded)
                    {
                        offers = (O2GOffersTable)manager.getTable(O2GTableType.Offers);
                        printOffers(offers);
                        offers.RowChanged += new EventHandler <RowEventArgs>(offers_RowChanged);
                    }
                    else
                    {
                        Console.WriteLine("Tables loading failed!");
                    }

                    /*
                     * Console.WriteLine("Press enter to stop!");
                     * Console.ReadLine();
                     *
                     * if (offers != null)
                     * {
                     *  offers.RowChanged -= new EventHandler<RowEventArgs>(offers_RowChanged);
                     * }
                     *
                     * mSession.logout();
                     */
                }
//                mSession.unsubscribeSessionStatus(statusListener);
//                mSession.Dispose();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: {0}", e.ToString());
            }
        }
示例#35
0
        private void UnsubscribeEvents(O2GTableManager manager)
        {
            O2GOffersTable offersTable = (O2GOffersTable)manager.getTable(O2GTableType.Offers);

            offersTable.unsubscribeUpdate(O2GTableUpdateType.Update, this);
        }
示例#36
0
 // Print orders table
 private static void PrintOrders(O2GTableManager tableManager)
 {
     tableManager.lockUpdates();
     try
     {
         O2GOrdersTable ordersTable = (O2GOrdersTable)tableManager.getTable(O2GTableType.Orders);
         for (int ii = 0; ii < ordersTable.Count; ii++)
         {
             O2GOrderTableRow orderRow = ordersTable.getRow(ii);
             Console.WriteLine("Order: " + orderRow.OrderID);
             Console.WriteLine("AccountID = " + orderRow.AccountID);
             Console.WriteLine("OfferID = " + orderRow.OfferID);
             Console.WriteLine("Type = " + orderRow.Type);
             Console.WriteLine("Rate = " + orderRow.Rate);
             Console.WriteLine("Buy/Sell = " + orderRow.BuySell);
             Console.WriteLine("Status = " + orderRow.Status);
             Console.WriteLine("Limit = " + orderRow.Limit);
             Console.WriteLine("Stop = " + orderRow.Stop);
         }
     }
     finally
     {
         tableManager.unlockUpdates();
     }
 }
示例#37
0
        static void Main(string[] args)
        {
            O2GSession session = null;

            try
            {
                LoginParams  loginParams  = new LoginParams(ConfigurationManager.AppSettings);
                SampleParams sampleParams = new SampleParams(ConfigurationManager.AppSettings);

                PrintSampleParams("GetOffers", loginParams, sampleParams);

                session = O2GTransport.createSession();
                session.useTableManager(O2GTableManagerMode.Yes, null);
                SessionStatusListener statusListener = new SessionStatusListener(session, loginParams.SessionID, loginParams.Pin);
                session.subscribeSessionStatus(statusListener);
                statusListener.Reset();
                session.login(loginParams.Login, loginParams.Password, loginParams.URL, loginParams.Connection);
                if (statusListener.WaitEvents() && statusListener.Connected)
                {
                    TableListener tableListener = new TableListener();

                    O2GTableManager       tableManager  = session.getTableManager();
                    O2GTableManagerStatus managerStatus = tableManager.getStatus();
                    while (managerStatus == O2GTableManagerStatus.TablesLoading)
                    {
                        Thread.Sleep(50);
                        managerStatus = tableManager.getStatus();
                    }

                    if (managerStatus == O2GTableManagerStatus.TablesLoadFailed)
                    {
                        throw new Exception("Cannot refresh all tables of table manager");
                    }

                    tableListener.SetInstrument(sampleParams.Instrument);
                    tableListener.SubscribeEvents(tableManager);

                    O2GOffersTable offers = null;
                    offers = (O2GOffersTable)tableManager.getTable(O2GTableType.Offers);
                    tableListener.PrintOffers(offers, null);

                    // Do nothing 10 seconds, let offers print
                    Thread.Sleep(10000);

                    Console.WriteLine("Done!");

                    tableListener.UnsubscribeEvents(tableManager);

                    statusListener.Reset();
                    session.logout();
                    statusListener.WaitEvents();
                }
                session.unsubscribeSessionStatus(statusListener);
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: {0}", e.ToString());
            }
            finally
            {
                if (session != null)
                {
                    session.Dispose();
                }
            }
        }
示例#38
0
        private void DoWork()
        {
            O2GSession      session        = null;
            O2GTableManager tableManager   = null;
            StatusListener  statusListener = null;
            TableListener   tableListener  = null;

            bool canUnsubscribeSessionStatus = false;

            try
            {
                session = O2GTransport.createSession();

                session.useTableManager(O2GTableManagerMode.Yes, null);

                var sessionId = Guid.NewGuid().ToString("N");

                statusListener = new StatusListener(session, sessionId);

                statusListener.OnStatus += (s, e) =>
                {
                    var status = e.Item.ToStatus();

                    OnStatus?.Invoke(this, new GenericArgs <Status>(status));

                    if (status == Status.Disconnected)
                    {
                        OnDisconnected?.Invoke(this, EventArgs.Empty);
                    }
                };

                session.subscribeSessionStatus(statusListener);

                session.login(userName, password, URL, connection.ToString());

                if (statusListener.WaitEvents() && statusListener.Connected)
                {
                    tableListener = new TableListener(testingMode);

                    tableListener.OnOffer += (s, e) =>
                                             OnOffer?.Invoke(this, new GenericArgs <Offer>(e.Item));

                    // improve this plus get rid of response listener
                    tableListener.OnOfferIds += (s, e) =>
                    {
                        //var request = GetSetSubscriptionStatusRequest(session, e.Item);

                        //if (request == null)
                        //    throw new Exception("Cannot create request");

                        //var responseListener = new ResponseListener();

                        //session.subscribeResponse(responseListener);

                        //responseListener.SetRequestID(request.RequestID);

                        //session.sendRequest(request);

                        //if (!responseListener.WaitEvents())
                        //    throw new Exception("Response waiting timeout expired");
                    };

                    tableManager = session.getTableManager();

                    var managerStatus = tableManager.getStatus();

                    // max wait
                    while (managerStatus == O2GTableManagerStatus.TablesLoading)
                    {
                        Thread.Sleep(50);

                        managerStatus = tableManager.getStatus();
                    }

                    if (managerStatus == O2GTableManagerStatus.TablesLoadFailed)
                    {
                        throw new Exception("TableManager refresh failed!");
                    }

                    tableListener.SetSymbols(
                        Enum.GetValues(typeof(Symbol)).Cast <Symbol>().ToList());

                    tableListener.SubscribeEvents(tableManager);

                    O2GOffersTable offers = null;

                    offers = (O2GOffersTable)tableManager.getTable(O2GTableType.Offers);

                    tableListener.HandleOffers(offers);

                    cancelEvent.WaitOne();

                    OnCancelled?.Invoke(this, EventArgs.Empty);
                }
            }
            catch (Exception error)
            {
                OnError?.Invoke(this, new GenericArgs <Exception>(error));
            }
            finally
            {
                Shutdown(session, statusListener, tableListener, tableManager);

                if (canUnsubscribeSessionStatus)
                {
                    session.unsubscribeSessionStatus(statusListener);
                }

                if (session != null)
                {
                    session.Dispose();
                }
            }
        }
示例#39
0
 public void UnsubscribeEvents(O2GTableManager manager)
 {
     O2GAccountsTable accountsTable = (O2GAccountsTable)manager.getTable(O2GTableType.Accounts);
     O2GOrdersTable ordersTable = (O2GOrdersTable)manager.getTable(O2GTableType.Orders);
     O2GTradesTable tradesTable = (O2GTradesTable)manager.getTable(O2GTableType.Trades);
     O2GMessagesTable messagesTable = (O2GMessagesTable)manager.getTable(O2GTableType.Messages);
     O2GClosedTradesTable closedTradesTable = (O2GClosedTradesTable)manager.getTable(O2GTableType.ClosedTrades);
     accountsTable.unsubscribeUpdate(O2GTableUpdateType.Update, this);
     ordersTable.unsubscribeUpdate(O2GTableUpdateType.Insert, this);
     ordersTable.unsubscribeUpdate(O2GTableUpdateType.Delete, this);
     tradesTable.unsubscribeUpdate(O2GTableUpdateType.Insert, this);
     tradesTable.unsubscribeUpdate(O2GTableUpdateType.Update, this);
     closedTradesTable.unsubscribeUpdate(O2GTableUpdateType.Insert, this);
     messagesTable.unsubscribeUpdate(O2GTableUpdateType.Insert, this);
 }
示例#40
0
 public void SubscribeEvents(O2GTableManager manager)
 {
     O2GOffersTable offersTable = (O2GOffersTable)manager.getTable(O2GTableType.Offers);
     offersTable.subscribeUpdate(O2GTableUpdateType.Update, this);
 }
        public void SubscribeEvents(O2GTableManager manager)
        {
            O2GOffersTable offersTable = (O2GOffersTable)manager.getTable(O2GTableType.Offers);

            offersTable.subscribeUpdate(O2GTableUpdateType.Update, this);
        }
示例#42
0
 /// <summary>
 /// Get initial Trades state
 /// </summary>
 /// <param name="tableManager"></param>
 /// <returns>TradesTable</returns>
 private static O2GTradesTable GetTradesTable(O2GTableManager tableManager)
 {
     O2GTradesTable tradesTable = null;
     tradesTable = (O2GTradesTable)tableManager.getTable(O2GTableType.Trades);
     return tradesTable;
 }