예제 #1
0
		public MainWindow()
		{
			InitializeComponent();

			Title = Title.Put("IQFeed");

			Trader = new IQFeedTrader();
			//{
			//	LogLevel = LogLevels.Debug,
			//	MarketDataAdapter = { LogLevel = LogLevels.Debug }
			//};

			ConfigManager.RegisterService<IConnector>(Trader);

			Level1AddressCtrl.Text = Trader.Level1Address.To<string>();
			Level2AddressCtrl.Text = Trader.Level2Address.To<string>();
			LookupAddressCtrl.Text = Trader.LookupAddress.To<string>();
			AdminAddressCtrl.Text = Trader.AdminAddress.To<string>();

			DownloadSecurityFromSiteCtrl.IsChecked = Trader.IsDownloadSecurityFromSite;

			_securitiesWindow.MakeHideable();
			_newsWindow.MakeHideable();

			Instance = this;

			_logManager.Listeners.Add(new FileLogListener("log.txt"));
			_logManager.Sources.Add(Trader);
		}
예제 #2
0
        public Syncing()
        {
            context = new EFDbContext();

            connector = new IQFeedTrader();
            connector.Connect();

            addedCount = 0;

            Thread.Sleep(1000);

            Console.WriteLine("Connection state {0}", connector.ConnectionState);
        }
예제 #3
0
        public void Connect()
        {
            trader = new IQFeedTrader();
            trader.Connected += () => SetConnectionStatus(0);
            trader.Disconnected += () => SetConnectionStatus(1);
            trader.ConnectionError += error => SetConnectionStatus(error);

            trader.Connect();

            var monitor = new MonitorWindow();
            monitor.Show();

            logManager.Listeners.Add(new GuiLogListener(monitor));
            logManager.Sources.Add(trader);

            var address = IPAddress.Parse("72.5.42.156");

            Trader = new BlackwoodTrader();
            logManager.Sources.Add(Trader);

            Trader.Login = "******";
            Trader.Password = "******";
            Trader.ExecutionAddress = new IPEndPoint(address, BlackwoodAddresses.ExecutionPort);
            Trader.MarketDataAddress = new IPEndPoint(address, BlackwoodAddresses.MarketDataPort);
            Trader.HistoricalDataAddress = new IPEndPoint(address, BlackwoodAddresses.HistoricalDataPort);

            Trader.Connected += Trader_Connected;
            Trader.ConnectionError += Trader_ConnectionError;
            Trader.Disconnected += Trader_Disconnected;

            Trader.NewPortfolios += portfolios =>
            {
                foreach (var portfolio in portfolios)
                {
                    Portfolio = portfolio;
                    Debug.Print("Portfolio name {0}", portfolio.Name);
                    Debug.Print("Portfolio RealizedPnL {0}", portfolio.RealizedPnL);
                    Debug.Print("Portfolio UnrealizedPnL {0}", portfolio.UnrealizedPnL);
                }
            };

            Trader.NewCandles += Trader_NewCandles;

            Trader.NewOrders += Trader_NewOrders;
            Trader.NewPositions += Trader_NewPositions;
            Trader.Connect();
        }
