コード例 #1
0
        public PointF ToPointF(ObjectPoint op)
        {
            FormulaChart backChart = this.Manager.Canvas.BackChart;

            if (backChart != null)
            {
                return(backChart.GetPointAt(this.AreaName, op.X, null, op.Y));
            }
            return(PointF.Empty);
        }
コード例 #2
0
        /// <summary>
        /// Convert ObjectPoint to PointF
        /// </summary>
        /// <param name="op"></param>
        /// <returns></returns>
        public PointF ToPointF(ObjectPoint op)
        {
            FormulaChart fc = Manager.Canvas.Chart;

            if (fc != null)
            {
                return(fc.GetPointAt(AreaName, op.X, null, op.Y));
            }
            return(PointF.Empty);
        }
コード例 #3
0
ファイル: LineObject.cs プロジェクト: Bulletz4mysa/NBTrade
		public void InitLine3()
		{
			Num = 4;
			InitPoints = new PointF[]{
					new PointF(0,0),
					new PointF(1,3),
					new PointF(2,1),
					new PointF(3,5),
			};
			ControlPoints = new ObjectPoint[Num];
		}
コード例 #4
0
ファイル: ObjectManager.cs プロジェクト: Bulletz4mysa/NBTrade
 public ObjectManager(IObjectCanvas Canvas, PropertyGrid propertyGrid, ObjectToolPanel ToolPanel)
 {
     this.StartPoint = ObjectPoint.Empty;
     this.EndPoint   = ObjectPoint.Empty;
     this.objects    = new Easychart.Finance.Objects.ObjectCollection();
     LoadSettings(ToolPanel);
     this.SetHandler(Canvas, propertyGrid, ToolPanel);
     if (ToolPanel != null)
     {
         ToolPanel.LoadObjectTool();
     }
 }
コード例 #5
0
ファイル: LineObject.cs プロジェクト: Bulletz4mysa/NBTrade
		public void InitLine4()
		{
			Num = 5;
			InitPoints = new PointF[]{
										 new PointF(0,0),
										 new PointF(1,2),
										 new PointF(2,0),
										 new PointF(3,2),
										 new PointF(4,0),
			};
			ControlPoints = new ObjectPoint[Num];
		}
コード例 #6
0
ファイル: ObjectManager.cs プロジェクト: Bulletz4mysa/NBTrade
        private void DesignerControl_MouseDown(object sender, MouseEventArgs e)
        {
            FormulaArea fa = null;
            BaseObject  objectAt;

            this.StartPoint = this.GetValueFromPos((float)e.X, (float)e.Y, ref fa);
            this.SaveChartControlSetting();
            if (this.ObjectType == null)
            {
                this.SelectedObject = null;
                if (e.Button == MouseButtons.Left)
                {
                    int controlPointIndex = this.GetPointIndex(e.X, e.Y, out objectAt);
                    if (objectAt == null)
                    {
                        objectAt = this.GetObjectAt(e.X, e.Y);
                    }
                    if (objectAt != null)
                    {
                        this.SelectedObject = objectAt;
                        this.DragObject     = new ObjectDragging(new PointF((float)e.X, (float)e.Y), controlPointIndex, objectAt);
                        this.Designer.Invalidate(objectAt.GetRegion());
                        objectAt.InMove = true;
                    }
                }
            }
            else if (e.Button == MouseButtons.Right)
            {
                this.objects.Remove(this.DragObject.Object);
                this.DragObjectFinished();
            }
            else if (this.ObjectSteps == 0)
            {
                objectAt          = this.ObjectType.Invoke();
                objectAt.AreaName = fa.Name;
                objectAt.Area     = fa;
                objectAt.InSetup  = true;
                objectAt.InMove   = true;
                if (this.AfterCreateStart != null)
                {
                    this.AfterCreateStart(this, objectAt);
                }
                objectAt.SetObjectManager(this);
                for (int i = 0; i < objectAt.ControlPointNum; i++)
                {
                    objectAt.ControlPoints[i] = this.StartPoint;
                }
                this.objects.Add(objectAt);
                this.SelectedObject = objectAt;
                this.DragObject     = new ObjectDragging(new PointF((float)e.X, (float)e.Y), ((this.ObjectSteps + objectAt.InitNum) > 1) ? 1 : 0, objectAt);
            }
            this.DragMemBmp = null;
        }
