Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        public void RestoreState(SerializationInfoEx info)
        {
            Clear();

            lock (this)
            {
                foreach (ChartPane pane in GeneralHelper.EnumerableToList <ChartPane>(_panes))
                {
                    if (pane is SlaveChartPane)
                    {
                        this.RemoveSlavePane((SlaveChartPane)pane);
                    }
                }

                this.Name = info.GetString("Name");

                this.hScrollBar.Visible = info.GetBoolean("hScrollBar.Visible");
                this.vScrollBar.Visible = info.GetBoolean("vScrollBar.Visible");
                toolStripButtonShowScrollbars.Checked = this.hScrollBar.Visible;

                List <SerializationInfoEx> infos = info.GetValue <List <SerializationInfoEx> >("panesStates");
                for (int i = 0; i < infos.Count; i++)
                {
                    if (i == 0)
                    {
                        MasterPane.RestoreState(infos[0], true);
                    }
                    else
                    {
                        SlaveChartPane pane = CreateSlavePane("", SlaveChartPane.MasterPaneSynchronizationModeEnum.XAxis, 100);
                        pane.RestoreState(infos[i], true);
                    }
                }
            }
        }
        /// <summary>
        /// Dispose.
        /// </summary>
        public override void Dispose()
        {
            List <ClientEventsHandler>   clients;
            List <EventSubscriptionInfo> subscriptions;

            lock (_syncRoot)
            {
                subscriptions = GeneralHelper.EnumerableToList <EventSubscriptionInfo>(_eventSubscriptions.Values);

                // Clear methods first, thus removing clients is faster.
                _eventSubscriptions.Clear();

                // Take care to do an optimized hot swap teardown.
                clients = GeneralHelper.EnumerableToList(_clients.Values);

                _clients.Clear();
            }

            foreach (EventSubscriptionInfo methodSubscription in subscriptions)
            {
                methodSubscription.Dispose();
            }

            foreach (ClientEventsHandler clientInfo in clients)
            {
                clientInfo.Dispose();
            }

            base.Dispose();
        }
Beispiel #3
0
        void UpdatePositions()
        {
            OrderExecutionSourceStub stub    = _stub;
            FXCMConnectionManager    manager = Manager;

            if (stub == null || manager == null)
            {
                return;
            }
            List <AccountInfo> accounts = stub.Accounts;

            if (accounts.Count == 1)
            {// Update all positions on the account.
                // When a position is not returned, it means no position on that symbol.
                List <PositionInfo> positionsInfosList = manager.GetPositions();

                Dictionary <string, PositionInfo> inputPositionsInfos = new Dictionary <string, PositionInfo>();

                lock (this)
                {
                    foreach (PositionInfo info in positionsInfosList)
                    {
                        inputPositionsInfos.Add(info.Symbol.Name, info);

                        // Update history with latest input.
                        _positionsInfos[info.Symbol.Name] = info;
                    }

                    positionsInfosList.Clear();

                    // Check if any positions were not reported (meaning they have 0 value on them).
                    foreach (PositionInfo info in GeneralHelper.EnumerableToList <PositionInfo>(_positionsInfos.Values))
                    {
                        if (inputPositionsInfos.ContainsKey(info.Symbol.Name) == false &&
                            (info.Volume.HasValue == false || info.Volume != 0))
                        {// 0 position, update.
                            PositionInfo updatedInfo = info;
                            updatedInfo.Volume = 0;
                            _positionsInfos[updatedInfo.Symbol.Name] = updatedInfo;
                            positionsInfosList.Add(updatedInfo);
                        }
                        else
                        {
                            positionsInfosList.Add(info);
                        }
                    }
                }

                stub.UpdatePositionsInfo(accounts[0], positionsInfosList.ToArray());
            }
            else
            {
                SystemMonitor.OperationError("Failed to establish account for positions update.");
            }
        }
        // >>
        public void AllOrders(int operationID, string symbol, int[] openMagicIDs, int[] openTickets,
                              int[] historicalMagicIDs, int[] historicalTickets, bool operationResult)
        {
            TracerHelper.Trace(symbol);

            try
            {
                lock (this)
                {
                    List <string> knownOrdersIds = GeneralHelper.EnumerableToList <string>(_orders.Keys);

                    for (int i = 0; i < openTickets.Length; i++)
                    {
                        string orderId = openTickets[i].ToString();
                        knownOrdersIds.Remove(orderId);

                        if (_orders.ContainsKey(orderId) == false ||
                            _orders[orderId].HasValue == false ||
                            _orders[orderId].Value.State != OrderStateEnum.Executed)
                        {
                            _orders[orderId] = null;
                            _pendingOrdersInformations.Add(orderId);
                        }
                    }

                    for (int i = 0; i < historicalTickets.Length; i++)
                    {
                        string orderId = historicalTickets[i].ToString();
                        knownOrdersIds.Remove(orderId);

                        if (_orders.ContainsKey(orderId) == false ||
                            _orders[orderId].HasValue == false ||
                            _orders[orderId].Value.State != OrderStateEnum.Closed)
                        {
                            _orders[orderId] = null;
                            _pendingOrdersInformations.Add(orderId);
                        }
                    }

                    foreach (string id in knownOrdersIds)
                    {// Make sure to remove non existing ones.
                        _orders.Remove(id);
                    }
                }
            }
            catch (Exception ex)
            {// Make sure we handle any possible unexpected exceptions, as otherwise they bring the
                // entire package (MT4 included) down with a bad error.
                SystemMonitor.Error(ex.Message);
            }
        }
        void UpdateUI()
        {
            this.Enabled = _provider != null;
            if (_provider == null)
            {
                return;
            }

            List <Position> positions;

            lock (_provider.TradeEntities)
            {
                positions = GeneralHelper.EnumerableToList <Position>(_provider.TradeEntities.PositionsUnsafe);
            }

            if (_provider.DefaultAccount != null)
            {
                if (toolStripComboBoxAccount.Items.Count == 0)
                {
                    toolStripComboBoxAccount.Items.Add(_provider.DefaultAccount.Info.Name);
                    toolStripComboBoxAccount.SelectedIndex = 0;
                }
            }

            for (int i = 0; i < positions.Count; i++)
            {
                if (listView.Items.Count <= i)
                {
                    ListViewItem item = new ListViewItem();
                    item.SubItems.Clear();
                    for (int j = 0; j < listView.Columns.Count; j++)
                    {
                        item.SubItems.Add(string.Empty);
                    }

                    listView.Items.Add(item);
                }

                SetItemAsPosition(listView.Items[i], positions[i]);
            }

            while (listView.Items.Count > positions.Count)
            {
                listView.Items.RemoveAt(listView.Items.Count - 1);
            }
        }
        private void toolStripButtonAddSymbol_Click(object sender, EventArgs e)
        {
            if (_dataDelivery != null && _provider != null)
            {
                Dictionary <Symbol, TimeSpan[]> symbols = _dataDelivery.SearchSymbols(toolStripTextBoxSymbol.Text);

                if (symbols == null || symbols.Count == 0)
                {
                    MessageBox.Show("Failed to find position.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (symbols.Count > 1)
                {
                    MessageBox.Show("More than one symbol found containing [" + toolStripTextBoxSymbol.Text + "]. Please specify symbol more precisely.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                _provider.TradeEntities.ObtainPositionBySymbol(GeneralHelper.EnumerableToList <Symbol>(symbols.Keys)[0]);
            }
        }