Exemple #1
0
        /// <summary>
        /// Configure connection using <see cref="ConnectorWindow"/>.
        /// </summary>
        /// <param name="adapter">The connection.</param>
        /// <param name="owner">UI thread owner.</param>
        /// <param name="autoConnect">Auto connect.</param>
        /// <returns><see langword="true"/> if the specified connection was configured, otherwise, <see langword="false"/>.</returns>
        public static bool Configure(this BasketMessageAdapter adapter, Window owner, ref bool autoConnect)
        {
            if (adapter == null)
            {
                throw new ArgumentNullException(nameof(adapter));
            }

            if (owner == null)
            {
                throw new ArgumentNullException(nameof(owner));
            }

            var wnd = new ConnectorWindow();

            foreach (var a in Adapters)
            {
                AddConnectorInfo(wnd, a);
            }

            wnd.Adapter     = (BasketMessageAdapter)adapter.Clone();
            wnd.AutoConnect = autoConnect;

            if (!wnd.ShowModal(owner))
            {
                return(false);
            }

            adapter.Load(wnd.Adapter.Save());
            autoConnect = wnd.AutoConnect;

            return(true);
        }
Exemple #2
0
        /// <summary>
        /// Configure connection using <see cref="ConnectorWindow"/>.
        /// </summary>
        /// <param name="adapter">The connection.</param>
        /// <param name="owner">UI thread owner.</param>
        /// <returns><see langword="true"/> if the specified connection was configured, otherwise, <see langword="false"/>.</returns>
        public static bool Configure(this BasketMessageAdapter adapter, Window owner)
        {
            var             autoConnect = false;
            SettingsStorage settings    = null;

            return(adapter.Configure(owner, ref autoConnect, ref settings));
        }
Exemple #3
0
        /// <summary>
        /// Configure connection using <see cref="ConnectorWindow"/>.
        /// </summary>
        /// <param name="adapter">The connection.</param>
        /// <param name="owner">UI thread owner.</param>
        /// <param name="autoConnect">Auto connect.</param>
        /// <returns><see langword="true"/> if the specified connection was configured, otherwise, <see langword="false"/>.</returns>
        public static bool Configure(this BasketMessageAdapter adapter, Window owner, ref bool autoConnect)
        {
            if (adapter == null)
            {
                throw new ArgumentNullException(nameof(adapter));
            }

            if (owner == null)
            {
                throw new ArgumentNullException(nameof(owner));
            }

            var wnd = new ConnectorWindow();

            wnd.ConnectorsInfo.AddRange(_customConnections);

            AddConnectorInfo <AlfaDirectMessageAdapter>(wnd);
            AddConnectorInfo <BarChartMessageAdapter>(wnd);
            AddConnectorInfo <BitStampMessageAdapter>(wnd);
            AddConnectorInfo <BlackwoodMessageAdapter>(wnd);
            AddConnectorInfo <BtceMessageAdapter>(wnd);
            AddConnectorInfo <CqgComMessageAdapter>(wnd);
            AddConnectorInfo <CqgContinuumMessageAdapter>(wnd);
            AddConnectorInfo <ETradeMessageAdapter>(wnd);
            AddConnectorInfo <FixMessageAdapter>(wnd);
            AddConnectorInfo <InteractiveBrokersMessageAdapter>(wnd);
            AddConnectorInfo <IQFeedMarketDataMessageAdapter>(wnd);
            AddConnectorInfo <ItchMessageAdapter>(wnd);
            AddConnectorInfo <LmaxMessageAdapter>(wnd);
            AddConnectorInfo <MicexMessageAdapter>(wnd);
            AddConnectorInfo <OandaMessageAdapter>(wnd);
            AddConnectorInfo <OpenECryMessageAdapter>(wnd);
            AddConnectorInfo <PlazaMessageAdapter>(wnd);
            AddConnectorInfo <LuaFixTransactionMessageAdapter>(wnd);
            AddConnectorInfo <LuaFixMarketDataMessageAdapter>(wnd);
            AddConnectorInfo <QuikTrans2QuikAdapter>(wnd);
            AddConnectorInfo <QuikDdeAdapter>(wnd);
            AddConnectorInfo <RithmicMessageAdapter>(wnd);
            AddConnectorInfo <RssMarketDataMessageAdapter>(wnd);
            AddConnectorInfo <SmartComMessageAdapter>(wnd);
            AddConnectorInfo <SterlingMessageAdapter>(wnd);
            AddConnectorInfo <TransaqMessageAdapter>(wnd);
            AddConnectorInfo <TwimeMessageAdapter>(wnd);
            AddConnectorInfo <SpbExMessageAdapter>(wnd);

            wnd.Adapter     = (BasketMessageAdapter)adapter.Clone();
            wnd.AutoConnect = autoConnect;

            if (!wnd.ShowModal(owner))
            {
                return(false);
            }

            adapter.Load(wnd.Adapter.Save());
            autoConnect = wnd.AutoConnect;

            return(true);
        }