コード例 #7
0
ファイル: LineObject.cs プロジェクト: Bulletz4mysa/NBTrade
		public void InitLine5()
		{
			Num = 6;
			InitPoints = new PointF[]{
										 new PointF(0,0),
										 new PointF(1,3),
										 new PointF(2,1),
										 new PointF(3,5),
										 new PointF(4,4),
										 new PointF(5,7),
			};
			ControlPoints = new ObjectPoint[Num];
		}
コード例 #8
0
        public override void CalcPoint()
        {
            SetSnapPrice(snap);
            PointF p1 = ToPointF(ControlPoints[0]);
            PointF p2 = ToPointF(ControlPoints[1]);

            pfStart = new PointF[split.Length];
            pfEnd   = new PointF[split.Length];
            ObjectPoint op = new ObjectPoint(ControlPoints[0].X, 0);

            for (int i = 0; i < split.Length; i++)
            {
                op.Y = GetPrice(i);
                PointF p = ToPointF(op);

                pfStart[i] = new PointF(p1.X, p.Y);
                pfEnd[i]   = new PointF(p2.X, p.Y);
            }
            OpenStartEnd(openStart, openEnd);
        }
コード例 #9
0
        public override void CalcPoint()
        {
            base.SetSnapPrice(this.snap);
            PointF tf   = base.ToPointF(base.ControlPoints[0]);
            PointF tf2  = base.ToPointF(base.ControlPoints[1]);
            double y    = base.ControlPoints[0].Y;
            double num2 = base.ControlPoints[1].Y;

            base.pfStart = new PointF[this.split.Length];
            base.pfEnd   = new PointF[this.split.Length];
            ObjectPoint op = new ObjectPoint(base.ControlPoints[0].X, 0.0);

            for (int i = 0; i < this.split.Length; i++)
            {
                op.Y = ((num2 - y) * this.split[i]) + y;
                PointF tf3 = base.ToPointF(op);
                base.pfStart[i] = new PointF(tf.X, tf3.Y);
                base.pfEnd[i]   = new PointF(tf2.X, tf3.Y);
            }
        }
コード例 #10
0
ファイル: FibonacciLine.cs プロジェクト: Bulletz4mysa/NBTrade
        public override void CalcPoint()
        {
            SetSnapPrice(snap);
            PointF p1 = ToPointF(ControlPoints[0]);
            PointF p2 = ToPointF(ControlPoints[1]);

            double A = ControlPoints[0].Y;
            double B = ControlPoints[1].Y;

            pfStart = new PointF[split.Length];
            pfEnd   = new PointF[split.Length];
            ObjectPoint op = new ObjectPoint(ControlPoints[0].X, 0);

            for (int i = 0; i < split.Length; i++)
            {
                op.Y = (B - A) * split[i] + A;
                PointF p = ToPointF(op);

                pfStart[i] = new PointF(p1.X, p.Y);
                pfEnd[i]   = new PointF(p2.X, p.Y);
            }
        }
