private void DuongXuTheGui_BT_ThucHien_Click(object sender, EventArgs e)
        {
            DTO.DataDuongXuThe dataDXT = new DTO.DataDuongXuThe();

            DTO.DuLieuNgay dln = new DTO.DuLieuNgay();
            BUS.DuongXuThe dxt = new BUS.DuongXuThe();

            PaintGrapFlag = true;

            t1 = new DateTime(Convert.ToInt32(DuongXuTheGui_T1_Nam.Text),Convert.ToInt32(DuongXuTheGui_T1_Thang.Text),Convert.ToInt32(DuongXuTheGui_T1_Ngay.Text));
            t2 = new DateTime(Convert.ToInt32(DuongXuTheGui_T2_Nam.Text), Convert.ToInt32(DuongXuTheGui_T2_Thang.Text), Convert.ToInt32(DuongXuTheGui_T2_Ngay.Text));

            if (t2 > t1)
            {

                dln = (DTO.DuLieuNgay)dlck[dlck.Count - 1];

                if (a.KiemTraNhoHonNgayBatDau(t1, dln.Ngay))
                {
                    MessageBox.Show("Lỗi! Ngày bắt đầu nhỏ hơn thời gian tối thiểu." + Convert.ToString(dln.Ngay.Day) + "\\" + Convert.ToString(dln.Ngay.Month) + "\\" + Convert.ToString(dln.Ngay.Year));
                }
                else
                {
                    dln = (DTO.DuLieuNgay)dlck[0];

                    if (a.KiemTraLonHonNgayKetThuc(t2, dln.Ngay))
                    {
                        MessageBox.Show("Lỗi! Ngày kết thúc lớn hơn thời gian tối thiểu." + Convert.ToString(dln.Ngay.Day) + "\\" + Convert.ToString(dln.Ngay.Month) + "\\" + Convert.ToString(dln.Ngay.Year));
                    }
                    else
                    {

                    }
                }

                dataDXT = dxt.XacDinhXuTheTangGiam(t1, t2, dlck);

                switch (dataDXT.value)
                {
                    case 1:
                        DXTGui_TB.Text = "Xu thế tăng mạnh và không có xu hướng đổi chiều!";
                        break;
                    case 2:
                        DXTGui_TB.Text = "Xu thế tăng vừa và không có xu hướng đổi chiều!";
                        break;
                    case 3:
                        DXTGui_TB.Text = "Xu thế tăng yếu và không có xu hướng đổi chiều!";
                        break;
                    case 4:
                        DXTGui_TB.Text = "Xu thế giãm và không có xu hướng đổi chiều!";
                        break;
                    case 5:
                        DXTGui_TB.Text = "Xu thế tăng mạnh và có xu hướng đổi chiều!";
                        break;
                    case 6:
                        DXTGui_TB.Text = "Xu thế tăng vừa và có xu hướng đổi chiều!";
                        break;
                    case 7:
                        DXTGui_TB.Text = "Xu thế tăng yếu và có xu hướng đổi chiều!";
                        break;
                    case 8:
                        DXTGui_TB.Text = "Xu thế giãm và không có xu hướng đổi chiều!";
                        break;

                }

            }
            else
            {
                MessageBox.Show("Lỗi! Ngày kết thúc bé hơn hoặc bằng ngày bắt đầu.");
            }

            iMax = dataDXT.iMax;
            iMin = dataDXT.iMin;

            Invalidate();
        }
Exemple #2
0
        public DTO.DataDuongXuThe XacDinhXuTheTangGiam(DateTime t1, DateTime t2,ArrayList dlck)
        {
            double Max = 0;
            double Min = 0;
            int index = 0;
            int _iMax = 0;
            int _iMin = 0;
            double value;
            TimeSpan Temp;
            int T2Data = 0;
            double DayDistance = 0;
            double MaxMinDistance = 0;
            double CosValue;
            DTO.DuLieuNgay  dln,_dlnMax,_dlnMin;
            DTO.DataDuongXuThe dataDXT = new DTO.DataDuongXuThe();

            //Search Max and Min
            for (int i = dlck.Count-1; i >= 0; i--)
            {
                dln = (DTO.DuLieuNgay)dlck[i];
                if(t1 <= dln.Ngay)
                {
                    index = i;
                    Max = dln.GiaDongCua;
                    Min = dln.GiaDongCua;
                    _iMax = i;
                    _iMin = i;
                    break;
                }
            }

            for (int i = index; ; i--)
            {
                dln = (DTO.DuLieuNgay)dlck[i];
                if (dln.Ngay > t2)
                {
                    T2Data = i + 1;
                    break;
                }

                if (Max < dln.GiaDongCua)
                {
                    Max = dln.GiaDongCua;
                    _iMax = i;
                }

                if (Min > dln.GiaDongCua)
                {
                    Min = dln.GiaDongCua;
                    _iMin = i;
                }
            }

            //do value
            value = Max - Min;
            dln = (DTO.DuLieuNgay)dlck[T2Data];

            _dlnMax = (DTO.DuLieuNgay)dlck[_iMax];
            _dlnMin = (DTO.DuLieuNgay)dlck[_iMin];

            Temp = _dlnMax.Ngay.Subtract(_dlnMin.Ngay);
            DayDistance = Temp.Days;
            MaxMinDistance = Math.Pow(Math.Pow(DayDistance,2) + Math.Pow(_dlnMax.GiaDongCua - _dlnMin.GiaDongCua,2),0.5f);
            CosValue = DayDistance / MaxMinDistance;

            //System.Windows.Forms.MessageBox.Show(CosValue.ToString());
            //System.Windows.Forms.MessageBox.Show(_dlnMax.Ngay.ToString() + "--" + _dlnMax.GiaDongCua.ToString() + "--" + _dlnMin.Ngay.ToString() + "--" + _dlnMin.GiaDongCua.ToString());

            if (Convert.ToDouble(dln.GiaThapNhat) >= (1 / 2 * (Math.Pow(5, 1 / 2) + 1) / 2 * value))
            {
                if (CosValue > 0)
                {
                    if (CosValue <= 0.38f)
                        dataDXT.value = 1;
                    else
                    {
                        if (CosValue <= 0.61f)
                            dataDXT.value = 2;
                        else
                            dataDXT.value = 3;
                    }
                }
                else
                    dataDXT.value = 4;
            }
            else
            {
                if (Convert.ToDouble(dln.GiaThapNhat) >= (1 / 2 * (Math.Pow(5, 1 / 2) - 1) / 2 * value))
                {
                    if (CosValue > 0)
                    {
                        if (CosValue <= 0.38f)
                            dataDXT.value = 1;
                        else
                        {
                            if (CosValue <= 0.61f)
                                dataDXT.value = 2;
                            else
                                dataDXT.value = 3;
                        }
                    }
                    else
                        dataDXT.value = 4;
                }
                else
                {
                    if (CosValue > 0)
                    {
                        if (CosValue <= 0.38f)
                            dataDXT.value = 5;
                        else
                        {
                            if (CosValue <= 0.61f)
                                dataDXT.value = 6;
                            else
                                dataDXT.value = 7;
                        }
                    }
                    else
                        dataDXT.value = 8;
                }
            }
            dataDXT.iMax = _iMax;
            dataDXT.iMin = _iMin;
            return dataDXT;
        }