public BrokerOrder Create(BrokerOrderModel brokerOrderModel) { var brokerOrder = AutoMapper.Mapper.Map <BrokerOrder>(brokerOrderModel); if (brokerOrder != null) { brokerOrder.CreatedDate = DateTime.Now; _context.BrokerOrders.Add(brokerOrder); _context.SaveChanges(); } return(brokerOrder); }
public string PlaceOrder(BrokerOrderModel brokerOrderModel) { Dictionary <string, dynamic> response = null; try { if (brokerOrderModel.Variety == Constants.VARIETY_CO) { response = this._kite.PlaceOrder( Exchange: brokerOrderModel.Exchange, TradingSymbol: brokerOrderModel.TradingSymbol, TransactionType: brokerOrderModel.TransactionType, Quantity: brokerOrderModel.Quantity, Price: brokerOrderModel.Price, OrderType: brokerOrderModel.OrderType, Product: brokerOrderModel.Product, Variety: brokerOrderModel.Variety, Validity: brokerOrderModel.Validity, TriggerPrice: brokerOrderModel.TriggerPrice, Tag: brokerOrderModel.JobId.ToString() ); } else if (brokerOrderModel.Variety == Constants.VARIETY_BO) { response = this._kite.PlaceOrder( Exchange: brokerOrderModel.Exchange, TradingSymbol: brokerOrderModel.TradingSymbol, TransactionType: brokerOrderModel.TransactionType, Quantity: brokerOrderModel.Quantity, Price: GetRoundToTick(brokerOrderModel.Price.Value, brokerOrderModel.TickSize.Value), Product: brokerOrderModel.Product, OrderType: brokerOrderModel.OrderType, Validity: brokerOrderModel.Validity, Variety: brokerOrderModel.Variety, TriggerPrice: GetRoundToTick(brokerOrderModel.TriggerPrice.Value, brokerOrderModel.TickSize.Value), SquareOffValue: GetRoundToTick(brokerOrderModel.SquareOffValue.Value, brokerOrderModel.TickSize.Value), StoplossValue: GetRoundToTick(brokerOrderModel.StoplossValue.Value, brokerOrderModel.TickSize.Value), TrailingStoploss: GetRoundToTick(brokerOrderModel.TrailingStoploss.Value, brokerOrderModel.TickSize.Value) ); } return(Convert.ToString(response["data"]["order_id"])); } finally { StringBuilder sb = new StringBuilder(); sb.Append("-----------------------------------------------------------------------------------" + Environment.NewLine); sb.Append(brokerOrderModel.TransactionType + " Order is Placed at " + GlobalConfigurations.IndianTime.ToString() + Environment.NewLine); sb.Append("- Order Request " + JsonConvert.SerializeObject(brokerOrderModel) + Environment.NewLine); sb.Append("- Order Response " + JsonConvert.SerializeObject(response) + Environment.NewLine); ApplicationLogger.LogJob(brokerOrderModel.JobId, sb.ToString()); } }
public BrokerOrderModel Scan(Symbol symbol, IEnumerable <Candle> candles, bool isPlaceOrder = true) { BrokerOrderModel brokerOrderModel = null; try { var currentCandle = new IndexedCandle(candles, candles.Count() - 1); var rsi = candles.Rsi(9)[candles.Count() - 1]; var buySellRiseValue = currentCandle.Close * Convert.ToDecimal(_BuySellOnRisePercentage); var riskValue = currentCandle.Close * Convert.ToDecimal(_RiskPercentage); var rewardValue = (currentCandle.Close * Convert.ToDecimal(_RewardPercentage)); if (currentCandle.Prev.IsEmaBullishCross(_EmaShortPeriod, _EmaLongPeriod) && currentCandle.IsBullishExt() && currentCandle.Prev.IsBullishExt() //&& currentCandle.Prev.Close <= currentCandle.Open //&& currentCandle.Prev.GetBody() < currentCandle.GetBody() && rsi.Tick > 50) { brokerOrderModel = new BrokerOrderModel() { JobId = _jobId, SymbolId = symbol.Id, TickSize = symbol.TickSize, Exchange = symbol.Exchange, TradingSymbol = symbol.TradingSymbol, TransactionType = Constants.TRANSACTION_TYPE_BUY, Quantity = Convert.ToInt32(_MinInvestmentPerOrder / currentCandle.Close) > 0 ? Convert.ToInt32(_MinInvestmentPerOrder / currentCandle.Close) : 1, //Price = currentCandle.Close - buySellRiseValue, Price = currentCandle.Close, Product = Constants.PRODUCT_MIS, OrderType = Constants.ORDER_TYPE_LIMIT, Validity = Constants.VALIDITY_DAY, Variety = Constants.VARIETY_BO, //TriggerPrice = (currentCandle.Close - (riskValue + buySellRiseValue)), TriggerPrice = currentCandle.Close - (riskValue), SquareOffValue = rewardValue, StoplossValue = riskValue, TrailingStoploss = (riskValue) < 1 ? 1 : (riskValue) }; if (isPlaceOrder) { _zeropdhaService.PlaceOrder(brokerOrderModel); } //Log Candle ApplicationLogger.LogJob(_jobId, GlobalConfigurations.IndianTime + " Buying Current Candles [" + symbol.TradingSymbol + "]" + JsonConvert.SerializeObject(candles.ElementAt(candles.Count() - 1)) + Environment.NewLine + GlobalConfigurations.IndianTime + " Buying Previous Candles [" + symbol.TradingSymbol + "]" + JsonConvert.SerializeObject(candles.ElementAt(candles.Count() - 2))); } else if (currentCandle.Prev.IsEmaBearishCross(_EmaShortPeriod, _EmaLongPeriod) && currentCandle.IsBearishExt() && currentCandle.Prev.IsBearishExt() //&& currentCandle.Prev.Close >= currentCandle.Open //&& currentCandle.Prev.GetBody() < currentCandle.GetBody() && rsi.Tick < 50) { brokerOrderModel = new BrokerOrderModel() { JobId = _jobId, SymbolId = symbol.Id, TickSize = symbol.TickSize, Exchange = symbol.Exchange, TradingSymbol = symbol.TradingSymbol, TransactionType = Constants.TRANSACTION_TYPE_SELL, Quantity = Convert.ToInt32(_MinInvestmentPerOrder / currentCandle.Close) > 0 ? Convert.ToInt32(_MinInvestmentPerOrder / currentCandle.Close) : 1, //Price = currentCandle.Close + buySellRiseValue, Price = currentCandle.Close, Product = Constants.PRODUCT_MIS, OrderType = Constants.ORDER_TYPE_LIMIT, Validity = Constants.VALIDITY_DAY, Variety = Constants.VARIETY_BO, //TriggerPrice = (currentCandle.Close + (riskValue + buySellRiseValue)), TriggerPrice = (currentCandle.Close + (riskValue)), SquareOffValue = rewardValue, StoplossValue = riskValue, TrailingStoploss = (riskValue) < 1 ? 1 : (riskValue) }; if (isPlaceOrder) { _zeropdhaService.PlaceOrder(brokerOrderModel); } //Log Candle ApplicationLogger.LogJob(_jobId, GlobalConfigurations.IndianTime + " Selling Current Candles [" + symbol.TradingSymbol + "]" + JsonConvert.SerializeObject(candles.ElementAt(candles.Count() - 1)) + Environment.NewLine + GlobalConfigurations.IndianTime + " Selling Previous Candles [" + symbol.TradingSymbol + "]" + JsonConvert.SerializeObject(candles.ElementAt(candles.Count() - 2))); } } catch (Exception ex) { } return(brokerOrderModel); }
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); }