//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 ScriptIsProfitableOrNot() { //Get All Candles according to MAStrategy mAStrategy = new MAStrategy(); var symbolService = new SymbolService(); var userSessionService = new UserSessionService(); var symbol = await symbolService.GetAsync(21108); var userSession = await userSessionService.GetCurrentSession(); PositionTestModel positionTestModel = null; if (userSession != null) { var zeropdhaService = new ZerodhaBroker(new UserSessionModel() { AccessToken = userSession.AccessToken, ApiKey = userSession.ApiKey, AppSecret = userSession.AppSecret, PublicToken = userSession.PublicToken, UserId = userSession.UserId }); var candles = zeropdhaService.GetData( symbol, mAStrategy._HistoricalDataTimeframe, DateTime.Now.AddDays(-7), DateTime.Now.AddDays(-2), false); positionTestModel = GetProfitOfDay(symbol, candles); } Assert.IsTrue(positionTestModel.Profit > 1, "Symbol is Not Profitable"); }
public async Task WeeklyWatchlistIsProfitableOrNot() { List <PositionTestModel> positionWeekTestModels = new List <PositionTestModel>(); //Get All Candles according to MAStrategy mAStrategy = new MAStrategy(); var watchlistService = new WatchlistService(); var userSessionService = new UserSessionService(); var symbols = await watchlistService.GetSymbols(1); var userSession = await userSessionService.GetCurrentSession(); var weekStart = 5; if (userSession != null) { var zeropdhaService = new ZerodhaBroker(new UserSessionModel() { AccessToken = userSession.AccessToken, ApiKey = userSession.ApiKey, AppSecret = userSession.AppSecret, PublicToken = userSession.PublicToken, UserId = userSession.UserId }); for (int i = 0; i < 5; i++) { List <PositionTestModel> positionTestModels = new List <PositionTestModel>(); Parallel.ForEach(symbols.Take(50), symbol => { var candles = zeropdhaService.GetData( symbol, mAStrategy._HistoricalDataTimeframe, new DateTime(2018, 3, weekStart + i, 18, 0, 0).AddDays(mAStrategy._HistoricalDataInDays), //DateTime.Now new DateTime(2018, 3, weekStart + i, 18, 0, 0), false); positionTestModels.Add(GetProfitOfDay(symbol, candles)); }); positionWeekTestModels.Add(new PositionTestModel() { dateTime = new DateTime(2018, 3, weekStart + i, 0, 0, 0), NoOfPositions = positionTestModels.Where(x => x != null).Sum(x => x.NoOfPositions), NoOfProfitable = positionTestModels.Where(x => x != null).Sum(x => x.NoOfProfitable), NoOfStopHit = positionTestModels.Where(x => x != null).Sum(x => x.NoOfStopHit), Profit = positionTestModels.Where(x => x != null).Sum(x => x.Profit) }); } } Assert.IsTrue(positionWeekTestModels.Where(x => x != null).Sum(x => x.Profit) > 1, "Week is Not Profitable"); }
public async Task Start(int jobId) { var job = await _jobService.GetJob(jobId); _jobId = jobId; var symbols = await _watchlistService.GetSymbols(job.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, -2, Constants.INTERVAL_5MINUTE); if (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(); if (position.Quantity != 0) { SquareOffOpenPosition(symbol, candles, position, order); } else { 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 RegressionMonthlyWatchlistIsProfitableOrNot() { List <PositionTestModel> positionWeekTestModels = new List <PositionTestModel>(); //Get All Candles according to MAStrategy mAStrategy = new MAStrategy(); var watchlistService = new WatchlistService(); var userSessionService = new UserSessionService(); var symbols = await watchlistService.GetSymbols(1); var userSession = await userSessionService.GetCurrentSession(); var weekStart = new DateTime(2018, 2, 5, 9, 0, 0).StartOfWeek(DayOfWeek.Monday); IList <PositionTestModel> positionTestModels = new List <PositionTestModel>(); for (int emaShortPeriodCounter = 3; emaShortPeriodCounter < 20; emaShortPeriodCounter++) { for (int emaLongPeriodCounter = emaShortPeriodCounter += 1; emaLongPeriodCounter < 25; emaLongPeriodCounter++) { mAStrategy._EmaShortPeriod = emaShortPeriodCounter; mAStrategy._EmaLongPeriod = emaLongPeriodCounter; for (int weekCounter = 0; weekCounter < 4; weekCounter++) { DateTime tempWeekStart = weekStart.AddDays(weekCounter * 7); if (userSession != null) { var zeropdhaService = new ZerodhaBroker(new UserSessionModel() { AccessToken = userSession.AccessToken, ApiKey = userSession.ApiKey, AppSecret = userSession.AppSecret, PublicToken = userSession.PublicToken, UserId = userSession.UserId }); for (int dayCounter = 0; dayCounter < 5; dayCounter++) { Parallel.ForEach(symbols.Take(50), symbol => { var candles = zeropdhaService.GetData( symbol, mAStrategy._HistoricalDataTimeframe, new DateTime(2018, 3, tempWeekStart.Day + dayCounter, 9, 0, 0).AddDays(mAStrategy._HistoricalDataInDays), //DateTime.Now new DateTime(2018, 3, tempWeekStart.Day + dayCounter, 18, 0, 0), false); positionTestModels.Add(GetProfitOfDay(symbol, candles, mAStrategy)); }); positionWeekTestModels.Add(new PositionTestModel() { EMA = emaShortPeriodCounter + ", " + emaLongPeriodCounter, Period = mAStrategy._HistoricalDataTimeframe, dateTime = new DateTime(2018, 3, tempWeekStart.Day + dayCounter, 0, 0, 0), NoOfPositions = positionTestModels.Where(x => x != null).Sum(x => x.NoOfPositions), NoOfProfitable = positionTestModels.Where(x => x != null).Sum(x => x.NoOfProfitable), NoOfStopHit = positionTestModels.Where(x => x != null).Sum(x => x.NoOfStopHit), Profit = positionTestModels.Where(x => x != null).Sum(x => x.Profit) }); } } } } } positionWeekTestModels.WriteCSV(@"D:\Work\Autotrading\Results\RegressionMonth-" + mAStrategy._HistoricalDataTimeframe + ".csv"); Assert.IsTrue(positionWeekTestModels.Where(x => x != null).Sum(x => x.Profit) > 1, "Week is Not Profitable"); }