Пример #1
0
        public IQueryable <DailyPriceData> GetDailyOnlinePrices(out DateTime StartDate, out DateTime EndDate)
        {
            AlsiUtils.WebSettings.GetSettings();

            var      data = AlsiTrade_Backend.HiSat.HistData.GetHistoricalMINUTE_FromWEB(DateTime.Now.AddMonths(-3), DateTime.Now, 1, AlsiUtils.WebSettings.General.HISAT_INST);
            DateTime start;

            start     = data.First().TimeStamp;
            EndDate   = data.Last().TimeStamp;
            StartDate = start;
            return(from q in data.Where(z => z.TimeStamp >= start && z.TimeStamp <= DateTime.Now).AsQueryable()
                   group q by new
            {
                Y = q.TimeStamp.Year,
                M = q.TimeStamp.Month,
                D = q.TimeStamp.Day,
            }
                   into FGroup
                   orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.D
                   select new DailyPriceData
            {
                Open = FGroup.First().TimeStamp,
                Close = FGroup.OrderByDescending(z => z.TimeStamp).First().TimeStamp,
                Count = FGroup.Count(),
            });
        }
Пример #2
0
        private static void GetDynamicStopLoss(List <Price> prices, double StopLossFactor, double TakeProfitFactor)
        {
            var fortnight = from q in prices
                            group q by new
            {
                Y = q.TimeStamp.Year,
                M = q.TimeStamp.Month,
                W = q.TimeStamp.Day <= 15 ? 1 : 2,
                //D=(DateTime)q.TimeStamp
            }
            into FGroup
            orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.W
                select new
            {
                Year    = FGroup.Key.Y,
                Month   = FGroup.Key.M,
                Week    = FGroup.Key.W,
                AvPrice = Math.Round((double)FGroup.Average(t => t.Close), 3),
            };

            foreach (var v in fortnight)
            {
                var d    = new DateTime(v.Year, v.Month, v.Week == 1 ? 1 : 15);
                var tpst = new TP_SL()
                {
                    Datum          = d,
                    AvgMarketPrice = v.AvPrice,
                    StopLoss       = (int)(v.AvPrice * StopLossFactor),
                    TakeProfit     = (int)(v.AvPrice * TakeProfitFactor),
                };
                TPSL.Add(tpst);
            }
        }
Пример #3
0
 public IEnumerable <FlightGroup> FlightsGroup([FromHeader] RFlight request)
 {
     if ((request.Back > 0 || request.Fwd > 0) && request.Date == null)
     {
         return(from flight in _context.FlightList
                where flight.Est_blocktime.Value > DateTime.UtcNow.AddHours(-request.Back) && flight.Est_blocktime < DateTime.UtcNow.AddHours(request.Fwd)
                group flight by flight.Aircraft_reg into FGroup
                orderby FGroup.Key ascending
                select new FlightGroup {
             GroupID = FGroup.Key, Flights = FGroup.OrderBy(f => f.Est_blocktime).ToList()
         });
     }
     else if (request.Date != null && (request.Back == 0 && request.Fwd == 0))
     {
         return(from flight in _context.FlightList
                where flight.Est_blocktime > request.Date && flight.Est_blocktime < request.Date.Value.AddDays(1)
                group flight by flight.Aircraft_reg into FGroup
                orderby FGroup.Key ascending
                select new FlightGroup {
             GroupID = FGroup.Key, Flights = FGroup.OrderBy(f => f.Est_blocktime).ToList()
         });
     }
     else
     {
         return(from flight in _context.FlightList
                where flight.Est_blocktime > DateTime.UtcNow.AddDays(-2)
                group flight by flight.Aircraft_reg into FGroup
                orderby FGroup.Key ascending
                select new FlightGroup {
             GroupID = FGroup.Key, Flights = FGroup.OrderBy(f => f.Est_blocktime).ToList()
         });
     }
 }
