/// <summary>
        ///
        /// </summary>
        public void Dispose()
        {
            lock (this)
            {
                if (_orders != null)
                {
                    _orders.UnInitialize();
                    _orders.Dispose();
                    _orders = null;
                }

                if (_adapter != null)
                {
                    _adapter = null;
                }

                if (_core != null)
                {
                    _desk = null;
                    _core = null;
                }

                if (_messageLoopOperator != null)
                {
                    _messageLoopOperator.Stop();
                    _messageLoopOperator.Dispose();
                    _messageLoopOperator = null;
                }

                ChangeOperationalState(OperationalStateEnum.Disposed);
            }

            //GC.Collect();
        }
Пример #2
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public MBTradingOrders(BackgroundMessageLoopOperator messageLoopOperator)
        {
            _messageLoopOperator = messageLoopOperator;
            _operationStub       = new OperationPerformerStub();

            ChangeOperationalState(OperationalStateEnum.Constructed);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="symbol">Pass empty or null to extract all positions.</param>
        public List <PositionInfo> GetPositions(/*string requestedSymbol*/)
        {
            List <PositionInfo> result = new List <PositionInfo>();

            GeneralHelper.DefaultDelegate delegateInstance = delegate()
            {
                try
                {
                    result = Managed_ProcessPositions();
                }
                catch (Exception ex)
                {
                    SystemMonitor.OperationError("Failed to process FXCM positions.", ex);
                }
            };

            BackgroundMessageLoopOperator messageLoopOperator = _messageLoopOperator;

            if (messageLoopOperator != null)
            {
                messageLoopOperator.Invoke(delegateInstance, TimeSpan.FromSeconds(60));
            }

            return(result);
        }
        /// <summary>
        /// Perform logout.
        /// </summary>
        public bool Logout()
        {
            ChangeOperationalState(OperationalStateEnum.NotOperational);

            GeneralHelper.DefaultDelegate del = delegate()
            {
                if (_core != null && _desk.IsLoggedIn())
                {
                    Managed_Unsubscribe();

                    _desk.Logout();

                    _desk = null;
                    _core = null;
                }
            };

            BackgroundMessageLoopOperator messageLoopOperator = _messageLoopOperator;

            if (messageLoopOperator == null || messageLoopOperator.Invoke(del, TimeSpan.FromSeconds(180)) == false)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        ///
        /// </summary>
        public List <AccountInfo> GetAvailableAccounts(int advisedDecimalsPrecision)
        {
            List <AccountInfo> result = new List <AccountInfo>();

            TradeDeskAut desk = _desk;

            if (desk == null)
            {
                return(result);
            }

            GeneralHelper.DefaultDelegate delegateInstance = delegate()
            {
                try
                {
                    // Perform update.
                    TableAut accountsTable = (FXCore.TableAut)desk.FindMainTable("accounts");
                    foreach (RowAut item in (RowsEnumAut)accountsTable.Rows)
                    {
                        string id = (string)item.CellValue("AccountID");

                        if (string.IsNullOrEmpty(id))
                        {
                            SystemMonitor.OperationWarning("Account with null/empty id found.");
                            continue;
                        }

                        AccountInfo info = new AccountInfo();
                        // Have the accounts with default empty Guids.
                        //info.Guid = Guid.Empty;
                        info.Id = id;

                        info.Name       = "FXCM." + (string)item.CellValue("AccountName");
                        info.Balance    = Math.Round(new decimal((double)item.CellValue("Balance")), advisedDecimalsPrecision);
                        info.Equity     = Math.Round(new decimal((double)item.CellValue("Equity")), advisedDecimalsPrecision);
                        info.Margin     = Math.Round(new decimal((double)item.CellValue("UsableMargin")), advisedDecimalsPrecision);
                        info.Profit     = Math.Round(new decimal((double)item.CellValue("GrossPL")), advisedDecimalsPrecision);
                        info.FreeMargin = Math.Round(new decimal((double)item.CellValue("UsableMargin")), advisedDecimalsPrecision);
                        info.Company    = "FXCM";
                        info.Server     = this._serviceUrl;

                        result.Add(info);
                    }
                }
                catch (Exception ex)
                {
                    SystemMonitor.OperationError(GeneralHelper.GetExceptionMessage(ex));
                }
            };

            BackgroundMessageLoopOperator messageLoopOperator = _messageLoopOperator;

            if (messageLoopOperator != null)
            {
                messageLoopOperator.Invoke(delegateInstance, TimeSpan.FromSeconds(60));
            }

            return(result);
        }
Пример #6
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public MBTradingConnectionManager(MBTradingAdapter adapter)
        {
            ChangeOperationalState(OperationalStateEnum.Constructed);

            _adapter             = adapter;
            _messageLoopOperator = new BackgroundMessageLoopOperator(false);
            _quotes  = new MBTradingQuote(_messageLoopOperator);
            _history = new MBTradingHistory(_messageLoopOperator);
            _orders  = new MBTradingOrders(_messageLoopOperator);
        }
        //volatile MBTradingQuote _quotes;
        //public MBTradingQuote Quotes
        //{
        //    get { return _quotes; }
        //}

        //volatile MBTradingHistory _history;
        //public MBTradingHistory History
        //{
        //    get { return _history; }
        //}

        //volatile MBTradingOrders _orders;
        ///// <summary>
        /////
        ///// </summary>
        //public MBTradingOrders Orders
        //{
        //    get { return _orders; }
        //}

        //MBTradingAdapter _adapter;

        /// <summary>
        /// Constructor.
        /// </summary>
        public MBTradingTestConnectionManager()
        {
            ChangeOperationalState(OperationalStateEnum.Constructed);

            _messageLoopOperator = new BackgroundMessageLoopOperator(false);
            //_quotes = new MBTradingQuote(_messageLoopOperator);
            //_history = new MBTradingHistory(_messageLoopOperator);
            //_orders = new MBTradingOrders(_messageLoopOperator);

            _messageLoopOperator.Start();
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        public FXCMConnectionManager(FXCMAdapter adapter)
        {
            ChangeOperationalState(OperationalStateEnum.Constructed);

            _subscriptionResponse = -1;
            _adapter             = adapter;
            _messageLoopOperator = new BackgroundMessageLoopOperator(false);
            _orders = new FXCMOrders(_messageLoopOperator);

            _messageLoopOperator.Start();
        }
Пример #9
0
        /// <summary>
        ///
        /// </summary>
        public void Dispose()
        {
            try
            {
                lock (this)
                {
                    if (_quotes != null)
                    {
                        _quotes.Dispose();
                        _quotes = null;
                    }

                    if (_history != null)
                    {
                        _history.Dispose();
                        _history = null;
                    }

                    if (_orders != null)
                    {
                        _orders.UnInitialize();
                        _orders.Dispose();
                        _orders = null;
                    }

                    if (_adapter != null)
                    {
                        _adapter = null;
                    }

                    if (_communicationManager != null)
                    {
                        _communicationManager.OnLogonSucceed -= new IMbtComMgrEvents_OnLogonSucceedEventHandler(_communicationManager_OnLogonSucceed);
                        _communicationManager = null;
                    }

                    if (_messageLoopOperator != null)
                    {
                        _messageLoopOperator.Stop();
                        _messageLoopOperator.Dispose();
                        _messageLoopOperator = null;
                    }

                    ChangeOperationalState(OperationalStateEnum.Disposed);
                }
            }
            catch (Exception ex)
            {
                SystemMonitor.OperationError(ex.Message);
            }

            //GC.Collect();
        }
Пример #10
0
        public void Dispose()
        {
            if (_historyClient != null)
            {
                _historyClient.OnDataEvent -= new _IMbtHistEvents_OnDataEventEventHandler(_historyClient_OnDataEvent);
                _historyClient.OnError     -= new _IMbtHistEvents_OnErrorEventHandler(_historyClient_OnError);
                _historyClient              = null;
            }

            if (_messageLoopOperator != null)
            {
                _messageLoopOperator = null;
            }
        }
        /// <summary>
        ///
        /// </summary>
        public List <DataBar> GetHistory(string forexPair, string period, DateTime lowerBound, DateTime upperBound)
        {
            bool           keepIterating          = true;
            List <DataBar> candlestickHistoryList = new List <DataBar>();

            GeneralHelper.DefaultDelegate delegateInstance = delegate()
            {
                TradeDeskAut desk = _desk;
                if (desk == null)
                {
                    return;
                }

                FXCore.IMarketRateEnumAut japaneseCandlestick;
                while (keepIterating)
                {
                    japaneseCandlestick = (FXCore.IMarketRateEnumAut)desk.GetPriceHistoryUTC(forexPair, period, lowerBound, upperBound, -1, false, true);

                    foreach (FXCore.IMarketRateAut marketRate in japaneseCandlestick)
                    {
                        DataBar dataBar = new DataBar(marketRate.StartDate, new decimal(marketRate.AskOpen),
                                                      new decimal(marketRate.AskHigh), new decimal(marketRate.AskLow), new decimal(marketRate.AskClose), 0);

                        candlestickHistoryList.Add(dataBar);

                        lowerBound = marketRate.StartDate;
                    }

                    Thread.Sleep(100);

                    int i = japaneseCandlestick.Size;

                    keepIterating = i > 1 && upperBound.CompareTo(lowerBound) >= 0;

                    lowerBound.AddTicks(1);
                }
            };

            BackgroundMessageLoopOperator messageLoopOperator = _messageLoopOperator;

            if (messageLoopOperator != null)
            {
                messageLoopOperator.Invoke(delegateInstance, TimeSpan.FromSeconds(60));
            }

            return(candlestickHistoryList);
        }
Пример #12
0
        /// <summary>
        ///
        /// </summary>
        public void Dispose()
        {
            try
            {
                if (_quotesClient != null)
                {
                    _quotesClient.UnadviseAll(this);
                    _quotesClient = null;
                }
            }
            catch (Exception ex)
            {
                SystemMonitor.OperationError(ex.Message);
            }

            _messageLoopOperator = null;
        }
        /// <summary>
        ///
        /// </summary>
        public void Dispose()
        {
            lock (this)
            {
                //if (_quotes != null)
                //{
                //    _quotes.Dispose();
                //    _quotes = null;
                //}

                //if (_history != null)
                //{
                //    _history.Dispose();
                //    _history = null;
                //}

                //if (_orders != null)
                //{
                //    _orders.UnInitialize();
                //    _orders.Dispose();
                //    _orders = null;
                //}

                //if (_adapter != null)
                //{
                //    _adapter = null;
                //}

                if (_communicationManager != null)
                {
                    //_communicationManager.OnLogonSucceed -= new IMbtComMgrEvents_OnLogonSucceedEventHandler(_communicationManager_OnLogonSucceed);
                    _communicationManager = null;
                }

                if (_messageLoopOperator != null)
                {
                    _messageLoopOperator.Stop();
                    _messageLoopOperator.Dispose();
                    _messageLoopOperator = null;
                }

                ChangeOperationalState(OperationalStateEnum.Disposed);
            }

            //GC.Collect();
        }
        /// <summary>
        ///
        /// </summary>
        public void Dispose()
        {
            ChangeOperationalState(OperationalStateEnum.Disposed);

            _desk = null;
            _core = null;
            _tradeDeskEventsSink = null;

            BackgroundMessageLoopOperator messageLoopOperator = _messageLoopOperator;

            if (messageLoopOperator != null)
            {
                messageLoopOperator.Stop();
                messageLoopOperator.Dispose();
            }

            _messageLoopOperator = null;

            GC.Collect();
        }
Пример #15
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public MBTradingHistory(BackgroundMessageLoopOperator messageLoopOperator)
 {
     _messageLoopOperator = messageLoopOperator;
     _operationStub       = new OperationPerformerStub(this);
 }
        public object GetInstrumentData(string forexPair, string columnName)
        {
            object columnData = null;

            GeneralHelper.DefaultDelegate delegateInstance = delegate()
            {
                TradeDeskAut desk = _desk;
                if (desk == null)
                {
                    return;
                }

                FXCore.TableAut offersTable = (FXCore.TableAut)desk.FindMainTable("offers");
                if (offersTable == null)
                {
                    return;
                }

                switch (forexPair)
                {
                case "EUR/USD":
                    columnData = offersTable.CellValue(1, columnName);
                    break;

                case "USD/JPY":
                    columnData = offersTable.CellValue(2, columnName);
                    break;

                case "GBP/USD":
                    columnData = offersTable.CellValue(3, columnName);
                    break;

                case "USD/CHF":
                    columnData = offersTable.CellValue(4, columnName);
                    break;

                case "EUR/CHF":
                    columnData = offersTable.CellValue(5, columnName);
                    break;

                case "AUD/USD":
                    columnData = offersTable.CellValue(6, columnName);
                    break;

                case "USD/CAD":
                    columnData = offersTable.CellValue(7, columnName);
                    break;

                case "NZD/USD":
                    columnData = offersTable.CellValue(8, columnName);
                    break;

                case "EUR/GBP":
                    columnData = offersTable.CellValue(9, columnName);
                    break;

                case "EUR/JPY":
                    columnData = offersTable.CellValue(10, columnName);
                    break;

                case "GBP/JPY":
                    columnData = offersTable.CellValue(11, columnName);
                    break;

                case "GBP/CHF":
                    columnData = offersTable.CellValue(12, columnName);
                    break;
                }
            };

            BackgroundMessageLoopOperator messageLoopOperator = _messageLoopOperator;

            if (messageLoopOperator != null)
            {
                messageLoopOperator.Invoke(delegateInstance, TimeSpan.FromSeconds(60));
            }

            return(columnData);
        }
        /// <summary>
        ///
        /// </summary>
        public OrderInfo?SubmitOrder(AccountInfo accountInfo, Symbol symbol, OrderTypeEnum orderType, int volume,
                                     decimal?allowedSlippage, decimal?desiredPrice, decimal?takeProfit, decimal?stopLoss, out string operationResultMessage)
        {
            OrderInfo?order = null;

            operationResultMessage = string.Empty;
            string operationResultMessageCopy = string.Empty;

            GeneralHelper.DefaultDelegate delegateInstance = delegate()
            {
                try
                {
                    TradeDeskAut desk = _desk;
                    if (desk == null)
                    {
                        return;
                    }

                    bool   isBuy     = OrderInfo.TypeIsBuy(orderType);
                    double realValue = isBuy ? (double)GetInstrumentData(symbol.Name, "Ask") : (double)GetInstrumentData(symbol.Name, "Bid");

                    object orderId, psd;
                    object ocoStopOrderId = null, ocoProfitOrderId = null;

                    desk.CreateFixOrder(desk.FIX_OPENMARKET,
                                        "",
                                        realValue,
                                        realValue,
                                        (string)GetInstrumentData(symbol.Name, "QuoteID"),
                                        accountInfo.Id,
                                        symbol.Name,
                                        isBuy,
                                        volume,
                                        "",
                                        out orderId,
                                        out psd);

                    order = new OrderInfo(orderId.ToString(), symbol, orderType,
                                          OrderStateEnum.Executed, volume, new decimal(realValue), null,
                                          null, null, null, null, null, null, null, null, null, "ok", "1");

                    //check bid value...
                    if (stopLoss.HasValue)
                    {
                        double dValue = Decimal.ToDouble(stopLoss.Value);

                        desk.CreateFixOrder(desk.FIX_ENTRYSTOP,
                                            "",
                                            dValue,
                                            dValue,
                                            (string)GetInstrumentData(symbol.Name, "QuoteID"),
                                            accountInfo.Id,
                                            symbol.Name,
                                            !isBuy,
                                            volume,
                                            "",
                                            out ocoStopOrderId,
                                            out psd);
                    }

                    if (takeProfit.HasValue)
                    {
                        double dValue = Decimal.ToDouble(takeProfit.Value);

                        desk.CreateFixOrder(desk.FIX_ENTRYLIMIT,
                                            "",
                                            dValue,
                                            dValue,
                                            (string)GetInstrumentData(symbol.Name, "QuoteID"),
                                            accountInfo.Id,
                                            symbol.Name,
                                            !isBuy,
                                            volume,
                                            "",
                                            out ocoProfitOrderId,
                                            out psd);
                    }

                    //Create OCO.
                    if (stopLoss.HasValue && takeProfit.HasValue)
                    {
                        bool creationOk = true;
                        FXCore.OrdersIDEnumAut group = new FXCore.OrdersIDEnumAut();
                        group.Add((string)ocoProfitOrderId);
                        group.Add((string)ocoStopOrderId);
                        object _result = null;
                        object ocoid   = null;
                        desk.CreateOCO(group, out _result, out ocoid);

                        FXCore.OrdersBatchResultEnumAut result = (FXCore.OrdersBatchResultEnumAut)_result;
                        for (int i = 1; i <= result.Count; i++)
                        {
                            FXCore.OrderBatchResultAut res = (FXCore.OrderBatchResultAut)result.Item(i);
                            creationOk = creationOk && res.Success;

                            if (!creationOk)
                            {
                                //Ups throw an exception!!!  But what about the current order.
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    operationResultMessageCopy = GeneralHelper.GetExceptionMessage(ex);
                    SystemMonitor.OperationError(operationResultMessageCopy);
                }
            };

            BackgroundMessageLoopOperator messageOperator = _messageLoopOperator;

            if (messageOperator != null)
            {
                messageOperator.Invoke(delegateInstance, TimeSpan.FromSeconds(120));
            }
            operationResultMessage = operationResultMessageCopy;

            return(order);
        }
        /// <summary>
        /// Constructor.
        /// </summary>
        public FXCMConnectionManager()
        {
            ChangeOperationalState(OperationalStateEnum.Constructed);

            _messageLoopOperator = new BackgroundMessageLoopOperator(false);
        }
Пример #19
0
 public void Dispose()
 {
     UnInitialize();
     _messageLoopOperator = null;
 }
Пример #20
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public MBTradingQuote(BackgroundMessageLoopOperator messageLoopOperator)
 {// Calls to the COM must be done in the requestMessage loop operator.
     _messageLoopOperator = messageLoopOperator;
 }