/// <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(); }
/// <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); }
/// <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(); }
/// <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(); }
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); }
/// <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(); }
/// <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); }
public void Dispose() { UnInitialize(); _messageLoopOperator = null; }
/// <summary> /// Constructor. /// </summary> public MBTradingQuote(BackgroundMessageLoopOperator messageLoopOperator) {// Calls to the COM must be done in the requestMessage loop operator. _messageLoopOperator = messageLoopOperator; }