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(); }
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; }