예제 #4
0
        //Метод получает свечки для каждого обрабатываемого инстумента
        private int GetCandles(object obj, IQFeedTrader trader)
        {
            List<Security> securities = (List<Security>)obj;    //коллекция хранит "пучок", переданных в данный метод, инструментов для закачки таймсерий и передачи их в стратегию          

            //while (run)
            //{
            //trader = new IQFeedTrader();

            trader.Connect();
            Debug.Print("CONNECTION STATE: {0}", trader.ConnectionState);
            Thread.Sleep(1000);  //Уснуть на 1000 миллисекунд для того, чтобы дать коннектору установить подключение

            foreach (var security in securities)
            {
                if (!run)
                {
                    return 0;
                }
                bool isDaysSuccess;
                bool is5MinutesSucсess;

                //Debug.Print("BEFORE");
                List<Candle> dayCandles = (List<Candle>)trader.GetHistoricalCandles(security, typeof(TimeFrameCandle), TimeSpan.FromDays(1), 65, out isDaysSuccess);   //получить дневные свечки текущего инструмента
                List<Candle> candles = (List<Candle>)trader.GetHistoricalCandles(security, typeof(TimeFrameCandle), TimeSpan.FromMinutes(5), 100, out is5MinutesSucсess);   //получить пятиминутные свечки текущего инструмента
                List<Candle> intradayCandles = new List<Candle>();     //"чистые" свечки - с начала сессии по текущую 
                                                                       //Debug.Print("AFTER");

                foreach (var candle in candles)
                {
                    var candleOpenTime = candle.OpenTime - TimeSpan.FromHours(5);

                    if (candleOpenTime.Ticks >= startSession.Ticks && candleOpenTime.Ticks <= endSession.Ticks) //если свечка относится к текущей сессии, то добавляем ее в "чистую" коллекцию
                    {
                        intradayCandles.Add(candle);
                        //if(candle.Security.Code == "A")
                        //    Debug.Print("{0}, {1}", candleOpenTime, candle.ClosePrice);
                    }
                }

                if (!blackList.Contains(security))  //Если по текущему инструменту еще нет запущенных стратегий, то отправляем его на сканирование
                {
                    Scanner scanner = new Scanner
                    {
                        DayCandles = dayCandles,
                        IntradayCandles = intradayCandles,
                        Trader = Trader,
                        //Portfolio = Portfolio
                        Portfolio = new Portfolio()
                    };

                    scanner.StrategyStarted += Scanner_StrategyStarted; //Подписываемся на события старта стратегии, чтобы добавить ее в менеджер логгирования для отслеживания

                    int i = scanner.Scan();
                    if (i == 1)
                        Processed(i, 0);
                    else
                    {
                        Processed(i, 1);
                    }
                }
            }
            //trader.Disconnect();
            //Thread.Sleep(1000);
            //trader.Dispose();
            //}
            return 0;
        }
예제 #5
0
        public void Start(int useThreads)
        {
            var storSec = securityStorage.Lookup(new Security());
            securities.Clear();
            foreach (var sec in storSec)
            {
                securities.Add(sec);
            }
            run = true;
            securitiesCount = securities.Count;         //количество загруженный инструментов
            int stakeSize = securitiesCount / useThreads;   //размер "пучка" инструментов для отправки в поток
            List<Security> securitiesStake = new List<Security>();

            Debug.Print("Securities count {0}", securitiesCount);

            Func<object, IQFeedTrader, int> func = new Func<object, IQFeedTrader, int>(GetCandles);
            IAsyncResult asyncResult;

            int j = 0;

            for (int i = 0; i < securitiesCount; i++)
            {
                securitiesStake.Add(securities[i]);
                if (securitiesStake.Count == stakeSize)
                {
                    if (IsOneStart)
                    {
                        IQFeedTrader connector = new IQFeedTrader();
                        //connector.Connect();
                        connectors.Add(connector);
                    }
                    //Debug.Print("STAKE SIZE: {0} j = {1}", securitiesStake.Count, j);
                    asyncResult = func.BeginInvoke(securitiesStake, connectors[j], null, null);
                    securitiesStake = new List<Security>();                  
                    j++;
                }
            }

            if (securitiesStake.Count > 0)  //Отправляем последний неполный пучок
            {
                if (IsOneStart)
                {
                    IQFeedTrader connector = new IQFeedTrader();
                    //connector.Connect();
                    connectors.Add(connector);
                }
                //Debug.Print("STAKE SIZE: {0} j = {1}", securitiesStake.Count, j);
                asyncResult = func.BeginInvoke(securitiesStake, connectors[j], null, null);                
            }
            IsOneStart = false;
        }