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); }
public Syncing() { context = new EFDbContext(); connector = new IQFeedTrader(); connector.Connect(); addedCount = 0; Thread.Sleep(1000); Console.WriteLine("Connection state {0}", connector.ConnectionState); }
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(); }
//Метод получает свечки для каждого обрабатываемого инстумента 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; }
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; }