Exemplo n.º 1
0
 public ActionResult DeleteStatsExample([DataSourceRequest] DataSourceRequest request, StatsExampleModel model)
 {
     try
     {
         if(model != null)
         {
             using(var ctx = new DataModelContext())
             {
                 var example = ctx.StatsExamples.Include("StatsType").Include("Orders").Single(e => e.Id == model.Id);
                 example.Deleted = true;
                 var lastOrder = example.Orders.OrderBy(o => o.Index).LastOrDefault();
                 if(lastOrder != null && !lastOrder.ClosePrice.HasValue)
                 {
                     using(var client = new OrderServiceClient())
                     {
                         var response = client.GetPrice(new GetPriceDataContractRequest {SymbolId = example.StatsType.TypeId});
                         if(!string.IsNullOrEmpty(response.Error))
                         {
                             LogManager.GetCurrentClassLogger().Error(response.Error);
                         }
                         var price = response.Price;
                         if(price.HasValue)
                         {
                             var typeConfig = ((TransactionTypesConfigSection)ConfigurationManager.GetSection("TransactionTypesConfig")).Types.Cast<TypeElementConfig>().ToList().Single(tc => tc.Id == example.StatsType.TypeId);
                             lastOrder.ClosePrice = lastOrder.OrderType == OrderTypes.Buy ?
                                 Math.Round(price.Value - Settings.Default.Spread * typeConfig.SpreadTickValue, HomeController.GetDecimalDigits(typeConfig.SpreadTickValue))
                                 : Math.Round(price.Value + Settings.Default.Spread * typeConfig.SpreadTickValue, HomeController.GetDecimalDigits(typeConfig.SpreadTickValue));
                             lastOrder.Pips = Convert.ToInt32(Math.Round((lastOrder.OrderType == OrderTypes.Buy ? (lastOrder.ClosePrice.Value - lastOrder.OpenPrice) : (lastOrder.OpenPrice - lastOrder.ClosePrice.Value)) / typeConfig.SpreadTickValue, 0));
                             // Log
                             var log = OrderLog.CreateLog(lastOrder, OrderLogTypes.Close);
                             ctx.OrderLogs.Add(log);
                         }
                     }
                 }
                 //
                 ctx.SaveChanges();
             }
         }
     } catch(Exception ex)
     {
         LogManager.GetCurrentClassLogger().Error(ex);
     }
     //
     return this.Json(new[] {model}.ToDataSourceResult(request, this.ModelState));
 }
Exemplo n.º 2
0
 public JsonResult GetPrice(string id, long exampleId, int openOrdersFlags, int closeOrdersFlags)
 {
     using(var ctx = new DataModelContext())
     {
         using(var client = new OrderServiceClient())
         {
             var orders = ctx.Orders.Where(o => o.StatsExampleId == exampleId).OrderBy(o => o.Index).ToList();
             var idxsForReload = new List<int>();
             // Check orders state
             foreach(var order in orders)
             {
                 if(((openOrdersFlags >> order.Index) & 1) == 0)
                 {
                     idxsForReload.Add(order.Index);
                     continue;
                 }
                 if(order.ClosePrice.HasValue && ((closeOrdersFlags >> order.Index) & 1) == 0)
                     idxsForReload.Add(order.Index);
             }
             var lastOrder = orders.LastOrDefault();
             if(lastOrder != null && lastOrder.ClosePrice.HasValue && idxsForReload.Contains(lastOrder.Index) && lastOrder.Index < ctx.GetTransactionsCount() - 1 && !idxsForReload.Contains(lastOrder.Index + 1))
                 idxsForReload.Add(lastOrder.Index + 1);
             //
             var response = client.GetPrice(new GetPriceDataContractRequest {SymbolId = id});
             if(response.MarketIsClosed)
                 return this.Json(new {MarketIsClosed = true}, JsonRequestBehavior.AllowGet);
             //
             return this.Json(new
             {
                 response.Price,
                 TotalPips = orders.Count == 0 ? 0 : orders.Sum(o => o.Pips),
                 IdxsForReload = idxsForReload
             }, JsonRequestBehavior.AllowGet);
         }
     }
 }