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"); }
private PositionTestModel GetProfitOfDay(Symbol symbol, IEnumerable <Candle> candles, MAStrategy mAStrategy = null) { PositionTestModel positionTestModel = null; if (mAStrategy == null) { mAStrategy = new MAStrategy(); } BrokerOrderModel brokerOrder = null; if (candles != null && symbol != null) { var lastDay = candles.LastOrDefault().DateTime.Day; for (int candleIndex = 0; candleIndex < candles.Count(); candleIndex++) { var currentCandle = candles.ElementAt(candleIndex); if (currentCandle.DateTime.Day == lastDay && currentCandle.DateTime.TimeOfDay > mAStrategy.marketStart && currentCandle.DateTime.TimeOfDay < mAStrategy.marketEnd) { if (brokerOrder == null) { var scanResult = mAStrategy.Scan(symbol, candles.Take(candleIndex), false); if (scanResult != null) { brokerOrder = scanResult; if (positionTestModel == null) { positionTestModel = new PositionTestModel() { NoOfPositions = 1, TradingSymbol = symbol.TradingSymbol } } ; else { positionTestModel.NoOfPositions += 1; } } } else if (brokerOrder.TransactionType == Constants.TRANSACTION_TYPE_BUY) { //Stop Loss Hit if (currentCandle.Low <= brokerOrder.TriggerPrice.Value) { positionTestModel.Profit -= (brokerOrder.StoplossValue.Value * brokerOrder.Quantity); positionTestModel.NoOfStopHit += 1; brokerOrder = null; } else if (currentCandle.High >= (brokerOrder.Price.Value + brokerOrder.SquareOffValue.Value)) { positionTestModel.Profit += (brokerOrder.SquareOffValue.Value * brokerOrder.Quantity); positionTestModel.NoOfProfitable += 1; brokerOrder = null; } } else if (brokerOrder.TransactionType == Constants.TRANSACTION_TYPE_SELL) { //Stop Loss Hit if (currentCandle.High >= brokerOrder.TriggerPrice.Value) { positionTestModel.Profit -= (brokerOrder.StoplossValue.Value * brokerOrder.Quantity); positionTestModel.NoOfStopHit += 1; brokerOrder = null; } else if (currentCandle.Low <= (brokerOrder.Price.Value - brokerOrder.SquareOffValue.Value)) { positionTestModel.Profit += (brokerOrder.SquareOffValue.Value * brokerOrder.Quantity); positionTestModel.NoOfProfitable += 1; brokerOrder = null; } } } } } return(positionTestModel); }