Пример #4
0
 public IQueryable <DailyPriceData> GetDailyDatabasePrices(DateTime Start, DateTime End)
 {
     return(from q in dc.MasterMinutes.Where(z => z.Stamp >= Start && z.Stamp <= End).AsQueryable()
            group q by new
     {
         Y = q.Stamp.Year,
         M = q.Stamp.Month,
         D = q.Stamp.Day,
     }
            into FGroup
            orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.D
            select new DailyPriceData
     {
         Open = FGroup.First().Stamp,
         Close = FGroup.OrderByDescending(z => z.Stamp).First().Stamp,
         Count = FGroup.Count(),
     });
 }
        private void CreateDateGroups()
        {
            var weekly = from q in AlsiUtils.Data_Objects.GlobalObjects.Points
                         group q by new
            {
                Y = q.TimeStamp.Year,
                M = q.TimeStamp.Month,
                W = Math.Floor((decimal)q.TimeStamp.DayOfYear / 30) + 1,
                //D=(DateTime)q.TimeStamp
            }
            into FGroup
            orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.W
                select new
            {
                Year  = FGroup.Key.Y,
                Month = FGroup.Key.M,
                Week  = FGroup.Key.W,

                FirstTradeDate = FGroup.First().TimeStamp,
                LastTradeDate  = FGroup.Last().TimeStamp,
                //AvPrice = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                // .Average(t => t.RunningProfit),
                //SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                //.Sum(t => t.RunningProfit),
                //marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                //Prices = FGroup.Select(z => z.CurrentPrice),
            };

            foreach (var v in weekly)
            {
                Console.WriteLine("Year {0} Month {1} Week {2}  Start {3}  End {4}", v.Year, v.Month, v.Week, v.FirstTradeDate, v.LastTradeDate);
                var tp = new TradePeriod()
                {
                    Start = v.FirstTradeDate,
                    End   = v.LastTradeDate,
                };
                _Periods.Add(tp);
            }
        }
Пример #6
0
        public override List <T> handleData <T>(DataSet dataSet)
        {
            List <CustomInfoSaveObject> customSaveInfoObjList = new List <CustomInfoSaveObject>();

            for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
            {
                CustomInfoSaveObject customSaveInfoObj = new CustomInfoSaveObject();
                Model          model          = new Model();
                FCreateOrgId   fcreateOrgID   = new FCreateOrgId();
                FGroup         fGroup         = new FGroup();
                FSALGROUPID    fsalGroupID    = new FSALGROUPID();
                FTRADINGCURRID ftradingCurrID = new FTRADINGCURRID();
                FUseOrgId      fUserOrgId     = new FUseOrgId();
                fcreateOrgID.FNumber = "9999";
                //fGroup.fNumber = "KH001";
                fsalGroupID.fNumber    = "0";
                ftradingCurrID.fNumber = "PRE001";
                fUserOrgId.FNumber     = "9999";

                model.Fnumber = dataSet.Tables[0].Rows[i]["fnumber"].ToString();
                model.FName   = dataSet.Tables[0].Rows[i]["fname"].ToString();
                if (model.Fnumber.Contains("-") || model.FName.Contains("未知"))
                {
                    BussnessLog.WriteBussnessLog("", "中间数据库取数", "中间数据库取数错误,编码=" + model.Fnumber + ",客户名称=" + model.FName);
                    continue;
                }
                model.FCreateOrgId = fcreateOrgID;
                //model.FGroup = fGroup;
                model.FsalGroupID       = fsalGroupID;
                model.FtradingCurrID    = ftradingCurrID;
                model.FUseOrgId         = fUserOrgId;
                customSaveInfoObj.Model = model;
                customSaveInfoObjList.Add(customSaveInfoObj);
            }
            return((List <T>)(object) customSaveInfoObjList);

            throw new NotImplementedException();
        }
