/// <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(); }
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]); } }