//public async Task Start(int jobId) //{ // //check indian standard time // TimeZoneInfo INDIAN_ZONE = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); // var indianTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, INDIAN_ZONE).TimeOfDay; // var start = new TimeSpan(10, 0, 0); //10 o'clock // var end = new TimeSpan(18, 30, 0); //12 o'clock // if ((indianTime > start) && (indianTime < end)) // { // _jobId = jobId; // var job = await _jobService.GetJob(jobId); // var strategy = await _strategyService.Get(job.StrategyId); // var symbols = await _watchlistService.GetSymbols(strategy.WatchlistId); // var userSession = await _userSessionService.GetCurrentSession(); // _zeropdhaService = new ZerodhaBroker(AutoMapper.Mapper.Map<UserSessionModel>(userSession)); // var positions = _zeropdhaService._kite.GetPositions(); // var orders = _zeropdhaService._kite.GetOrders(); // Parallel.ForEach(symbols, symbol => // { // var candles = _zeropdhaService.GetData(symbol, _HistoricalDataInDays, _HistoricalDataTimeframe); // if (candles != null && candles.Count() > 0) // { // var position = positions.Day.Where(x => x.TradingSymbol == symbol.TradingSymbol).FirstOrDefault(); // var order = orders.Where(x => x.Tradingsymbol == symbol.TradingSymbol && x.Status == "TRIGGER PENDING").FirstOrDefault(); // var parentOrder = orders.Where(x => x.OrderId == order.ParentOrderId).FirstOrDefault(); // if (position.Quantity != 0) // SquareOffOpenPosition(symbol, candles, position, order, parentOrder); // else if (positions.Day != null && positions.Day.Count < _MaxActivePositions) // { // if (!BullishScan(symbol, candles)) // BearishScan(symbol, candles); // } // } // }); // //Update Status after every round of scanning // job.Status = JobStatus.Running.ToString(); // job.ModifiedDate = DateTime.Now; // await _jobService.Update(job); // } //} public async Task Start(int jobId) { _jobId = jobId; var job = await _jobService.GetJob(jobId); var strategy = await _strategyService.Get(job.StrategyId); var symbols = await _watchlistService.GetSymbols(strategy.WatchlistId); var userSession = await _userSessionService.GetCurrentSession(); _zeropdhaService = new ZerodhaBroker(AutoMapper.Mapper.Map <UserSessionModel>(userSession)); var positions = _zeropdhaService._kite.GetPositions(); var orders = _zeropdhaService._kite.GetOrders(); Parallel.ForEach(symbols, symbol => { var candles = _zeropdhaService.GetData(symbol, _HistoricalDataInDays, _HistoricalDataTimeframe); if (candles != null && candles.Count() > 0) { var position = positions.Day.Where(x => x.TradingSymbol == symbol.TradingSymbol).FirstOrDefault(); var order = orders.Where(x => x.Tradingsymbol == symbol.TradingSymbol && x.Status == "TRIGGER PENDING").FirstOrDefault(); var parentOrder = orders.Where(x => x.OrderId == order.ParentOrderId).FirstOrDefault(); BullishScan(symbol, candles); } }); //Update Status after every round of scanning job.Status = JobStatus.Running.ToString(); job.ModifiedDate = DateTime.Now; await _jobService.Update(job); }
public async Task Start(int jobId, bool isDevelopment = false) { _jobId = jobId; StringBuilder sb = new StringBuilder(); Stopwatch sw = new Stopwatch(); sw.Start(); var indianTime = GlobalConfigurations.IndianTime; ApplicationLogger.LogJob(jobId, " job Started " + indianTime.ToString()); //check indian standard time if (((indianTime.TimeOfDay > preMarketStart) && (indianTime.TimeOfDay < preMarketEnd)) || isDevelopment) { //Load History Data await CacheHistoryData(indianTime, isDevelopment); } if (((indianTime.TimeOfDay > marketStart) && (indianTime.TimeOfDay < marketEnd)) || isDevelopment) { var job = await _jobService.GetJob(jobId); var strategy = await _strategyService.Get(job.StrategyId); var symbols = await _watchlistService.GetSymbols(strategy.WatchlistId); var userSession = await _userSessionService.GetCurrentSession(); if (userSession != null) { _zeropdhaService = new ZerodhaBroker(AutoMapper.Mapper.Map <UserSessionModel>(userSession)); var positions = _zeropdhaService._kite.GetPositions(); var orders = _zeropdhaService._kite.GetOrders(); if (positions.Day != null && positions.Day.Where(x => x.Quantity != 0).Count() < _MaxActivePositions) { await symbols.ParallelForEachAsync(async symbol => { var candles = await _zeropdhaService.GetCachedDataAsync(symbol, _HistoricalDataTimeframe, indianTime.AddDays(_HistoricalDataInDays), indianTime, isDevelopment: isDevelopment); if (candles != null && candles.Count() > 0) { var position = positions.Day.Where(x => x.TradingSymbol == symbol.TradingSymbol).FirstOrDefault(); var order = orders.Where(x => x.Tradingsymbol == symbol.TradingSymbol && x.Status == "OPEN"); //check whether orde is expired IsOrderExpired(position, order); if (position.Quantity == 0 && order.Count() == 0) { Scan(symbol, candles); } } }); } //Update Status after every round of scanning job.Status = JobStatus.Running.ToString(); job.ModifiedDate = DateTime.Now; await _jobService.Update(job); } else { ApplicationLogger.LogJob(jobId, " Not Authenticated !"); } } sw.Stop(); ApplicationLogger.LogJob(jobId, " job Completed in - " + sw.Elapsed.TotalSeconds + " (Seconds)"); }