Exemple #4
0
        /// <summary>
        /// Configure connection using <see cref="ConnectorWindow"/>.
        /// </summary>
        /// <param name="adapter">The connection.</param>
        /// <param name="owner">UI thread owner.</param>
        /// <param name="autoConnect">Auto connect.</param>
        /// <returns><see langword="true"/> if the specified connection was configured, otherwise, <see langword="false"/>.</returns>
        public static bool Configure(this BasketMessageAdapter adapter, Window owner, ref bool autoConnect)
        {
            if (adapter == null)
            {
                throw new ArgumentNullException(nameof(adapter));
            }

            if (owner == null)
            {
                throw new ArgumentNullException(nameof(owner));
            }

            var wnd = new ConnectorWindow();

            wnd.ConnectorsInfo.AddRange(_customConnections);

            AddConnectorInfo(wnd, typeof(AlfaDirectMessageAdapter));
            AddConnectorInfo(wnd, typeof(BarChartMessageAdapter));
            AddConnectorInfo(wnd, typeof(BitStampMessageAdapter));
            AddConnectorInfo(wnd, typeof(BlackwoodMessageAdapter));
            AddConnectorInfo(wnd, typeof(BtceMessageAdapter));
            AddConnectorInfo(wnd, typeof(CQGMessageAdapter));
            AddConnectorInfo(wnd, typeof(ETradeMessageAdapter));
            AddConnectorInfo(wnd, typeof(FixMessageAdapter));
            AddConnectorInfo(wnd, typeof(InteractiveBrokersMessageAdapter));
            AddConnectorInfo(wnd, typeof(IQFeedMarketDataMessageAdapter));
            AddConnectorInfo(wnd, typeof(ItchMessageAdapter));
            AddConnectorInfo(wnd, typeof(LmaxMessageAdapter));
            AddConnectorInfo(wnd, typeof(MicexMessageAdapter));
            AddConnectorInfo(wnd, typeof(OandaMessageAdapter));
            AddConnectorInfo(wnd, typeof(OpenECryMessageAdapter));
            AddConnectorInfo(wnd, typeof(PlazaMessageAdapter));
            AddConnectorInfo(wnd, typeof(LuaFixTransactionMessageAdapter));
            AddConnectorInfo(wnd, typeof(LuaFixMarketDataMessageAdapter));
            AddConnectorInfo(wnd, typeof(QuikTrans2QuikAdapter));
            AddConnectorInfo(wnd, typeof(QuikDdeAdapter));
            AddConnectorInfo(wnd, typeof(RithmicMessageAdapter));
            AddConnectorInfo(wnd, typeof(RssMarketDataMessageAdapter));
            AddConnectorInfo(wnd, typeof(SmartComMessageAdapter));
            AddConnectorInfo(wnd, typeof(SterlingMessageAdapter));
            AddConnectorInfo(wnd, typeof(TransaqMessageAdapter));
            AddConnectorInfo(wnd, typeof(TwimeMessageAdapter));

            wnd.Adapter     = (BasketMessageAdapter)adapter.Clone();
            wnd.AutoConnect = autoConnect;

            if (!wnd.ShowModal(owner))
            {
                return(false);
            }

            adapter.Load(wnd.Adapter.Save());
            autoConnect = wnd.AutoConnect;

            return(true);
        }
        public StrategyConnector()
        {
            EntityFactory = _entityFactory = new StrategyEntityFactory();

            SessionHolder = BasketSessionHolder = new BasketSessionHolder(TransactionIdGenerator);

            TransactionAdapter = new BasketMessageAdapter(MessageAdapterTypes.Transaction, BasketSessionHolder);
            MarketDataAdapter  = new BasketMessageAdapter(MessageAdapterTypes.MarketData, BasketSessionHolder);

            ApplyMessageProcessor(MessageDirections.In, true, true);
            ApplyMessageProcessor(MessageDirections.Out, true, true);
        }
        public StudioConnector()
        {
            EntityFactory = new StudioEntityFactory(this);

            SessionHolder = _sessionHolder = new BasketSessionHolder(TransactionIdGenerator);

            MarketDataAdapter  = _marketDataAdapter = new StudioMarketDataAdapter(_sessionHolder);
            TransactionAdapter = _transactionAdapter = new BasketMessageAdapter(MessageAdapterTypes.Transaction, _sessionHolder);

            ApplyMessageProcessor(MessageDirections.In, true, false);
            ApplyMessageProcessor(MessageDirections.In, false, true);
            ApplyMessageProcessor(MessageDirections.Out, true, true);

            _transactionAdapter.NewOutMessage += TransactionAdapterNewOutMessage;

            CreateEmulationSessionHolder();

            var cmdSvc = ConfigManager.GetService <IStudioCommandService>();

            cmdSvc.Register <LookupSecuritiesCommand>(this, false, cmd => LookupSecurities(cmd.Criteria));
            cmdSvc.Register <RequestTradesCommand>(this, false, cmd => new NewTradesCommand(Trades).Process(this));
            //cmdSvc.Register<RequestPortfoliosCommand>(this, cmd => Portfolios.ForEach(pf => new PortfolioCommand(pf, true).Process(this)));
            cmdSvc.Register <RequestPositionsCommand>(this, false, cmd => Positions.ForEach(pos => new PositionCommand(CurrentTime, pos, true).Process(this)));
            cmdSvc.Register <RequestMarketDataCommand>(this, false, cmd => AddExport(cmd.Security, cmd.Type));
            cmdSvc.Register <RefuseMarketDataCommand>(this, false, cmd => RemoveExport(cmd.Security, cmd.Type));

            //NewPortfolios += portfolios => portfolios.ForEach(pf => new PortfolioCommand(pf, true).Process(this));
            PortfoliosChanged      += portfolios => portfolios.ForEach(pf => new PortfolioCommand(pf, false).Process(this));
            NewPositions           += positions => positions.ForEach(pos => new PositionCommand(CurrentTime, pos, true).Process(this));
            PositionsChanged       += positions => positions.ForEach(pos => new PositionCommand(CurrentTime, pos, false).Process(this));
            NewTrades              += trades => new NewTradesCommand(trades).Process(this);
            NewNews                += news => new NewNewsCommand(news).Process(this);
            LookupSecuritiesResult += securities => new LookupSecuritiesResultCommand(securities).Process(this);
            //LookupPortfoliosResult += portfolios => new LookupPortfoliosResultCommand(portfolios).Process(this);

            UpdateSecurityLastQuotes = false;
            UpdateSecurityByLevel1   = false;
        }
