Ejemplo n.º 1
0
        //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);
        }
Ejemplo n.º 2
0
        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)");
        }