Example #1
0
    public void PrevMonth()
    {
        string month = "";

        monthNumber--;

        if (monthNumber < 1)
        {
            if (cycleThroughMonth)
            {
                if (monthNumber < 1)
                {
                    monthNumber = 12;
                }
                else
                {
                    monthNumber = 1;
                }
            }
        }

        if (monthNumber < 1)
        {
            monthNumber = 1;
        }

        month           = CalendarUtils.GetMonthFull(monthNumber);
        monthInput.text = month;
        print("PrevMonth: " + monthNumber);
    }
Example #2
0
    public void RefreshCalendar()
    {
        ClearCalendar();
        monthDigit  = CalendarUtils.GetMonthDigit(month, true);
        daysInMonth = GetDaysInMonth(int.Parse(year), int.Parse(monthDigit));
//		Debug.Log( "RefreshCalendar - monthDigit: " + monthDigit + ", year: " + year + " , daysInMonth: " + daysInMonth );
        UpdateCalendar();
    }
Example #3
0
        public ActionResult GetCalendar(string resNo)
        {
            BlueGreenContext bgcontext = new BlueGreenContext();
            var reservation            = bgcontext.GetActiveReservation(resNo, ResortService.RESERVATION_TYPE_FUTURE);
            var bytes = CalendarUtils.GenerateEvent(reservation);

            return(this.File(bytes, "text/calendar", "BlueGreenVacations.ics"));
        }
        public void GetGoodFriday()
        {
            Assert.AreEqual("2000-04-21", CalendarHelper.GetGoodFriday(2000).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2001-04-13", CalendarHelper.GetGoodFriday(2001).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2002-03-29", CalendarHelper.GetGoodFriday(2002).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2003-04-18", CalendarHelper.GetGoodFriday(2003).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2004-04-09", CalendarHelper.GetGoodFriday(2004).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2005-03-25", CalendarHelper.GetGoodFriday(2005).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2006-04-14", CalendarHelper.GetGoodFriday(2006).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2007-04-06", CalendarHelper.GetGoodFriday(2007).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2008-03-21", CalendarHelper.GetGoodFriday(2008).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2009-04-10", CalendarHelper.GetGoodFriday(2009).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2010-04-02", CalendarHelper.GetGoodFriday(2010).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2011-04-22", CalendarHelper.GetGoodFriday(2011).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2012-04-06", CalendarHelper.GetGoodFriday(2012).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2013-03-29", CalendarHelper.GetGoodFriday(2013).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2014-04-18", CalendarHelper.GetGoodFriday(2014).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2015-04-03", CalendarHelper.GetGoodFriday(2015).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2016-03-25", CalendarHelper.GetGoodFriday(2016).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2017-04-14", CalendarHelper.GetGoodFriday(2017).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2018-03-30", CalendarHelper.GetGoodFriday(2018).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2019-04-19", CalendarHelper.GetGoodFriday(2019).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2020-04-10", CalendarHelper.GetGoodFriday(2020).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2021-04-02", CalendarHelper.GetGoodFriday(2021).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2022-04-15", CalendarHelper.GetGoodFriday(2022).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2023-04-07", CalendarHelper.GetGoodFriday(2023).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2024-03-29", CalendarHelper.GetGoodFriday(2024).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2025-04-18", CalendarHelper.GetGoodFriday(2025).ToString("yyyy-MM-dd"));

            Assert.AreEqual("2000-04-21", CalendarUtils.GetGoodFriday(2000).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2001-04-13", CalendarUtils.GetGoodFriday(2001).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2002-03-29", CalendarUtils.GetGoodFriday(2002).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2003-04-18", CalendarUtils.GetGoodFriday(2003).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2004-04-09", CalendarUtils.GetGoodFriday(2004).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2005-03-25", CalendarUtils.GetGoodFriday(2005).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2006-04-14", CalendarUtils.GetGoodFriday(2006).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2007-04-06", CalendarUtils.GetGoodFriday(2007).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2008-03-21", CalendarUtils.GetGoodFriday(2008).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2009-04-10", CalendarUtils.GetGoodFriday(2009).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2010-04-02", CalendarUtils.GetGoodFriday(2010).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2011-04-22", CalendarUtils.GetGoodFriday(2011).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2012-04-06", CalendarUtils.GetGoodFriday(2012).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2013-03-29", CalendarUtils.GetGoodFriday(2013).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2014-04-18", CalendarUtils.GetGoodFriday(2014).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2015-04-03", CalendarUtils.GetGoodFriday(2015).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2016-03-25", CalendarUtils.GetGoodFriday(2016).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2017-04-14", CalendarUtils.GetGoodFriday(2017).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2018-03-30", CalendarUtils.GetGoodFriday(2018).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2019-04-19", CalendarUtils.GetGoodFriday(2019).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2020-04-10", CalendarUtils.GetGoodFriday(2020).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2021-04-02", CalendarUtils.GetGoodFriday(2021).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2022-04-15", CalendarUtils.GetGoodFriday(2022).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2023-04-07", CalendarUtils.GetGoodFriday(2023).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2024-03-29", CalendarUtils.GetGoodFriday(2024).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2025-04-18", CalendarUtils.GetGoodFriday(2025).ToString("yyyy-MM-dd"));
        }
        public void GetWhitSunday()
        {
            Assert.AreEqual("2000-06-11", CalendarHelper.GetWhitSunday(2000).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2001-06-03", CalendarHelper.GetWhitSunday(2001).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2002-05-19", CalendarHelper.GetWhitSunday(2002).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2003-06-08", CalendarHelper.GetWhitSunday(2003).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2004-05-30", CalendarHelper.GetWhitSunday(2004).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2005-05-15", CalendarHelper.GetWhitSunday(2005).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2006-06-04", CalendarHelper.GetWhitSunday(2006).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2007-05-27", CalendarHelper.GetWhitSunday(2007).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2008-05-11", CalendarHelper.GetWhitSunday(2008).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2009-05-31", CalendarHelper.GetWhitSunday(2009).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2010-05-23", CalendarHelper.GetWhitSunday(2010).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2011-06-12", CalendarHelper.GetWhitSunday(2011).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2012-05-27", CalendarHelper.GetWhitSunday(2012).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2013-05-19", CalendarHelper.GetWhitSunday(2013).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2014-06-08", CalendarHelper.GetWhitSunday(2014).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2015-05-24", CalendarHelper.GetWhitSunday(2015).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2016-05-15", CalendarHelper.GetWhitSunday(2016).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2017-06-04", CalendarHelper.GetWhitSunday(2017).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2018-05-20", CalendarHelper.GetWhitSunday(2018).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2019-06-09", CalendarHelper.GetWhitSunday(2019).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2020-05-31", CalendarHelper.GetWhitSunday(2020).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2021-05-23", CalendarHelper.GetWhitSunday(2021).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2022-06-05", CalendarHelper.GetWhitSunday(2022).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2023-05-28", CalendarHelper.GetWhitSunday(2023).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2024-05-19", CalendarHelper.GetWhitSunday(2024).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2025-06-08", CalendarHelper.GetWhitSunday(2025).ToString("yyyy-MM-dd"));

            Assert.AreEqual("2000-06-11", CalendarUtils.GetWhitSunday(2000).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2001-06-03", CalendarUtils.GetWhitSunday(2001).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2002-05-19", CalendarUtils.GetWhitSunday(2002).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2003-06-08", CalendarUtils.GetWhitSunday(2003).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2004-05-30", CalendarUtils.GetWhitSunday(2004).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2005-05-15", CalendarUtils.GetWhitSunday(2005).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2006-06-04", CalendarUtils.GetWhitSunday(2006).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2007-05-27", CalendarUtils.GetWhitSunday(2007).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2008-05-11", CalendarUtils.GetWhitSunday(2008).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2009-05-31", CalendarUtils.GetWhitSunday(2009).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2010-05-23", CalendarUtils.GetWhitSunday(2010).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2011-06-12", CalendarUtils.GetWhitSunday(2011).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2012-05-27", CalendarUtils.GetWhitSunday(2012).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2013-05-19", CalendarUtils.GetWhitSunday(2013).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2014-06-08", CalendarUtils.GetWhitSunday(2014).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2015-05-24", CalendarUtils.GetWhitSunday(2015).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2016-05-15", CalendarUtils.GetWhitSunday(2016).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2017-06-04", CalendarUtils.GetWhitSunday(2017).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2018-05-20", CalendarUtils.GetWhitSunday(2018).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2019-06-09", CalendarUtils.GetWhitSunday(2019).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2020-05-31", CalendarUtils.GetWhitSunday(2020).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2021-05-23", CalendarUtils.GetWhitSunday(2021).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2022-06-05", CalendarUtils.GetWhitSunday(2022).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2023-05-28", CalendarUtils.GetWhitSunday(2023).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2024-05-19", CalendarUtils.GetWhitSunday(2024).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2025-06-08", CalendarUtils.GetWhitSunday(2025).ToString("yyyy-MM-dd"));
        }
        private void UpdateCalendar()
        {
            Debug.WriteLine("Start UpdateCalendar()");

            var rowNum = CalendarUtils.CalcRowSize(_year, _month);

            var calendarDateRowHeight = (Height * 0.8) / rowNum;
            var rowCollections        = new RowDefinitionCollection();

            rowCollections.Add(calendarGrid.RowDefinitions[0]);
            for (var i = 0; i < rowNum; i++)
            {
                rowCollections.Add(new RowDefinition {
                    Height = calendarDateRowHeight
                });
            }

            calendarGrid.RowDefinitions = rowCollections;

            var prevMonthDay = CalendarUtils.CalcPrevMonthDays(_year, _month);

            Debug.WriteLine("既存のカレンダー削除");
            calendarGrid.Children.Clear();

            Debug.WriteLine("カレンダー作成");
            InitCalendarHeader();
            for (var i = 0; i < rowNum; i++)
            {
                for (var j = 1; j <= 7; j++)
                {
                    var idx      = (i * 7) + j;
                    var dateTime = CalendarUtils.CalcDate(_year, _month, prevMonthDay, idx);
                    var cell     = new Cell(dateTime.Year, dateTime.Month, dateTime.Day)
                    {
                        Index = idx - 1
                    };

                    if (dateTime.Year == _year && dateTime.Month == _month)
                    {
                        cell.BackgroundColor = Color.White;
                    }
                    else
                    {
                        cell.BackgroundColor = Color.Gray;
                    }
                    Debug.WriteLine("{0}-{1}-{2}", dateTime.Year, dateTime.Month, dateTime.Day);
                    calendarGrid.Children.Add(cell, j - 1, i + 1);
                }
            }

            var pickerDateTime = new DateTime(_year, _month, 1);

            thisMonth.Text = $"{pickerDateTime.Year}年{pickerDateTime.Month}月";

            Debug.WriteLine("End UpdateCalendar()");
        }
        public void GetPalmSunday()
        {
            Assert.AreEqual("2000-04-16", CalendarHelper.GetPalmSunday(2000).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2001-04-08", CalendarHelper.GetPalmSunday(2001).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2002-03-24", CalendarHelper.GetPalmSunday(2002).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2003-04-13", CalendarHelper.GetPalmSunday(2003).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2004-04-04", CalendarHelper.GetPalmSunday(2004).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2005-03-20", CalendarHelper.GetPalmSunday(2005).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2006-04-09", CalendarHelper.GetPalmSunday(2006).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2007-04-01", CalendarHelper.GetPalmSunday(2007).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2008-03-16", CalendarHelper.GetPalmSunday(2008).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2009-04-05", CalendarHelper.GetPalmSunday(2009).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2010-03-28", CalendarHelper.GetPalmSunday(2010).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2011-04-17", CalendarHelper.GetPalmSunday(2011).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2012-04-01", CalendarHelper.GetPalmSunday(2012).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2013-03-24", CalendarHelper.GetPalmSunday(2013).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2014-04-13", CalendarHelper.GetPalmSunday(2014).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2015-03-29", CalendarHelper.GetPalmSunday(2015).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2016-03-20", CalendarHelper.GetPalmSunday(2016).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2017-04-09", CalendarHelper.GetPalmSunday(2017).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2018-03-25", CalendarHelper.GetPalmSunday(2018).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2019-04-14", CalendarHelper.GetPalmSunday(2019).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2020-04-05", CalendarHelper.GetPalmSunday(2020).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2021-03-28", CalendarHelper.GetPalmSunday(2021).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2022-04-10", CalendarHelper.GetPalmSunday(2022).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2023-04-02", CalendarHelper.GetPalmSunday(2023).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2024-03-24", CalendarHelper.GetPalmSunday(2024).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2025-04-13", CalendarHelper.GetPalmSunday(2025).ToString("yyyy-MM-dd"));

            Assert.AreEqual("2000-04-16", CalendarUtils.GetPalmSunday(2000).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2001-04-08", CalendarUtils.GetPalmSunday(2001).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2002-03-24", CalendarUtils.GetPalmSunday(2002).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2003-04-13", CalendarUtils.GetPalmSunday(2003).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2004-04-04", CalendarUtils.GetPalmSunday(2004).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2005-03-20", CalendarUtils.GetPalmSunday(2005).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2006-04-09", CalendarUtils.GetPalmSunday(2006).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2007-04-01", CalendarUtils.GetPalmSunday(2007).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2008-03-16", CalendarUtils.GetPalmSunday(2008).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2009-04-05", CalendarUtils.GetPalmSunday(2009).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2010-03-28", CalendarUtils.GetPalmSunday(2010).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2011-04-17", CalendarUtils.GetPalmSunday(2011).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2012-04-01", CalendarUtils.GetPalmSunday(2012).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2013-03-24", CalendarUtils.GetPalmSunday(2013).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2014-04-13", CalendarUtils.GetPalmSunday(2014).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2015-03-29", CalendarUtils.GetPalmSunday(2015).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2016-03-20", CalendarUtils.GetPalmSunday(2016).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2017-04-09", CalendarUtils.GetPalmSunday(2017).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2018-03-25", CalendarUtils.GetPalmSunday(2018).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2019-04-14", CalendarUtils.GetPalmSunday(2019).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2020-04-05", CalendarUtils.GetPalmSunday(2020).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2021-03-28", CalendarUtils.GetPalmSunday(2021).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2022-04-10", CalendarUtils.GetPalmSunday(2022).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2023-04-02", CalendarUtils.GetPalmSunday(2023).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2024-03-24", CalendarUtils.GetPalmSunday(2024).ToString("yyyy-MM-dd"));
            Assert.AreEqual("2025-04-13", CalendarUtils.GetPalmSunday(2025).ToString("yyyy-MM-dd"));
        }
Example #8
0
        static void Main()
        {
            var calendarUtils = new CalendarUtils();
            var startDate     = new DateTime(1901, 1, 1);
            var endDate       = new DateTime(2000, 12, 31);

            var sundayOnFirstOfMonth = calendarUtils.GetSundaysThatAreOnTheFirstDayOfMonth(startDate, endDate);

            Console.WriteLine($"Number of Sundays on the first of the month during the 20th century: {sundayOnFirstOfMonth.Count}");
            Console.ReadKey();
        }
Example #9
0
        /// <summary>
        /// 根据日线创建周线
        /// </summary>
        /// <param name="begin"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public KLine CreateWeek(DateTime begin, DateTime end)
        {
            KLine weekKLine = new KLine(this.Code, TimeUnit.week);

            DateTime d = CalendarUtils.GetWeek(begin, DayOfWeek.Friday);

            while (d <= end)
            {
                KLineItem weekItem = new KLineItem();
                DateTime  t        = d;
                KLineItem t1       = this.GetNearest(t, false);
                if (t1 == null)
                {
                    d = d.AddDays(7); continue;
                }
                weekItem.SetValue <double>("close", t1.CLOSE);
                t1 = this.GetNearest(t.AddDays(-4), true, 0);
                if (t1 == null)
                {
                    d = d.AddDays(7); continue;
                }
                weekItem.SetValue <double>("close", t1.OPEN);

                int    index = this.IndexOf(t1);
                double high  = 0;
                double low   = 0;
                while (index < this.Count && this[index].Date <= d)
                {
                    if (high == 0 || high < this[index].HIGH)
                    {
                        high = this[index].HIGH;
                    }
                    if (low > this[index].LOW)
                    {
                        low = this[index].LOW;
                    }
                    index += 1;
                }
                if (low == 0 || high == 0)
                {
                    d = d.AddDays(7);
                    continue;
                }

                weekItem.SetValue <double>("high", high);
                weekItem.SetValue <double>("low", low);
                weekItem.SetValue <DateTime>("time", d);
                weekItem.SetValue <String>("code", Code);
                weekKLine.Add(weekItem);

                d = d.AddDays(7);
            }
            return(weekKLine);
        }
Example #10
0
        static void Main(string[] args)
        {
            var startDate = new DateTime(Convert.ToInt32(args[1]), Convert.ToInt32(args[0]), 01);
            var endDate   = startDate.AddDays(DateTime.DaysInMonth(startDate.Year, startDate.Month)).AddDays(-1);

            var calendarUtils = new CalendarUtils(_holidayTerms, _ascTerms);
            var service       = calendarUtils.CreateService(ApplicationName);
            var days          = calendarUtils.GenerateDays(startDate, endDate, service);

            calendarUtils.GenerateCalendar(startDate, days, Color.LimeGreen, Color.BurlyWood);
        }
Example #11
0
        private void button1_Click(object sender, EventArgs e)
        {
            pictureBox1.Visible = true;
            char[] charSeparators = new char[] { ',' };
            button1.Enabled = false;

            var startDate = new DateTime(Convert.ToInt32(txtYear.Text), Convert.ToInt32(txtMonth.Text), 01);
            var endDate   = startDate.AddDays(DateTime.DaysInMonth(startDate.Year, startDate.Month)).AddDays(-1);

            var holidayTerms = txtHolidayTerms.Text.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries).ToList();
            var ascTerms     = txtAscTerms.Text.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries).ToList();

            var calendarUtils = new CalendarUtils(holidayTerms, ascTerms);
            var service       = calendarUtils.CreateService(_applicationName);
            var days          = calendarUtils.GenerateDays(startDate, endDate, service);

            calendarUtils.GenerateCalendar(startDate, days, _holidayColour, _ascColour);
            button1.Enabled     = true;
            pictureBox1.Visible = false;
        }
Example #12
0
    public void SetFormat()
    {
        if (labelDisplay == LabelDisplay.UsFormat)
        {
            string year = dateTime.Year.ToString();
            string day  = dateTime.Day.ToString();
            day = CalendarUtils.GetDayDigit(day, addZero);
            string month = dateTime.ToString("MM");              // 03
//			if( addZero && month.Length == 1 ) month = "0" + day;
            month = CalendarUtils.GetMonthDigit(month, addZero);

            dateLabel.text = month + dateDelim + day + dateDelim + year;
        }
        if (labelDisplay == LabelDisplay.EuFormat)
        {
            string year = dateTime.Year.ToString();
            string day  = dateTime.Day.ToString();
            day = CalendarUtils.GetDayDigit(day, addZero);
            string month = dateTime.ToString("MM");              // 03
            month = CalendarUtils.GetMonthDigit(month, addZero);
//			if( addZero && month.Length == 1 ) month = "0" + month;
            dateLabel.text = day + dateDelim + month + dateDelim + year;
        }
        if (labelDisplay == LabelDisplay.UsFormatFull)
        {
            string year = dateTime.Year.ToString();
            string day  = dateTime.Day.ToString();
            day = CalendarUtils.GetDayDigit(day, addZero);
            string month = dateTime.ToString("MMMM");              // 03
            dateLabel.text = month + dateDelim + day + dateDelim + year;
        }
        if (labelDisplay == LabelDisplay.EuFormatFull)
        {
            string year = dateTime.Year.ToString();
            string day  = dateTime.Day.ToString();
            day = CalendarUtils.GetDayDigit(day, addZero);
            string month = dateTime.ToString("MMMM");              // 03
            dateLabel.text = day + dateDelim + month + dateDelim + year;
        }
    }
Example #13
0
    public void NextMonth()
    {
        string month = "";

        monthNumber++;

        if (monthNumber > 12)
        {
            if (cycleThroughMonth)
            {
                monthNumber = 1;
            }
            else
            {
                monthNumber = 12;
            }
        }

        month           = CalendarUtils.GetMonthFull(monthNumber);
        monthInput.text = month;

        print("NextMonth: " + monthNumber);
    }
Example #14
0
    public string SaveDate(string saveName)
    {
        string saveDate = "";

        day             = CalendarUtils.GetDayDigit(day, true);
        monthDigit      = CalendarUtils.GetMonthDigit(month, true);
        monthDigitSaved = monthDigit;
        yearSaved       = year;

        // Standarized for DateTime
        saveDate = year + "-" + monthDigit + "-" + day;

//		if( usFormat ) {
//			saveDate = monthDigit + dateDelim + day + dateDelim + year;
//		}
//		else {
//			saveDate = day + dateDelim + monthDigit + dateDelim + year;
//		}

        PlayerPrefs.SetString(saveName, saveDate);
//		Debug.Log( "SaveDate date saved: " + saveDate );
        return(saveDate);
    }
        /// <summary>
        /// 画坐标轴
        /// </summary>
        /// <param name="g"></param>
        private void drawAsix(Graphics g)
        {
            //画X轴
            g.DrawLine(xasixPen, origin.X, origin.Y, this.Width, origin.Y);
            //画Y轴
            g.DrawLine(xasixPen, origin.X, origin.Y, origin.X, 0);
            //找到所有时间单位
            List <DateTime> datetimes = null;

            if (timeUnit == TimeUnit.day)//如果数据时间单位是日
            {
                datetimes = CalendarUtils.WorkDayList(this.beginTime, this.endTime);
            }
            else if (timeUnit == TimeUnit.week)
            {
                datetimes = CalendarUtils.WorkWeekList(this.beginTime, this.endTime);
            }
            if (datetimes == null)
            {
                return;
            }
            //计算每个时间单位的像素数
            int pixelNumPerTimeunit = AxisXLength / datetimes.Count;
        }
Example #16
0
        /// <summary>
        /// 执行卖出操作
        /// </summary>
        /// <param name="tradeRecord"></param>
        /// <param name="strategyParam"></param>
        /// <param name="backtestParam"></param>
        public virtual void Execute(TradeRecords tradeRecord, Properties strategyParam, BacktestParameter backtestParam)
        {
            #region 1初始化行情库
            if (tradeRecord == null)
            {
                return;
            }

            IndicatorRepository repository = (IndicatorRepository)backtestParam.Get <Object>("repository");
            if (repository == null)
            {
                return;
            }

            #endregion

            #region 2 取得策略参数

            int    p_maxbuynum      = strategyParam.Get <int>("maxbuynum", 0);
            double p_maxprofilt     = strategyParam.Get <double>("maxprofilt");
            int    p_maxholddays    = strategyParam.Get <int>("maxholddays");
            double p_stoploss       = strategyParam.Get <double>("stoploss");
            int    p_choosedays     = strategyParam.Get <int>("choosedays");
            double p_chooseprofilt  = strategyParam.Get <double>("chooseprofilt");
            double p_addholdprofilt = strategyParam.Get <double>("addholdprofilt");
            double p_addholdamount  = strategyParam.Get <double>("addholdamount");
            #endregion


            String           code  = tradeRecord.Code;
            List <TradeBout> bouts = tradeRecord.Bouts;

            #region 3 遍历每一个买入回合
            for (int i = 0; i < bouts.Count; i++)
            {
                #region 3.1 取得该回合的行情数据
                TradeBout          bout = bouts[i];
                TimeSerialsDataSet ds   = repository[bout.Code];
                if (ds == null)
                {
                    continue;
                }

                if (bout.Completed)
                {
                    continue;                //跳过已完成的
                }
                KLine kline = ds.DayKLine;
                if (kline == null)
                {
                    continue;
                }

                bool chooseToSell = false;//择机卖出状态,是指持仓价值较低

                int bIndex = kline.IndexOf(bout.BuyInfo.TradeDate);
                if (bIndex < 0)
                {
                    continue;
                }
                KLineItem klineItemDay = kline[bIndex];
                DateTime  d            = klineItemDay.Date;


                #endregion

                #region 3.2 如果超过了最大持仓数限制,该回合跳过
                if (p_maxbuynum > 0)
                {
                    //计算当前回合的买入日期这天有多少持仓
                    int count = 0;
                    bouts.ForEach(x => { if (x.Completed && bout.BuyInfo.TradeDate.Date >= x.BuyInfo.TradeDate.Date && bout.BuyInfo.TradeDate.Date < x.SellInfo.TradeDate.Date)
                                         {
                                             count++;
                                         }
                                  });

                    if (count > p_maxbuynum)
                    {
                        continue;
                    }
                }
                #endregion


                #region 3.3 寻找卖点
                String reason = "";
                for (int index = bIndex + 1; index < kline.Count; index++)
                {
                    klineItemDay = kline[index];
                    d            = klineItemDay.Date;


                    #region A 计算以当日最高价和收盘价卖出的盈利
                    double diff        = klineItemDay.HIGH - bout.BuyInfo.TradePrice;
                    double percentHigh = diff / bout.BuyInfo.TradePrice;
                    diff = klineItemDay.CLOSE - bout.BuyInfo.TradePrice;
                    double percentClose = diff / bout.BuyInfo.TradePrice;
                    #endregion

                    #region B 盈利超过预定
                    if (p_maxprofilt > 0 && percentHigh >= p_maxprofilt) //盈利超过预定
                    {
                        double price  = bout.BuyInfo.TradePrice * (1 + p_maxprofilt);
                        int    amount = bout.BuyInfo.Amount;
                        bout.RecordTrade(2, klineItemDay.Date, TradeDirection.Sell, price, amount, backtestParam.Volumecommission, backtestParam.Stampduty, "盈利>=" + p_maxprofilt.ToString("F2"));
                        break;
                    }
                    #endregion

                    #region C 择机卖出状态
                    if (chooseToSell)
                    {
                        for (int t = 0; t < p_choosedays; t++)
                        {
                            index += t;
                            if (index >= kline.Count)
                            {
                                break;
                            }
                            double percent = (kline[index].HIGH - bout.BuyInfo.TradePrice) / bout.BuyInfo.TradePrice;
                            if (percent >= p_chooseprofilt)
                            {
                                double price  = bout.BuyInfo.TradePrice * (1 + p_chooseprofilt);
                                int    amount = bout.BuyInfo.Amount;
                                bout.RecordTrade(2, kline[index].Date, TradeDirection.Sell, price, amount, backtestParam.Volumecommission, backtestParam.Stampduty, (reason == "" ? "" : reason + ",并") + "在第" + (t + 1).ToString() + "天择机卖出");
                                break;
                            }
                        }
                        if (!bout.Completed)
                        {
                            if (index >= kline.Count)
                            {
                                return;
                            }
                            double price  = kline[index].CLOSE;
                            int    amount = bout.BuyInfo.Amount;
                            bout.RecordTrade(2, kline[index].Date, TradeDirection.Sell, price, amount, backtestParam.Volumecommission, backtestParam.Stampduty, (reason == "" ? "" : reason + ",并") + "择机强制卖出");
                        }
                        break;
                    }
                    #endregion

                    #region D 持仓超过n天进入到择机卖出状态
                    if (p_maxholddays != 0 && CalendarUtils.WorkDayCount(bout.BuyInfo.TradeDate, klineItemDay.Date) >= p_maxholddays)
                    {
                        reason       = "持仓超过" + p_maxholddays.ToString() + "天";
                        chooseToSell = true;
                        continue;
                    }
                    #endregion


                    #region E 达到止损线,进入到择机卖出状态
                    double loss = (klineItemDay.LOW - bout.BuyInfo.TradePrice) / bout.BuyInfo.TradePrice;
                    if (p_stoploss > 0 && loss < 0 && loss < -1 * p_stoploss)
                    {
                        reason = "达到止损" + p_stoploss.ToString("F2");
                        bout.RecordTrade(2, d, TradeDirection.Sell, bout.BuyInfo.TradePrice * (1 - p_stoploss), bout.BuyInfo.Amount, backtestParam.Volumecommission, backtestParam.Stampduty, reason);
                        break;
                    }
                    #endregion

                    #region F调用子类的算法来寻找卖点
                    if (!bout.Completed)
                    {
                        chooseToSell = DoSell(code, bout, d, strategyParam, backtestParam, out reason);
                    }
                    if (bout.Completed)
                    {
                        break;
                    }
                    #endregion

                    #region 判断是否加仓或者减仓
                    if (p_addholdprofilt > 0 && p_addholdamount > 0)
                    {
                        if (percentClose > p_addholdprofilt)
                        {
                            int       addamount = (int)(bout.BuyInfo.Amount * p_addholdamount);
                            TradeInfo tradeInfo = new TradeInfo();
                            tradeInfo.Code       = bout.Code;
                            tradeInfo.Amount     = addamount;
                            tradeInfo.Direction  = TradeDirection.Buy;
                            tradeInfo.Reason     = "加仓";
                            tradeInfo.Fee        = backtestParam.Volumecommission;
                            tradeInfo.Stamps     = backtestParam.Stampduty;
                            tradeInfo.TradeDate  = klineItemDay.Date;
                            tradeInfo.TradePrice = klineItemDay.CLOSE;

                            bout.BuyInfo.TradePrice = (bout.BuyInfo.Amount * bout.BuyInfo.TradePrice + addamount * klineItemDay.CLOSE) / (bout.BuyInfo.Amount + addamount);
                            bout.BuyInfo.Amount    += addamount;
                        }
                    }
                    #endregion
                }

                #endregion //寻找卖点结束
            }

            #endregion //遍历每一个买入回合结束
        }
Example #17
0
        public virtual ITimeSeries Zoomout(TimeUnit tu, DateTime begin, DateTime end)
        {
            Func <List <T>, T> merger = this.getElementMerger();

            if (merger == null)
            {
                return(null);
            }
            if (this.Count <= 0)
            {
                return(null);
            }
            if (begin < this[0].Date)
            {
                begin = this[0].Date;
            }
            if (end > this[this.Count - 1].Date)
            {
                end = this[this.Count - 1].Date;
            }

            List <T>       items  = new List <T>();
            TimeSeries <T> result = (TimeSeries <T>) this.GetType().GetConstructor(new Type[] { typeof(String), typeof(TimeUnit) }).Invoke(new Object[] { code, tu });

            /*
             * DateTime d = begin;
             * KeyValuePair<int, ITimeSeriesItem> kv = this.GetNearest(d);
             * if (kv.Value == null)
             *  return null;
             * int index = kv.Key;
             * while(index < this.Count)
             * {
             *  int n = CalendarUtils.TimeUnitGetSerialNo(this[index].Date,tu);
             *  if (n == 1)
             *      break;
             *  index += 1;
             * }
             *
             * DateTime[] dayRange = null;
             * for (int i=index;i<this.Count;i++)
             * {
             *  d = this[i].Date;
             *  if(dayRange == null)
             *      dayRange = CalendarUtils.TimeUnitRange(d, tu);
             *  if(d<=dayRange[1])
             *  {
             *      items.Add(this[i]);
             *      continue;
             *  }
             *  T newItem = merger(items);
             *  if (newItem != null)
             *      result.Add(newItem);
             *  dayRange = null;
             *
             * }
             */

            DateTime d = begin;

            while (d <= end)
            {
                DateTime[] dayRange = CalendarUtils.TimeUnitRange(d, tu); //找到d所在的周期的第一天
                KeyValuePair <int, ITimeSeriesItem> kvBegin = this.GetNearest(dayRange[0]);
                KeyValuePair <int, ITimeSeriesItem> kvEnd   = this.GetNearest(dayRange[1]);
                items.Clear();
                for (int i = kvBegin.Key; i <= kvEnd.Key; i++)
                {
                    items.Add(this[i]);
                }
                T newItem = merger(items);
                if (newItem != null)
                {
                    result.Add(newItem);
                }
                d = CalendarUtils.TimeUnitNextDate(d, tu);
            }

            return(result);
        }
Example #18
0
    public void SetCalendar(bool loadData)
    {
        if (targetCalendarPanel != null)
        {
            // clean it up first
            listDayObject.Clear();
//			listDays.Clear();
            int childIdx = 0;
            foreach (Transform t in targetCalendarPanel.transform)
            {
                if (childIdx > 0)
                {
                    Destroy(t.gameObject);
                }
                childIdx++;
            }
//			ClearCalendar ();

            if (loadData)
            {
                LoadDate();
            }

            monthButton.transform.GetChild(0).GetComponent <Text>().text = month;
            dateTimeNow = System.DateTime.Now;
            monthDigit  = CalendarUtils.GetMonthDigit(month, true);
            daysInMonth = GetDaysInMonth(int.Parse(year), int.Parse(monthDigit));

            // previous month
            int fillPrevMonthDays = 0;
//			Debug.Log( "SetCalendar - monthDigit: " + monthDigit + ", year: " + year + " , daysInMonth: " + daysInMonth );
            DateTime dateTimeDay1 = DateTime.Parse(year + "/" + monthDigit + "/" + 1);
            if (!dateTimeDay1.DayOfWeek.Equals("Monday"))
            {
                int yearDigitPrev  = int.Parse(year);
                int monthDigitPrev = int.Parse(monthDigit) - 1;
                if (monthDigitPrev < 1)
                {
                    monthDigitPrev = 12;
                    yearDigitPrev  = yearDigitPrev - 1;
                }

//				Debug.Log ( "fillPrevMonthDays: " + dateTimeDay1.DayOfWeek  );
                if (dateTimeDay1.DayOfWeek.ToString().Equals("Tuesday"))
                {
                    fillPrevMonthDays = 1;
                }
                else if (dateTimeDay1.DayOfWeek.ToString().Equals("Wednesday"))
                {
                    fillPrevMonthDays = 2;
                }
                else if (dateTimeDay1.DayOfWeek.ToString().Equals("Thursday"))
                {
                    fillPrevMonthDays = 3;
                }
                else if (dateTimeDay1.DayOfWeek.ToString().Equals("Friday"))
                {
                    fillPrevMonthDays = 4;
                }
                else if (dateTimeDay1.DayOfWeek.ToString().Equals("Saturday"))
                {
                    fillPrevMonthDays = 5;
                }
                else if (dateTimeDay1.DayOfWeek.ToString().Equals("Sunday"))
                {
                    fillPrevMonthDays = 6;
                }

                int daysInMonthPrev = GetDaysInMonth(yearDigitPrev, monthDigitPrev);

//				int k = 0;
                for (int i = daysInMonthPrev - fillPrevMonthDays + 1; i <= daysInMonthPrev; i++)
                {
                    string   dayString = i + "";
                    DateTime dateTime  = DateTime.Parse(yearDigitPrev + "/" + monthDigitPrev + "/" + i);
//					dayString += " " + dateTime.DayOfWeek; //ToString("MM/dd/yyyy");;
//					listDays.Add( dayString );

                    GameObject g = Instantiate(contentCalDay) as GameObject;
                    g.SetActive(true);
                    g.transform.SetParent(targetCalendarPanel.transform);
                    g.name = dateTime.ToString("MM/dd/yyyy");
                    g.transform.GetComponent <Image>().color = prevMonthDayColor;
                    g.transform.localScale    = Vector3.one;
                    g.transform.localPosition = Vector3.zero;
//					g.transform.GetComponent<Button>().onClick.AddListener( // if is an external prefab
                    listDayObject.Add(g);
                    g.transform.GetChild(0).GetComponent <Text>().text = listDayObject[listDayObject.Count - 1].name.Split('/')[1];                     // listDays[listDays.Count-1];
//					k++;
                }
            }

            // current month
            for (int i = 1; i <= daysInMonth; i++)
            {
                string   dayString = i + "";
                DateTime dateTime  = DateTime.Parse(year + "/" + monthDigit + "/" + i);
//				dayString += " " + dateTime.DayOfWeek; //ToString("MM/dd/yyyy");;
//				listDays.Add( dayString );

                GameObject g = Instantiate(contentCalDay) as GameObject;
                g.SetActive(true);
                g.transform.SetParent(targetCalendarPanel.transform);
                g.name = dateTime.ToString("MM/dd/yyyy");
                g.transform.localScale    = Vector3.one;
                g.transform.localPosition = Vector3.zero;
                SetDayColor(g, dayString);
                listDayObject.Add(g);
                g.transform.GetChild(0).GetComponent <Text>().text = listDayObject[listDayObject.Count - 1].name.Split('/')[1];                 //listDays[listDays.Count-1];
            }

            // next month
            int monthDigitNext = int.Parse(monthDigit) + 1;
            int yearDigitNext  = int.Parse(year);
            if (monthDigitNext > 12)
            {
                monthDigitNext = 1;
                yearDigitNext  = yearDigitNext + 1;
            }

            int gridCount = rows * cols;

            int len = gridCount - listDayObject.Count;           // listDays.Count;
            for (int i = 1; i <= len; i++)
            {
                string   dayString = i + "";
                DateTime dateTime  = DateTime.Parse(yearDigitNext + "/" + monthDigitNext + "/" + i);
//				dayString += " " + dateTime.DayOfWeek; //ToString("MM/dd/yyyy");;
//				listDays.Add( dayString );

                GameObject g = Instantiate(contentCalDay) as GameObject;
                g.SetActive(true);
                g.transform.SetParent(targetCalendarPanel.transform);
                g.name = dateTime.ToString("MM/dd/yyyy");
//				g.transform.GetChild(0).GetComponent<Text>().text = dayString; //listDays[listDays.Count-1];
                g.transform.GetComponent <Image>().color = nextMonthDayColor;
                g.transform.localScale    = Vector3.one;
                g.transform.localPosition = Vector3.zero;
                listDayObject.Add(g);
                g.transform.GetChild(0).GetComponent <Text>().text = listDayObject[listDayObject.Count - 1].name.Split('/')[1];                //listDays[listDays.Count-1];
            }
        }
    }
Example #19
0
        public override TradeInfo DoSell(HoldRecord holdRecord, DateTime d, Properties strategyParam, StrategyContext context)
        {
            if (holdRecord == null)
            {
                return(null);
            }

            //取得行情库
            IndicatorRepository repository = (IndicatorRepository)context.Get <Object>("repository");

            if (repository == null)
            {
                return(null);
            }
            TimeSerialsDataSet ds = repository[holdRecord.code];

            if (ds == null)
            {
                return(null);
            }
            KLine     klineDay     = ds.DayKLine;
            KLineItem klineItemDay = klineDay[d];

            if (klineItemDay == null)
            {
                return(null);
            }

            //取得策略参数
            double         p_maxprofilt     = strategyParam.Get <double>("maxprofilt");
            int            p_maxholddays    = strategyParam.Get <int>("maxholddays");
            double         p_stoploss       = strategyParam.Get <double>("stoploss");
            int            p_choosedays     = strategyParam.Get <int>("choosedays");
            double         p_chooseprofilt  = strategyParam.Get <double>("chooseprofilt");
            GrailParameter p_grail          = GrailParameter.Parse(strategyParam.Get <String>("grail"));
            double         stampduty        = context.Get <double>("stampduty");
            double         volumecommission = context.Get <double>("volumecommission");

            //大盘要求必须卖
            if (p_grail.MustSell(d, holdRecord.code))
            {
                TradeInfo tradeInfo = new TradeInfo()
                {
                    Direction    = TradeDirection.Sell,
                    Code         = holdRecord.code,
                    Amount       = holdRecord.amount,
                    EntrustPrice = klineItemDay.CLOSE,
                    EntrustDate  = d,
                    TradeDate    = d,
                    TradePrice   = klineItemDay.CLOSE,
                    Stamps       = stampduty,
                    Fee          = volumecommission,
                    TradeMethod  = TradeInfo.TM_AUTO,
                    Reason       = "大盘指数要求卖出"
                };
                return(tradeInfo);
            }

            double profilt = (klineItemDay.CLOSE - holdRecord.buyPrice) / holdRecord.buyPrice;

            //判断是否到达最大收益
            if (p_maxprofilt > 0)
            {
                if (profilt >= p_maxprofilt)
                {
                    TradeInfo tradeInfo = new TradeInfo()
                    {
                        Direction    = TradeDirection.Sell,
                        Code         = holdRecord.code,
                        Amount       = holdRecord.amount,
                        EntrustPrice = klineItemDay.CLOSE,
                        EntrustDate  = d,
                        TradeDate    = d,
                        TradePrice   = klineItemDay.CLOSE,
                        Stamps       = stampduty,
                        Fee          = volumecommission,
                        TradeMethod  = TradeInfo.TM_AUTO,
                        Reason       = "盈利达到" + p_maxprofilt.ToString("F2")
                    };
                    return(tradeInfo);
                }
            }

            //盈利超过个股预期
            if (holdRecord.expect > 0)
            {
                if (profilt >= p_maxprofilt)
                {
                    TradeInfo tradeInfo = new TradeInfo()
                    {
                        Direction    = TradeDirection.Sell,
                        Code         = holdRecord.code,
                        Amount       = holdRecord.amount,
                        EntrustPrice = klineItemDay.CLOSE,
                        EntrustDate  = d,
                        TradeDate    = d,
                        TradePrice   = klineItemDay.CLOSE,
                        Stamps       = stampduty,
                        Fee          = volumecommission,
                        TradeMethod  = TradeInfo.TM_AUTO,
                        Reason       = "盈利达到个股预期" + holdRecord.expect.ToString("F2")
                    };
                    return(tradeInfo);
                }
            }

            //预期要求立即卖出
            if (holdRecord.expect == -1)
            {
                TradeInfo tradeInfo = new TradeInfo()
                {
                    Direction    = TradeDirection.Sell,
                    Code         = holdRecord.code,
                    Amount       = holdRecord.amount,
                    EntrustPrice = klineItemDay.CLOSE,
                    EntrustDate  = d,
                    TradeDate    = d,
                    TradePrice   = klineItemDay.CLOSE,
                    Stamps       = stampduty,
                    Fee          = volumecommission,
                    TradeMethod  = TradeInfo.TM_AUTO,
                    Reason       = "个股预期极低"
                };
                return(tradeInfo);
            }

            //个股观望天数超过预期
            int holdDays = CalendarUtils.WorkDayCount(holdRecord.buyDate, d);

            if (holdRecord.expect < 0)
            {
                if (holdDays >= holdRecord.expect * -1)
                {
                    TradeInfo tradeInfo = new TradeInfo()
                    {
                        Direction    = TradeDirection.Sell,
                        Code         = holdRecord.code,
                        Amount       = holdRecord.amount,
                        EntrustPrice = klineItemDay.CLOSE,
                        EntrustDate  = d,
                        TradeDate    = d,
                        TradePrice   = klineItemDay.CLOSE,
                        Stamps       = stampduty,
                        Fee          = volumecommission,
                        TradeMethod  = TradeInfo.TM_AUTO,
                        Reason       = "个股预期观望超过" + (-1 * holdRecord.expect).ToString() + "天"
                    };
                    return(tradeInfo);
                }
            }

            //达到止损线
            if (p_stoploss > 0)
            {
                if (-1 * profilt > p_stoploss)
                {
                    TradeInfo tradeInfo = new TradeInfo()
                    {
                        Direction    = TradeDirection.Sell,
                        Code         = holdRecord.code,
                        Amount       = holdRecord.amount,
                        EntrustPrice = klineItemDay.CLOSE,
                        EntrustDate  = d,
                        TradeDate    = d,
                        TradePrice   = klineItemDay.CLOSE,
                        Stamps       = stampduty,
                        Fee          = volumecommission,
                        TradeMethod  = TradeInfo.TM_AUTO,
                        Reason       = "到达止损线" + p_stoploss.ToString("F2")
                    };
                    return(tradeInfo);
                }
            }

            //达到最大持仓天数
            if (p_maxholddays > 0)
            {
                if (holdDays > p_maxholddays)
                {
                    TradeInfo tradeInfo = new TradeInfo()
                    {
                        Direction    = TradeDirection.Sell,
                        Code         = holdRecord.code,
                        Amount       = holdRecord.amount,
                        EntrustPrice = klineItemDay.CLOSE,
                        EntrustDate  = d,
                        TradeDate    = d,
                        TradePrice   = klineItemDay.CLOSE,
                        Stamps       = stampduty,
                        Fee          = volumecommission,
                        TradeMethod  = TradeInfo.TM_AUTO,
                        Reason       = "到达最大持仓天数" + p_maxholddays.ToString()
                    };
                    return(tradeInfo);
                }
            }
            return(null);
        }
Example #20
0
            public override TradeRecords DoBuy(TimeSerialsDataSet ds, Properties strategyParam, BacktestParameter backtestParam)
            {
                TimeSeries <ITimeSeriesItem <List <double> > > dayFunds  = ds.FundTrendCreateOrLoad(TimeUnit.day);
                TimeSeries <ITimeSeriesItem <List <double> > > weekFunds = ds.FundTrendCreateOrLoad(TimeUnit.week);
                TimeSeries <ITimeSeriesItem <double> >         dayCross  = ds.FundTrendCrossCreateOrLoad(TimeUnit.day);
                TimeSeries <ITimeSeriesItem <double> >         weekCross = ds.FundTrendCrossCreateOrLoad(TimeUnit.day);

                if (dayFunds == null || dayFunds.Count <= 0 || weekFunds == null || weekFunds.Count <= 0 || dayCross == null || dayCross.Count <= 0 || weekCross == null || weekCross.Count <= 0)
                {
                    return(null);
                }

                TradeRecords tr          = new TradeRecords(ds.Code);
                DateTime     begin       = backtestParam.BeginDate;
                DateTime     end         = backtestParam.EndDate;
                double       p_day_low   = strategyParam.Get <double>("day_low");
                double       p_day_bias  = strategyParam.Get <double>("day_bias");
                double       p_week_low  = strategyParam.Get <double>("week_low");
                double       p_week_bias = strategyParam.Get <double>("week_bias");
                GetInMode    p_getinMode = (GetInMode)strategyParam.Get <Object>("getinMode");

                for (int i = 0; i < dayFunds.Count; i++)
                {
                    ITimeSeriesItem <List <double> > dayFundItem = dayFunds[i];

                    if (dayFundItem == null)
                    {
                        continue;
                    }
                    if (dayFundItem.Date < begin || dayFundItem.Date >= end)
                    {
                        continue;
                    }
                    if ((dayFundItem.Value[0] - dayFundItem.Value[1]) < p_day_bias)
                    {
                        continue;
                    }

                    DateTime td = CalendarUtils.GetWeek(dayFundItem.Date, DayOfWeek.Friday);
                    ITimeSeriesItem <List <double> > weekFundItem = weekFunds[td];
                    if (weekFundItem == null)
                    {
                        continue;
                    }
                    if ((weekFundItem.Value[0] - weekFundItem.Value[1]) < p_week_bias)
                    {
                        continue;
                    }

                    KLine dayLine = ds.DayKLine;
                    if (dayLine == null)
                    {
                        continue;
                    }
                    KLineItem dayLineItem = dayLine[dayFundItem.Date];
                    if (dayLineItem == null)
                    {
                        continue;
                    }

                    TradeBout bout = new TradeBout(ds.Code);
                    bout.RecordTrade(1, dayFundItem.Date, TradeDirection.Buy, dayLineItem.CLOSE, (int)(p_getinMode.Value / dayLineItem.CLOSE), 0, 0, Name);
                    tr.Bouts.Add(bout);
                }
                return(tr);
            }
 public void Initialize()
 {
     _calendarUtils = new CalendarUtils();
 }