Exemple #7
0
        /// <summary>
        /// Configure connection using <see cref="ConnectorWindow"/>.
        /// </summary>
        /// <param name="adapter">The connection.</param>
        /// <param name="owner">UI thread owner.</param>
        /// <returns><see langword="true"/> if the specified connection was configured, otherwise, <see langword="false"/>.</returns>
        public static bool Configure(this BasketMessageAdapter adapter, Window owner)
        {
            var autoConnect = false;

            return(adapter.Configure(owner, ref autoConnect));
        }
Exemple #8
0
        static void Main(string[] args)
        {
            _logManager = new LogManager();
            _logManager.Listeners.Add(new FileLogListener("log.log")
            {
                LogDirectory = "Logs"
            });

            BasketMessageAdapter realAdapter = new BasketMessageAdapter(new MillisecondIncrementalIdGenerator());


            // Можно использовать два варианта создания коннектора
            // 1 вариант. Из файла настроек connection.xml. Чтобы создать файл настроек запустите пример
            // SampleRealTimeEmulation из поставочного комплекта s# и создайте соединение для коннектора
            // Quik. Обратите внимание, что нужно добавлять только MarketDataAdapter, т.к. в нашем случае
            // используется специальный эмуляционный TransactionAdapter, который создает сам RealTimeEmulationTrader.
            // 2 вариант. Самостоятельно создаем адаптер
            // В этом примере показаны два варианта.

            if (File.Exists(_settingsFile))
            {
                // Создаем адаптер из файла настроек
                realAdapter.Load(new XmlSerializer <SettingsStorage>().Deserialize(_settingsFile));
                realAdapter.InnerAdapters.ForEach(a => a.RemoveTransactionalSupport());
            }
            else
            {
                // Создаем адаптер "вручную
                realAdapter.AssociatedBoardCode = "ALL";
                realAdapter.LogLevel            = LogLevels.Inherit;

                realAdapter.InnerAdapters.Add(new LuaFixMarketDataMessageAdapter(realAdapter.TransactionIdGenerator)
                {
                    Dialect              = StockSharp.Fix.FixDialects.Default,
                    SenderCompId         = "quik",
                    TargetCompId         = "StockSharpMD",
                    Login                = "******",
                    Password             = "******".To <SecureString>(),
                    Address              = "localhost:5001".To <EndPoint>(),
                    RequestAllPortfolios = false,
                    RequestAllSecurities = true,
                    IsResetCounter       = true,
                    ReadTimeout          = TimeSpan.Zero,
                    WriteTimeout         = TimeSpan.Zero,
                    HeartbeatInterval    = TimeSpan.Zero,
                    SupportedMessages    = new MessageTypes[] { MessageTypes.MarketData, MessageTypes.SecurityLookup, MessageTypes.ChangePassword },
                    AssociatedBoardCode  = "ALL",
                    LogLevel             = LogLevels.Inherit
                });
            }

            // Добавляем адаптер к коннектору
            _connector = new RealTimeEmulationTrader <IMessageAdapter>(realAdapter);
            _connector.EmulationAdapter.Emulator.Settings.TimeZone    = TimeHelper.Est;
            _connector.EmulationAdapter.Emulator.Settings.ConvertTime = true;

            _logManager.Sources.Add(_connector);

            _logManager.Sources.Add(_connector);

            _handler = new AutoResetEvent(false);

            bool isHandlerSet = false;

            var _sendCancelOrders = new List <Order>();

            _connector.Connected += () =>
            {
                Console.WriteLine("Соединение установлено!");
            };

            _connector.Disconnected += () =>
            {
                Console.WriteLine("Соединение разорвано!");
                Console.WriteLine("Для выхода нажмите Q и Enter.");
            };

            _connector.NewPortfolios += portfolios =>
            {
                portfolios.ForEach(portfolio =>
                {
                    Console.WriteLine("Получен портфель: {0}", portfolio.Name);
                    _connector.RegisterPortfolio(portfolio);
                    _portfolio = portfolio;
                });
            };

            _connector.NewSecurities += securities =>
            {
                securities.ForEach(s =>
                {
                    if (s.Id == _securityId)
                    {
                        _security = s;
                        _connector.RegisterSecurity(s);
                        _handler.Set();
                    }
                });
            };

            _connector.ValuesChanged += (security, values, stime, ltime) =>
            {
                //TODO
            };

            _connector.PortfoliosChanged += portfolios =>
            {
                Debug.WriteLine("Изменение состояния портфелей.");

                var sb = new StringBuilder();

                portfolios.ForEach(p =>
                {
                    sb.AppendFormat("Name: {0}{1}", p.Name, Environment.NewLine);
                    sb.AppendFormat("AveragePrice: {0}{1}", p.AveragePrice, Environment.NewLine);
                    sb.AppendFormat("BeginValue: {0}{1}", p.BeginValue, Environment.NewLine);
                    sb.AppendFormat("BlockedValue: {0}{1}", p.BlockedValue, Environment.NewLine);
                    sb.AppendFormat("Board: {0}{1}", p.Board, Environment.NewLine);
                    sb.AppendFormat("Commission: {0}{1}", p.Commission, Environment.NewLine);
                    sb.AppendFormat("CurrentPrice: {0}{1}", p.CurrentPrice, Environment.NewLine);
                    sb.AppendFormat("CurrentValue: {0}{1}", p.CurrentValue, Environment.NewLine);
                    sb.AppendFormat("Leverage: {0}{1}", p.Leverage, Environment.NewLine);
                    sb.AppendFormat("RealizedPnL: {0}{1}", p.RealizedPnL, Environment.NewLine);
                    sb.AppendFormat("UnrealizedPnL: {0}{1}", p.UnrealizedPnL, Environment.NewLine);
                    sb.AppendFormat("VariationMargin: {0}{1}", p.VariationMargin, Environment.NewLine);

                    Debug.WriteLine(sb.ToString());

                    sb.Clear();
                });
            };

            _connector.NewPositions += positions =>
            {
                Debug.WriteLine("Новые позиции.");
                PrintPositions(positions);
            };

            _connector.PositionsChanged += positions =>
            {
                Debug.WriteLine("Изменение позиций.");
                PrintPositions(positions);
            };

            _connector.NewOrders += orders =>
            {
                orders.ForEach(o => Debug.WriteLine(string.Format("NewOrders. {0}", o)));
            };

            _connector.OrdersChanged += orders =>
            {
                orders.ForEach(o =>
                {
                    Debug.WriteLine(string.Format("OrdersChanged. {0}. IsMatched: {1}, IsCanceled : {2}", o, o.IsMatched().ToString(), o.IsCanceled().ToString()));
                });
            };

            _connector.OrdersRegisterFailed += fails =>
            {
                fails.ForEach(f => Debug.WriteLine(string.Format("OrdersRegisterFailed. {0}", f.Error.Message)));
            };

            _connector.OrdersCancelFailed += fails =>
            {
                fails.ForEach(f => Debug.WriteLine(string.Format("OrdersCancelFailed. {0}", f.Error.Message)));
            };

            _connector.NewMyTrades += trades =>
            {
                trades.ForEach(t => Debug.WriteLine(string.Format("NewMyTrades. {0}", t.ToString())));
            };

            _connector.Connect();

            _handler.WaitOne();

            Console.WriteLine("Инструмент и портфель получены");


            var order = new Order()
            {
                Security  = _security,
                Portfolio = _portfolio,
                Type      = OrderTypes.Market,
                Direction = Sides.Buy,
                Volume    = 1
            };

            _connector.RegisterOrder(order);

            Console.WriteLine("ПОСЛАНА ЗАЯВКА");

            Console.Read();

            _connector.Disconnect();

            // Ждет, пока последовательно не будут нажаты клаваши Q и Enter,
            // после чего программа завершит работу
            while (Console.ReadLine().ToUpper() != "Q")
            {
                ;
            }
        }