/// <summary> /// метод, в котором работает поток обрабатывающий очередь _candleSeriesNeadToStart /// </summary> private void CandleStarter() { try { while (true) { Thread.Sleep(50); if (_candleSeriesNeadToStart.Count != 0) { CandleSeries series = _candleSeriesNeadToStart.Dequeue(); if (series == null) { continue; } ServerType serverType = _server.ServerType; if (serverType == ServerType.Tester) { series.IsStarted = true; } else if (serverType == ServerType.Plaza || serverType == ServerType.QuikDde || serverType == ServerType.AstsBridge || serverType == ServerType.NinjaTrader || (serverType == ServerType.InteractivBrokers && (series.CandlesAll == null || series.CandlesAll.Count == 0))) { series.CandlesAll = null; // далее, пытаемся пробуем прогрузить свечи при помощи тиков List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); // если на сервере есть предзагрузка свечек и что-то скачалось series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.SmartCom) { SmartComServer smart = (SmartComServer)_server; if (series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = smart.GetSmartComCandleHistory(series.Security.Name, series.TimeFrameSpan, 170); if (candles != null) { candles.Reverse(); series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Tester || serverType == ServerType.InteractivBrokers || serverType == ServerType.Optimizer || serverType == ServerType.Oanda || serverType == ServerType.BitStamp ) { series.IsStarted = true; } else if (serverType == ServerType.QuikLua) { QuikLuaServer luaServ = (QuikLuaServer)_server; if (series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = luaServ.GetQuikLuaCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { //candles.Reverse(); series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.BitMex) { BitMexServer bitMex = (BitMexServer)_server; if (series.TimeFrameSpan.TotalMinutes < 1 || series.CandleCreateMethodType == CandleCreateMethodType.Ticks || series.CandleCreateMethodType == CandleCreateMethodType.Delta) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = bitMex.GetBitMexCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Kraken) { KrakenServer kraken = (KrakenServer)_server; if (series.TimeFrameSpan.TotalMinutes < 1 || series.CandleCreateMethodType == CandleCreateMethodType.Ticks || series.CandleCreateMethodType == CandleCreateMethodType.Delta) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = kraken.GetHistory(series.Security.Name, Convert.ToInt32(series.TimeFrameSpan.TotalMinutes)); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Binance) { BinanceServer binance = (BinanceServer)_server; if (series.TimeFrameSpan.TotalMinutes < 1 || series.CandleCreateMethodType == CandleCreateMethodType.Ticks || series.CandleCreateMethodType == CandleCreateMethodType.Delta) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = binance.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Bitfinex) { BitfinexServer bitfinex = (BitfinexServer)_server; if (series.TimeFrameSpan.TotalMinutes < 1 || series.CandleCreateMethodType == CandleCreateMethodType.Ticks || series.CandleCreateMethodType == CandleCreateMethodType.Delta) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = bitfinex.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } } } } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); } }
/// <summary> /// the method in which the processing queue _candleSeriesNeadToStart is running /// метод, в котором работает поток обрабатывающий очередь _candleSeriesNeadToStart /// </summary> private async void CandleStarter() { try { while (true) { await Task.Delay(50); if (_isDisposed == true) { return; } if (MainWindow.ProccesIsWorked == false) { return; } if (_candleSeriesNeadToStart.Count != 0) { CandleSeries series = _candleSeriesNeadToStart.Dequeue(); if (series == null || series.IsStarted) { continue; } ServerType serverType = _server.ServerType; if (serverType == ServerType.Tester) { series.IsStarted = true; } else if (serverType == ServerType.Plaza || serverType == ServerType.QuikDde || serverType == ServerType.AstsBridge || serverType == ServerType.NinjaTrader || serverType == ServerType.Lmax || (serverType == ServerType.InteractivBrokers && (series.CandlesAll == null || series.CandlesAll.Count == 0))) { series.CandlesAll = null; // further, we try to load candles with ticks // далее, пытаемся пробуем прогрузить свечи при помощи тиков List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); // if there is a preloading of candles on the server and something is downloaded // если на сервере есть предзагрузка свечек и что-то скачалось series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.SmartCom) { SmartComServer smart = (SmartComServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = smart.GetSmartComCandleHistory(series.Security.Name, series.TimeFrameSpan, 170); if (candles != null) { candles.Reverse(); series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Tinkoff) { TinkoffServer smart = (TinkoffServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1 || series.TimeFrame == TimeFrame.Hour2 || series.TimeFrame == TimeFrame.Hour4 || series.TimeFrame == TimeFrame.Min20 || series.TimeFrame == TimeFrame.Min45) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = smart.GetCandleHistory(series.Security.NameId, series.TimeFrame); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Tester || serverType == ServerType.InteractivBrokers || serverType == ServerType.Optimizer || serverType == ServerType.Oanda || serverType == ServerType.BitStamp ) { series.IsStarted = true; } else if (serverType == ServerType.QuikLua) { QuikLuaServer luaServ = (QuikLuaServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = luaServ.GetQuikLuaCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { //candles.Reverse(); series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.BitMex) { BitMexServer bitMex = (BitMexServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = bitMex.GetBitMexCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Kraken) { KrakenServer kraken = (KrakenServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = kraken.GetHistory(series.Security.Name, Convert.ToInt32(series.TimeFrameSpan.TotalMinutes)); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Binance) { BinanceServer binance = (BinanceServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = binance.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.BinanceFutures) { if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { BinanceServerFutures binance = (BinanceServerFutures)_server; List <Candle> candles = binance.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.BitMax) { BitMaxServer bitMax = (BitMaxServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = bitMax.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Bitfinex) { BitfinexServer bitfinex = (BitfinexServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = bitfinex.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Transaq) { TransaqServer transaq = (TransaqServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); series.UpdateAllCandles(); series.IsStarted = true; } else { transaq.GetCandleHistory(series); } } else if (serverType == ServerType.Livecoin || serverType == ServerType.Exmo) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Zb) { ZbServer zbServer = (ZbServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = zbServer.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.GateIo) { GateIoServer gateIoServer = (GateIoServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = gateIoServer.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.GateIoFutures) { GateIoFuturesServer gateIoFutures = (GateIoFuturesServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = gateIoFutures.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.Hitbtc) { HitbtcServer hitbtc = (HitbtcServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = hitbtc.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.HuobiSpot) { HuobiSpotServer huobiSpot = (HuobiSpotServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = huobiSpot.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.HuobiFutures) { HuobiFuturesServer huobi = (HuobiFuturesServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = huobi.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.HuobiFuturesSwap) { HuobiFuturesSwapServer huobi = (HuobiFuturesSwapServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = huobi.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } else if (serverType == ServerType.FTX) { FTXServer ftxServer = (FTXServer)_server; if (series.CandleCreateMethodType != CandleCreateMethodType.Simple || series.TimeFrameSpan.TotalMinutes < 1) { List <Trade> allTrades = _server.GetAllTradesToSecurity(series.Security); series.PreLoad(allTrades); } else { List <Candle> candles = ftxServer.GetCandleHistory(series.Security.Name, series.TimeFrameSpan); if (candles != null) { series.CandlesAll = candles; } } series.UpdateAllCandles(); series.IsStarted = true; } } } } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); } }