コード例 #11
0
        /// <summary>
        /// Replace format
        /// {D:yyyy-MM-dd}
        /// {C:f2}
        /// {0:f2}
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public string ReplaceTag(ObjectPoint op, string s)
        {
            while (true)
            {
                int i1 = s.IndexOf('{');
                int i2 = s.IndexOf('}');
                if (i2 > i1)
                {
                    string s1 = s.Substring(i1 + 1, i2 - i1 - 1);
                    int    i  = s1.IndexOf(':');
                    string s3 = "";
                    string s2 = s1;
                    if (i > 0)
                    {
                        s2 = s1.Substring(0, i);
                        s3 = s1.Substring(i + 1);
                    }

                    FormulaChart  BackChart = Manager.Canvas.Chart;
                    IDataProvider idp       = BackChart.DataProvider;
                    double[]      dd        = idp["DATE"];
                    int           Bar       = BackChart.DateToIndex(op.X);
                    if (string.Compare(s2, "D") == 0)
                    {
                        if (s3 == "")
                        {
                            s3 = "yyyy-MM-dd";
                        }
                        s2 = BackChart.IndexToDate(Bar).ToString(s3);
                    }
                    else
                    {
                        FormulaData fd = null;
                        try
                        {
                            i = int.Parse(s2);
                            if (i < Area.FormulaDataArray.Count)
                            {
                                dd = Area.FormulaDataArray[i].Data;
                            }
                        }
                        catch
                        {
                            fd = Area.FormulaDataArray[s2];
                            if (object.Equals(fd, null))
                            {
                                foreach (FormulaData f in Area.FormulaDataArray)
                                {
                                    dd = f[s2];
                                    if (dd != null)
                                    {
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                dd = fd.Data;
                            }
                        }
                        if (dd != null && Bar < dd.Length)
                        {
                            if (s3 == "")
                            {
                                s3 = "f2";
                            }
                            s2 = dd[Bar].ToString(s3);
                        }
                        else
                        {
                            s2 = "NaN";
                        }
                    }
                    s = s.Substring(0, i1) + s2 + s.Substring(i2 + 1);
                }
                else
                {
                    break;
                }
            }
            return(s);
        }
コード例 #12
0
 public void Init()
 {
     ControlPoints = new ObjectPoint[ControlPointNum];
 }
コード例 #13
0
        public override void CalcPoint()
        {
            float num3;

            this.fd = base.Area.FormulaDataArray[0];
            double[] dd    = base.Manager.Canvas.BackChart.DataProvider["DATE"];
            int      index = 0;
            int      num2  = 1;

            if (base.ControlPoints[0].X > base.ControlPoints[1].X)
            {
                index = 1;
                num2  = 0;
            }
            this.Bar1 = FormulaChart.FindIndex(dd, base.ControlPoints[index].X);
            this.Bar2 = FormulaChart.FindIndex(dd, base.ControlPoints[num2].X);
            if (this.regressionType != Easychart.Finance.Objects.RegressionType.UpDownTrend)
            {
                FormulaBase.CalcLinearRegression(this.fd, this.Bar2, this.Bar2 - this.Bar1, out this.A, out this.B);
            }
            else
            {
                this.A = base.ControlPoints[index].Y;
                this.B = (base.ControlPoints[num2].Y - base.ControlPoints[index].Y) / ((double)(this.Bar2 - this.Bar1));
            }
            ObjectPoint point  = base.ControlPoints[index];
            ObjectPoint point2 = base.ControlPoints[num2];

            point.Y  = this.A;
            point2.Y = this.A + (this.B * (this.Bar2 - this.Bar1));
            this.scLines.Clear();
            if (this.centerLine)
            {
                this.scLines.Add(point, point2);
            }
            if (((this.regressionType == Easychart.Finance.Objects.RegressionType.Channel) || (this.regressionType == Easychart.Finance.Objects.RegressionType.AsynChannel)) || (this.regressionType == Easychart.Finance.Objects.RegressionType.UpDownTrend))
            {
                float num4 = base.CalcDelta(this.fd, this.A, this.B, this.Bar1, this.Bar2, "H", true);
                float num5 = base.CalcDelta(this.fd, this.A, this.B, this.Bar1, this.Bar2, "L", false);
                if (this.regressionType == Easychart.Finance.Objects.RegressionType.Channel)
                {
                    num3 = Math.Max(Math.Abs(num4), Math.Abs(num5));
                }
                else
                {
                    num3 = -num4;
                }
                if (this.upLine)
                {
                    this.AddLine(point, point2, num3);
                }
                if (this.regressionType != Easychart.Finance.Objects.RegressionType.Channel)
                {
                    num3 = num5;
                }
                if (this.downLine)
                {
                    this.AddLine(point, point2, -num3);
                }
            }
            else if ((this.regressionType == Easychart.Finance.Objects.RegressionType.StdChannel) || (this.regressionType == Easychart.Finance.Objects.RegressionType.StdErrorChannel))
            {
                num3 = this.Std(this.regressionType == Easychart.Finance.Objects.RegressionType.StdErrorChannel);
                this.AddLine(point, point2, num3);
                this.AddLine(point, point2, -num3);
            }
            base.pfStart = new PointF[this.scLines.Count];
            base.pfEnd   = new PointF[this.scLines.Count];
            for (int i = 0; i < this.scLines.Count; i++)
            {
                ObjectSegment segment = this.scLines[i];
                if (!double.IsNaN(segment.op1.Y) && !double.IsNaN(segment.op2.Y))
                {
                    base.pfStart[i] = base.ToPointF(segment.op1);
                    base.pfEnd[i]   = base.ToPointF(segment.op2);
                    if (this.openStart)
                    {
                        base.ExpandLine(ref base.pfEnd[i], ref base.pfStart[i]);
                    }
                    if (this.openEnd)
                    {
                        base.ExpandLine(ref base.pfStart[i], ref base.pfEnd[i]);
                    }
                }
                else
                {
                    base.pfStart[i] = PointF.Empty;
                    base.pfEnd[i]   = PointF.Empty;
                }
            }
        }
コード例 #14
0
 public ObjectBase()
 {
     ControlPoints = new ObjectPoint[ControlPointNum];
     smoothingMode = ObjectSmoothingMode.AntiAlias;
 }
コード例 #15
0
 /// <summary>
 /// Check if (X,Y) in the segment (p1,p2)
 /// </summary>
 /// <param name="X"></param>
 /// <param name="Y"></param>
 /// <param name="p1"></param>
 /// <param name="p2"></param>
 /// <param name="PenWidth"></param>
 /// <returns></returns>
 public bool InLineSegment(int X, int Y, ObjectPoint p1, ObjectPoint p2, int PenWidth)
 {
     return(InLineSegment(X, Y, ToPointF(p1), ToPointF(p2), PenWidth));
 }
コード例 #16
0
 public ObjectSegment(ObjectPoint op1, ObjectPoint op2)
 {
     this.op1 = op1;
     this.op2 = op2;
 }
コード例 #17
0
 private void AddLine(ObjectPoint op1, ObjectPoint op2, float Delta)
 {
     op1.Y -= Delta * percentage;
     op2.Y -= Delta * percentage;
     scLines.Add(op1, op2);
 }
コード例 #18
0
        private void DesignerControl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            Changed = true;
            FormulaArea fa = null;

            StartPoint = GetValueFromPos(e.X, e.Y, ref fa);
            BaseObject bo;

            SaveChartControlSetting();
            if (ObjectType == null)
            {
                SelectedObject = null;
                if (e.Button == MouseButtons.Left)
                {
                    int PointIndex = GetPointIndex(e.X, e.Y, out bo);
                    if (bo == null)
                    {
                        bo = GetObjectAt(e.X, e.Y);
                    }

                    if (bo != null)
                    {
                        SelectedObject = bo;
                        DragObject     = new ObjectDragging(new PointF(e.X, e.Y), PointIndex, bo);
                        Invalidate(bo.GetRegion());
                        bo.InMove = true;
                    }
                }
            }
            else
            {
                if (e.Button == MouseButtons.Right)
                {
                    if (DragObject != null)
                    {
                        objects.Remove(DragObject.Object);
                    }
                    DragObjectFinished();
                }
                else
                {
                    if (ObjectSteps == 0)
                    {
                        bo          = ObjectType.Invoke();
                        bo.AreaName = fa.Name;
                        bo.Area     = fa;
                        bo.InSetup  = true;
                        bo.InMove   = true;
                        if (AfterCreateStart != null)
                        {
                            AfterCreateStart(this, bo);
                        }
                        //ob.SetObjectManager(this);
                        for (int i = 0; i < bo.ControlPointNum; i++)
                        {
                            bo.ControlPoints[i] = StartPoint;
                        }
                        AddObject(bo);
                        //objects.Add(ob);
                        SelectedObject = bo;

                        DragObject = new ObjectDragging(new PointF(e.X, e.Y), ObjectSteps + bo.InitNum > 1?1:0, bo);
                    }
                }
            }
            DragMemBmp = null;
        }
コード例 #19
0
        public override void CalcPoint()
        {
            if (Area.FormulaDataArray.Count == 0)
            {
                return;
            }
            fd = Area.FormulaDataArray[0];
            //IDataProvider idp = Manager.Canvas.BackChart.DataProvider;
            //double[] dd = idp["DATE"];
            FormulaChart BackChart = Manager.Canvas.Chart;
            int          i1        = 0;
            int          i2        = 1;

            if (ControlPoints[0].X > ControlPoints[1].X)
            {
                i1 = 1;
                i2 = 0;
            }
            //Bar1 = FormulaChart.FindIndex(dd,ControlPoints[i1].X);
            //Bar2 = FormulaChart.FindIndex(dd,ControlPoints[i2].X);
            Bar1 = BackChart.DateToIndex(ControlPoints[i1].X);
            Bar2 = BackChart.DateToIndex(ControlPoints[i2].X);

            if (regressionType != RegressionType.UpDownTrend)
            {
                FormulaBase.CalcLinearRegression(fd, Bar2, Bar2 - Bar1, out A, out B);
            }
            else
            {
                A = ControlPoints[i1].Y;
                B = (ControlPoints[i2].Y - ControlPoints[i1].Y) / (Bar2 - Bar1);
            }

            ObjectPoint opStart = ControlPoints[i1];
            ObjectPoint opEnd   = ControlPoints[i2];

            opStart.Y = A;
            opEnd.Y   = A + B * (Bar2 - Bar1);

            scLines.Clear();
            if (centerLine)
            {
                scLines.Add(opStart, opEnd);
            }
            float Delta;

            if (regressionType == RegressionType.Channel ||
                regressionType == RegressionType.AsynChannel ||
                regressionType == RegressionType.UpDownTrend)
            {
                float dtUp   = CalcDelta(fd, A, B, Bar1, Bar2, "H", true);
                float dtDown = CalcDelta(fd, A, B, Bar1, Bar2, "L", false);
                if (regressionType == RegressionType.Channel)
                {
                    Delta = Math.Max(Math.Abs(dtUp), Math.Abs(dtDown));
                }
                else
                {
                    Delta = -dtUp;
                }
                if (upLine)
                {
                    AddLine(opStart, opEnd, Delta);
                }

                if (regressionType != RegressionType.Channel)
                {
                    Delta = dtDown;
                }
                if (downLine)
                {
                    AddLine(opStart, opEnd, -Delta);
                }
            }
            else if (regressionType == RegressionType.StdChannel ||
                     regressionType == RegressionType.StdErrorChannel)
            {
                Delta = Std(regressionType == RegressionType.StdErrorChannel);
                AddLine(opStart, opEnd, Delta);
                AddLine(opStart, opEnd, -Delta);
            }

            pfStart = new PointF[scLines.Count];
            pfEnd   = new PointF[scLines.Count];
            for (int j = 0; j < scLines.Count; j++)
            {
                ObjectSegment os = scLines[j];
                if (!double.IsNaN(os.op1.Y) && !double.IsNaN(os.op2.Y))
                {
                    pfStart[j] = ToPointF(os.op1);
                    pfEnd[j]   = ToPointF(os.op2);
                }
                else
                {
                    pfStart[j] = PointF.Empty;
                    pfEnd[j]   = PointF.Empty;
                }
            }
            OpenStartEnd(openStart, openEnd);
        }
コード例 #20
0
        public string ReplaceTag(ObjectPoint op, string s)
        {
            int num;

Label_0005:
            num = s.IndexOf('{');
            int index = s.IndexOf('}');

            if (index <= num)
            {
                return(s);
            }
            string str    = s.Substring(num + 1, (index - num) - 1);
            int    length = str.IndexOf(':');
            string format = "";
            string strA   = str;

            if (length > 0)
            {
                strA   = str.Substring(0, length);
                format = str.Substring(length + 1);
            }
            double[] dd   = this.Manager.Canvas.BackChart.DataProvider["DATE"];
            int      num4 = FormulaChart.FindIndex(dd, op.X);

            if (num4 >= dd.Length)
            {
                return(s);
            }
            if (string.Compare(strA, "D") == 0)
            {
                if (format == "")
                {
                    format = "yyyy-MM-dd";
                }
                strA = DateTime.FromOADate(dd[num4]).ToString(format);
                goto Label_01BA;
            }
            FormulaData objA = null;

            try
            {
                length = int.Parse(strA);
                if (length < this.Area.FormulaDataArray.Count)
                {
                    dd = this.Area.FormulaDataArray[length].Data;
                }
            }
            catch
            {
                objA = this.Area.FormulaDataArray[strA];
                if (object.Equals(objA, null))
                {
                    foreach (FormulaData data2 in this.Area.FormulaDataArray)
                    {
                        dd = data2[strA];
                        if (dd != null)
                        {
                            goto Label_018F;
                        }
                    }
                }
                else
                {
                    dd = objA.Data;
                }
            }
Label_018F:
            if (dd != null)
            {
                if (format == "")
                {
                    format = "f2";
                }
                strA = dd[num4].ToString(format);
            }
Label_01BA:
            s = s.Substring(0, num) + strA + s.Substring(index + 1);
            goto Label_0005;
        }
コード例 #21
0
 public virtual void Add(ObjectPoint op1, ObjectPoint op2)
 {
     this.Add(new ObjectSegment(op1, op2));
 }
コード例 #22
0
ファイル: ObjectManager.cs プロジェクト: Bulletz4mysa/NBTrade
        private void DesignerControl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            FormulaArea fa = null;

            StartPoint = GetValueFromPos(e.X, e.Y, ref fa);
            ObjectBase ob;

            if (Designer is ChartWinControl)
            {
                SavedShowCrossCursor = (Designer as ChartWinControl).ShowCrossCursor;
                SavedShowStatistic   = (Designer as ChartWinControl).ShowStatistic;
                (Designer as ChartWinControl).ShowCrossCursor = false;
                (Designer as ChartWinControl).ShowStatistic   = false;
            }

            if (ObjectType == null)
            {
                int PointIndex = GetPointIndex(e.X, e.Y, out ob);
                if (ob == null)
                {
                    ob = GetObjectAt(e.X, e.Y);
                }

                if (ob != null)
                {
                    SelectedObject = ob;
                    DragObject     = new DraggingObject(new PointF(e.X, e.Y), PointIndex, ob);
                    Designer.Invalidate(ob.GetRegion());
                    Canvas.Dragging = true;
                    ob.InMove       = true;
                }
            }
            else
            {
                if (e.Button == MouseButtons.Right)
                {
                    objects.Remove(DragObject.Object);
                    DragObjectFinished();
                }
                else
                {
                    if (ObjectSteps == 0)
                    {
                        ob          = ObjectType.Invoke();
                        ob.AreaName = fa.Name;
                        ob.Area     = fa;
                        ob.InSetup  = true;
                        ob.InMove   = true;
                        if (AfterCreate != null)
                        {
                            AfterCreate(this, ob);
                        }
                        ob.SetObjectManager(this);
                        for (int i = 0; i < ob.ControlPointNum; i++)
                        {
                            ob.ControlPoints[i] = StartPoint;
                        }
                        objects.Add(ob);
                        SelectedObject  = ob;
                        DragObject      = new DraggingObject(new PointF(e.X, e.Y), ObjectSteps + 1, ob);
                        Canvas.Dragging = true;
                    }
                    else
                    {
                        ob = DragObject.Object;
                        DragObject.ControlPointIndex = ObjectSteps + 1;
                    }
                    ObjectSteps++;
                    if (ObjectSteps == ob.InitNum)
                    {
                        DragObjectFinished();
                    }
                }
            }
            DragMemBmp = null;
        }