Пример #7
0
        public static List <SummaryStats> SummaryProfitLoss(List <Trade> Trades, Period Period)
        {
            var TradeList_Stats           = new List <Trade>();
            List <SummaryStats> statsList = new List <SummaryStats>();

            if (TradeList_Stats.Count == 0)
            {
                foreach (Trade t in Trades)
                {
                    if (t.RunningProfit != 0)
                    {
                        TradeList_Stats.Add(t);
                    }
                }
            }

            try
            {
                #region Weekly

                if (Period == Period.Weekly)
                {
                    var weekly = from q in TradeList_Stats
                                 group q by new
                    {
                        Y = q.TimeStamp.Year,
                        M = q.TimeStamp.Month,
                        W = Math.Floor((decimal)q.TimeStamp.DayOfYear / 7) + 1,
                        //D=(DateTime)q.TimeStamp
                    }
                    into FGroup
                    orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.W
                        select new
                    {
                        Year           = FGroup.Key.Y,
                        Month          = FGroup.Key.M,
                        Week           = FGroup.Key.W,
                        Count          = FGroup.Count(z => z.Reason != Trade.Trigger.None),
                        FirstTradeDate = FGroup.First().TimeStamp,
                        LastTradeDate  = FGroup.Last().TimeStamp,
                        AvPrice        = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                         .Average(t => t.RunningProfit),
                        SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                   .Sum(t => t.RunningProfit),
                        marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                        Prices         = FGroup.Select(z => z.CurrentPrice),
                    };

                    foreach (var v in weekly)
                    {
                        SummaryStats stat = new SummaryStats();
                        stat.Detail            = "Weekly Profit and Loss Summary";
                        stat.Period            = Period;
                        stat.Year              = (int)v.Year;
                        stat.Month             = (int)v.Month;
                        stat.Week              = (int)v.Week;
                        stat.Count             = (int)v.Count;
                        stat.Sum               = (int)v.SumPrice;
                        stat.Average           = (double)v.AvPrice;
                        stat.FirstTrade        = v.FirstTradeDate;
                        stat.LastTrade         = v.LastTradeDate;
                        stat.MarketMovement    = v.marketmovement;
                        stat.StandardDeviation = StandardDeviation(v.Prices.ToList());
                        statsList.Add(stat);

                        //    Debug.WriteLine(v.Year + "   " + v.Month + "  " + v.Week + "  " + v.Count + "  " + v.SumPrice + "  " + v.AvPrice);
                    }
                }

                #endregion

                #region Fortnight

                if (Period == Period.TwoWeekly)
                {
                    var fortnight = from q in TradeList_Stats
                                    group q by new
                    {
                        Y = q.TimeStamp.Year,
                        M = q.TimeStamp.Month,
                        W = q.TimeStamp.Day <= 15 ? 1 : 2,
                        //D=(DateTime)q.TimeStamp
                    }
                    into FGroup
                    orderby FGroup.Key.Y, FGroup.Key.M, FGroup.Key.W
                        select new
                    {
                        Year           = FGroup.Key.Y,
                        Month          = FGroup.Key.M,
                        Week           = FGroup.Key.W,
                        Count          = FGroup.Count(z => z.Reason != Trade.Trigger.None),
                        FirstTradeDate = FGroup.First().TimeStamp,
                        LastTradeDate  = FGroup.Last().TimeStamp,
                        AvPrice        = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                         .Average(t => t.RunningProfit),
                        SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                   .Sum(t => t.RunningProfit),
                        marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                        Prices         = FGroup.Select(z => z.CurrentPrice),
                    };

                    foreach (var v in fortnight)
                    {
                        SummaryStats stat = new SummaryStats();
                        stat.Detail            = "Fortnightly Profit and Loss Summary";
                        stat.Period            = Period;
                        stat.Year              = (int)v.Year;
                        stat.Month             = (int)v.Month;
                        stat.Week              = (int)v.Week;
                        stat.Count             = (int)v.Count;
                        stat.Sum               = (int)v.SumPrice;
                        stat.Average           = (double)v.AvPrice;
                        stat.FirstTrade        = v.FirstTradeDate;
                        stat.LastTrade         = v.LastTradeDate;
                        stat.MarketMovement    = v.marketmovement;
                        stat.StandardDeviation = StandardDeviation(v.Prices.ToList());
                        statsList.Add(stat);
                        // Debug.WriteLine(v.Year + "   " + v.Month + "  " + v.Week + "  " + v.Count + "  " + v.SumPrice + "  " + v.AvPrice);
                    }
                }

                #endregion

                #region Monthly

                if (Period == Period.Monthly)
                {
                    var monthly = from q in TradeList_Stats
                                  group q by new
                    {
                        Y = q.TimeStamp.Year,
                        M = q.TimeStamp.Month,

                        //D=(DateTime)q.TimeStamp
                    }
                    into FGroup
                    orderby FGroup.Key.Y, FGroup.Key.M
                        select new
                    {
                        Year           = FGroup.Key.Y,
                        Month          = FGroup.Key.M,
                        FirstTradeDate = FGroup.First().TimeStamp,
                        LastTradeDate  = FGroup.Last().TimeStamp,
                        Count          = FGroup.Count(z => z.Reason != Trade.Trigger.None),
                        AvPrice        = (double)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                         .Average(t => t.RunningProfit),
                        SumPrice = (int)FGroup.Where(z => z.Reason == Trade.Trigger.CloseShort || z.Reason == Trade.Trigger.CloseLong)
                                   .Sum(t => t.RunningProfit),
                        marketmovement = (FGroup.Last().CurrentPrice) - (FGroup.First().CurrentPrice),
                        Prices         = FGroup.Select(z => z.CurrentPrice),
                    };

                    foreach (var v in monthly)
                    {
                        SummaryStats stat = new SummaryStats();
                        stat.Detail            = "Monthly Profit and Loss Summary";
                        stat.Period            = Period;
                        stat.Year              = (int)v.Year;
                        stat.Month             = (int)v.Month;
                        stat.Week              = 0;
                        stat.Count             = (int)v.Count;
                        stat.Sum               = (int)v.SumPrice;
                        stat.Average           = (double)v.AvPrice;
                        stat.FirstTrade        = v.FirstTradeDate;
                        stat.LastTrade         = v.LastTradeDate;
                        stat.MarketMovement    = v.marketmovement;
                        stat.StandardDeviation = StandardDeviation(v.Prices.ToList());
                        statsList.Add(stat);
                        //  Debug.WriteLine(v.Year + "   " + v.Month + "  " + v.Count + "  " + v.SumPrice + "  " + v.AvPrice);
                    }
                }
                #endregion
            }
            catch { return(statsList); }
            return(statsList);
        }