Esempio n. 1
0
        protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                //LineStroke		            = new Stroke(Brushes.DarkGray, DashStyleHelper.Solid, 2f);
                Description  = "";
                DrawingState = DrawingState.Building;
                Name         = "RP2CustomLine";

                StartAnchor = new ChartAnchor
                {
                    IsBrowsable = true,
                    IsEditing   = true,
                    DrawingTool = this,
                    DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart,
                };

                EndAnchor = new ChartAnchor
                {
                    IsBrowsable = true,
                    IsEditing   = true,
                    DrawingTool = this,
                    DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd,
                };
            }

            else if (State == State.Terminated)
            {
                Dispose();
            }
        }
Esempio n. 2
0
        protected override void OnStateChange()
        {
            if (State == State.SetDefaults)
            {
                Name = "Bricks";
//				LineType					= ChartLineType.Line;
                DrawingState = DrawingState.Building;
                StartAnchor  = new ChartAnchor {
                    IsEditing = true, DrawingTool = this
                };
                EndAnchor = new ChartAnchor {
                    IsEditing = true, DrawingTool = this
                };
                StartAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart;
                EndAnchor.DisplayName   = Custom.Resource.NinjaScriptDrawingToolAnchorEnd;
                // a normal line with both end points has two anchors
                StartAnchor.IsBrowsable = true;
                EndAnchor.IsBrowsable   = true;
                Stroke = new Stroke(Brushes.MediumOrchid, 2f);
            }
            else if (State == State.Terminated)
            {
                // release any device resources
                Dispose();
            }
        }
Esempio n. 3
0
        public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            //don't set anchors until we're done drawing
            if (DrawingState == DrawingState.Building)
            {
                return;
            }

            //set the drawing state back to normal when mouse is relased
            if (DrawingState == DrawingState.Editing || DrawingState == DrawingState.Moving)
            {
                DrawingState = DrawingState.Normal;
            }
            if (editingAnchor != null)
            {
                if (editingAnchor == EntryAnchor)
                {
                    SetReward();
                    if (Ratio.ApproxCompare(0) != 0)
                    {
                        SetRisk();
                    }
                }
                editingAnchor.IsEditing = false;
            }
            editingAnchor = null;
        }
Esempio n. 4
0
 protected override void OnStateChange()
 {
     if (State == State.SetDefaults)
     {
         Description      = Custom.Resource.NinjaScriptDrawingToolRiskRewardDescription;
         Name             = Custom.Resource.NinjaScriptDrawingToolRiskRewardName;
         Ratio            = 2;
         AnchorLineStroke = new Stroke(Brushes.DarkGray, DashStyleHelper.Solid, 1f, 50);
         EntryLineStroke  = new Stroke(Brushes.Goldenrod, DashStyleHelper.Solid, 2f);
         StopLineStroke   = new Stroke(Brushes.Crimson, DashStyleHelper.Solid, 2f);
         TargetLineStroke = new Stroke(Brushes.SeaGreen, DashStyleHelper.Solid, 2f);
         EntryAnchor      = new ChartAnchor {
             IsEditing = true, DrawingTool = this
         };
         RiskAnchor = new ChartAnchor {
             IsEditing = true, DrawingTool = this
         };
         RewardAnchor = new ChartAnchor {
             IsEditing = true, DrawingTool = this
         };
         EntryAnchor.DisplayName  = Custom.Resource.NinjaScriptDrawingToolRiskRewardAnchorEntry;
         RiskAnchor.DisplayName   = Custom.Resource.NinjaScriptDrawingToolRiskRewardAnchorRisk;
         RewardAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolRiskRewardAnchorReward;
     }
     else if (State == State.Terminated)
     {
         Dispose();
     }
 }
Esempio n. 5
0
 protected override void OnStateChange()
 {
     if (State == State.SetDefaults)
     {
         Name         = Custom.Resource.NinjaScriptDrawingToolRuler;
         DrawingState = DrawingState.Building;
         StartAnchor  = new ChartAnchor {
             IsEditing = true, DrawingTool = this
         };
         EndAnchor = new ChartAnchor {
             IsEditing = true, DrawingTool = this
         };
         TextAnchor = new ChartAnchor {
             IsEditing = true, DrawingTool = this
         };
         StartAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart;
         EndAnchor.DisplayName   = Custom.Resource.NinjaScriptDrawingToolAnchorEnd;
         TextAnchor.DisplayName  = Custom.Resource.NinjaScriptDrawingToolAnchorText;
         LineColor = new Stroke(Brushes.DarkGray, DashStyleHelper.Solid, 1f, 50);
         TextColor = Application.Current.FindResource("ChartControl.DataBoxForeground") as Brush ?? Brushes.CornflowerBlue;
     }
     else if (State == State.Terminated)
     {
         // release any device resources
         Dispose();
     }
 }
Esempio n. 6
0
 protected override void OnStateChange()
 {
     if (State == State.SetDefaults)
     {
         Description          = Custom.Resource.NinjaScriptDrawingToolRegion;
         Name                 = Custom.Resource.NinjaScriptDrawingToolRegion;
         DisplayOnChartsMenus = false;
         IgnoresUserInput     = true;
         StartAnchor          = new ChartAnchor {
             IsYPropertyVisible = false, IsXPropertiesVisible = false
         };
         EndAnchor = new ChartAnchor {
             IsYPropertyVisible = false, IsXPropertiesVisible = false
         };
         StartAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart;
         EndAnchor.DisplayName   = Custom.Resource.NinjaScriptDrawingToolAnchorEnd;
         AreaBrush     = Brushes.DarkCyan;
         OutlineStroke = new Stroke(Brushes.Goldenrod);
         AreaOpacity   = 40;
         ZOrderType    = DrawingToolZOrder.AlwaysDrawnFirst;
     }
     else if (State == State.Terminated)
     {
         Dispose();
     }
 }
Esempio n. 7
0
        public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:     return(Cursors.Pen);

            case DrawingState.Moving:       return(IsLocked ? Cursors.No : Cursors.SizeAll);

            case DrawingState.Editing:
                if (IsLocked)
                {
                    return(Cursors.No);
                }
                if (editingAnchor == TextAnchor)
                {
                    return(Cursors.SizeNESW);
                }
                return(editingAnchor == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE);

            default:
                // see if we are near an anchor right away. this is is cheap so no big deal to do often
                ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (closest != null)
                {
                    if (IsLocked)
                    {
                        return(Cursors.Arrow);
                    }
                    return(closest == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE);
                }
                // draw move cursor if cursor is near line path anywhere
                Point  startAnchorPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Point  endAnchorPoint   = EndAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Point  txtAnchorPoint   = TextAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Vector startEndVector   = endAnchorPoint - startAnchorPoint;
                Vector endToTextVector  = txtAnchorPoint - endAnchorPoint;

                //Text Outline Box Path as well
                UpdateTextLayout(chartControl, ChartPanel, chartScale);
                Point bottomLeft = new Point(txtAnchorPoint.X - textLayout.MaxWidth - textMargin, txtAnchorPoint.Y);
                Point topLeft    = new Point(bottomLeft.X, txtAnchorPoint.Y - textLayout.MaxHeight - 2 * textMargin);
                Point topRight   = new Point(txtAnchorPoint.X, txtAnchorPoint.Y - textLayout.MaxHeight - 2 * textMargin);

                Vector txtBottomLeft     = bottomLeft - txtAnchorPoint;
                Vector bottomLeftTopLeft = topLeft - bottomLeft;
                Vector topLeftTopRight   = topRight - topLeft;
                Vector topRightTxt       = txtAnchorPoint - topRight;

                if (MathHelper.IsPointAlongVector(point, startAnchorPoint, startEndVector, cursorSensitivity) ||
                    MathHelper.IsPointAlongVector(point, endAnchorPoint, endToTextVector, cursorSensitivity) ||
                    MathHelper.IsPointAlongVector(point, txtAnchorPoint, txtBottomLeft, cursorSensitivity) ||
                    MathHelper.IsPointAlongVector(point, bottomLeft, bottomLeftTopLeft, cursorSensitivity) ||
                    MathHelper.IsPointAlongVector(point, topLeft, topLeftTopRight, cursorSensitivity) ||
                    MathHelper.IsPointAlongVector(point, topRight, topRightTxt, cursorSensitivity))
                {
                    return(IsLocked ? Cursors.Arrow : Cursors.SizeAll);
                }
                return(null);
            }
        }
Esempio n. 8
0
 protected override void OnStateChange()
 {
     if (State == State.SetDefaults)
     {
         Name      = Custom.Resource.NinjaScriptDrawingToolText;
         Alignment = TextAlignment.Left;
         Anchor    = new ChartAnchor {
             IsEditing = true, DrawingTool = this, DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor
         };
         Font = new Gui.Tools.SimpleFont()
         {
             Size = 14
         };
         OutlineStroke = new Stroke(Brushes.Transparent, 2f);
         TextBrush     = textBrush;
         AreaBrush     = Brushes.Transparent;
         AreaOpacity   = 100;
         YPixelOffset  = 0;
     }
     else if (State == State.Terminated)
     {
         TextBrush = null;
         textBrush = null;
         Dispose();
     }
 }
Esempio n. 9
0
        public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point)
        {
            if (!IsVisible)
            {
                return(null);
            }

            switch (DrawingState)
            {
            case DrawingState.Building: return(Cursors.Pen);

            case DrawingState.Moving: return(IsLocked ? Cursors.No : Cursors.SizeAll);

            case DrawingState.Editing:
                if (IsLocked)
                {
                    return(Cursors.No);
                }
                return(editingAnchor == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE);

            default:
                Point startAnchorPixelPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale);

                ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (closest != null)
                {
                    if (IsLocked)
                    {
                        return(Cursors.Arrow);
                    }
                    return(closest == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE);
                }

                // Check the anchor lines for cursor
                Point  endAnchorPixelPoint = EndAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Point  extAnchorPixelPoint = ExtensionAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Point  midAnchorPixelPoint = new Point((endAnchorPixelPoint.X + extAnchorPixelPoint.X) / 2, (endAnchorPixelPoint.Y + extAnchorPixelPoint.Y) / 2);
                Vector startToEndVec       = endAnchorPixelPoint - startAnchorPixelPoint;
                Vector endToExtVec         = extAnchorPixelPoint - endAnchorPixelPoint;
                Vector startToMidVec       = midAnchorPixelPoint - startAnchorPixelPoint;

                foreach (Tuple <Point, Point> endPoint in GetAndrewsEndPoints(chartControl, chartScale))
                {
                    Vector andrewVector = endPoint.Item1 - endPoint.Item2;
                    if (MathHelper.IsPointAlongVector(point, endPoint.Item2, andrewVector, cursorSensitivity))
                    {
                        return(IsLocked ? Cursors.Arrow : Cursors.SizeAll);
                    }
                }

                return(MathHelper.IsPointAlongVector(point, startAnchorPixelPoint, startToEndVec, cursorSensitivity) ||
                       MathHelper.IsPointAlongVector(point, endAnchorPixelPoint, endToExtVec, cursorSensitivity) ||
                       MathHelper.IsPointAlongVector(point, startAnchorPixelPoint, startToMidVec, cursorSensitivity) ?
                       (IsLocked ? Cursors.Arrow : Cursors.SizeAll) : null);
            }
        }
        public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            if (DrawingState == DrawingState.Building)
            {
                return;
            }

            DrawingState  = DrawingState.Normal;
            editingAnchor = null;
        }
Esempio n. 11
0
        public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:     return(Cursors.Pen);

            case DrawingState.Moving:       return(IsLocked ? Cursors.No : Cursors.SizeAll);

            case DrawingState.Editing:
                if (IsLocked)
                {
                    return(Cursors.No);
                }

                return(editingAnchor == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE);

            default:
                // draw move cursor if cursor is near line path anywhere
                Point startPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale);

                ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (closest != null)
                {
                    if (IsLocked)
                    {
                        return(Cursors.Arrow);
                    }
                    return(closest == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE);
                }

                Point endPoint = EndAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Point minPoint = startPoint;
                Point maxPoint = endPoint;



                /*Vector	totalVector	= maxPoint - minPoint;
                 * return MathHelper.IsPointAlongVector(point, minPoint, totalVector, cursorSensitivity) ?
                 *      IsLocked ? Cursors.Arrow : Cursors.SizeAll : null;*/
                Vector DelVector1 = maxPoint - new Point(minPoint.X, maxPoint.Y);
                Vector DelVector2 = maxPoint - new Point(maxPoint.X, minPoint.Y);
                Vector DelVector3 = minPoint - new Point(maxPoint.X, minPoint.Y);
                Vector DelVector4 = minPoint - new Point(minPoint.X, maxPoint.Y);
                return                          /*MathHelper.IsPointAlongVector(point, minPoint, totalVector, cursorSensitivity)||*/

                       /*MathHelper.IsPointAlongVector(point, minPoint, DelVector1, cursorSensitivity)||
                        * MathHelper.IsPointAlongVector(point, minPoint, DelVector2, cursorSensitivity)||
                        * MathHelper.IsPointAlongVector(point, maxPoint, DelVector3, cursorSensitivity)||
                        * MathHelper.IsPointAlongVector(point, maxPoint, DelVector4, cursorSensitivity)*/
                       (MathHelper.IsPointInsideTriangle(point, minPoint, maxPoint, new Point(minPoint.X, maxPoint.Y)) ||
                        MathHelper.IsPointInsideTriangle(point, minPoint, maxPoint, new Point(maxPoint.X, minPoint.Y))?
                        IsLocked ? Cursors.Arrow : Cursors.SizeAll : null);
            }
        }
Esempio n. 12
0
        private static Arc ArcCore(NinjaScriptBase owner, bool isAutoScale, string tag,
                                   int startBarsAgo, DateTime startTime, double startY, int endBarsAgo, DateTime endTime, double endY,
                                   Brush brush, DashStyleHelper dashStyle, int width, bool isGlobal, string templateName)
        {
            if (owner == null)
            {
                throw new ArgumentException("owner");
            }

            if (startTime == Core.Globals.MinDate && endTime == Core.Globals.MinDate && startBarsAgo == int.MinValue && endBarsAgo == int.MinValue)
            {
                throw new ArgumentException("bad start/end date/time");
            }

            if (string.IsNullOrWhiteSpace(tag))
            {
                throw new ArgumentException("tag cant be null or empty", "tag");
            }

            if (isGlobal && tag[0] != GlobalDrawingToolManager.GlobalDrawingToolTagPrefix)
            {
                tag = GlobalDrawingToolManager.GlobalDrawingToolTagPrefix + tag;
            }

            Arc newArc = DrawingTool.GetByTagOrNew(owner, typeof(Arc), tag, templateName) as Arc;

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

            DrawingTool.SetDrawingToolCommonValues(newArc, tag, isAutoScale, owner, isGlobal);

            // dont nuke existing anchor refs on the instance
            ChartAnchor startAnchor = DrawingTool.CreateChartAnchor(owner, startBarsAgo, startTime, startY);
            ChartAnchor endAnchor   = DrawingTool.CreateChartAnchor(owner, endBarsAgo, endTime, endY);

            startAnchor.CopyDataValues(newArc.StartAnchor);
            endAnchor.CopyDataValues(newArc.EndAnchor);

            if (brush != null)
            {
                newArc.Stroke = new Stroke(brush, dashStyle, width, 50)
                {
                    RenderTarget = newArc.Stroke.RenderTarget
                };
                newArc.ArcStroke = new Stroke(brush, dashStyle, width)
                {
                    RenderTarget = newArc.ArcStroke.RenderTarget
                };
            }
            newArc.SetState(State.Active);
            return(newArc);
        }
Esempio n. 13
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:
                if (EntryAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(EntryAnchor);
                    dataPoint.CopyDataValues(RiskAnchor);
                    EntryAnchor.IsEditing = false;
                    entryPrice            = AttachedTo.Instrument.MasterInstrument.RoundToTickSize(EntryAnchor.Price);
                }
                else if (RiskAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(RiskAnchor);
                    RiskAnchor.IsEditing = false;
                    stopPrice            = AttachedTo.Instrument.MasterInstrument.RoundToTickSize(RiskAnchor.Price);
                    SetReward();
                    // we set the anchor for the target after stop mouse down event via SetReward()
                    //however we need make sure Time is in view when builiding, but always when SetRreward is used..
                    RewardAnchor.Time      = EntryAnchor.Time;
                    RewardAnchor.SlotIndex = EntryAnchor.SlotIndex;
                    RewardAnchor.IsEditing = false;
                }
                // if the anchors are no longer being edited, set the drawing state to normal and unselect the object
                if (!EntryAnchor.IsEditing && !RiskAnchor.IsEditing && !RewardAnchor.IsEditing)
                {
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                break;

            case DrawingState.Normal:
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                //find which anchor has been clicked relative to the mouse point and make whichever anchor now editable
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else if (GetCursor(chartControl, chartPanel, chartScale, point) == null)
                {
                    IsSelected = false;                             // missed
                }
                else
                {
                    // didnt click an anchor but on a line so start moving
                    DrawingState = DrawingState.Moving;
                }
                break;
            }
        }
Esempio n. 14
0
 public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
 {
     if (DrawingState == DrawingState.Editing || DrawingState == DrawingState.Moving)
     {
         DrawingState = DrawingState.Normal;
     }
     if (editingAnchor != null)
     {
         editingAnchor.IsEditing = false;
     }
     editingAnchor = null;
 }
Esempio n. 15
0
        private static T DrawRangeProfileTypeCore <T>(NinjaScriptBase owner, bool isAutoScale, string tag,
                                                      int startBarsAgo, DateTime startTime, double startY, int endBarsAgo, DateTime endTime, double endY,
                                                      Brush brush, DashStyleHelper dashStyle, int width, bool isGlobal, string templateName, Model model) where T : RangeProfile
        {
            if (owner == null)
            {
                throw new ArgumentException("owner");
            }

            if (string.IsNullOrWhiteSpace(tag))
            {
                throw new ArgumentException(@"tag cant be null or empty", "tag");
            }

            if (isGlobal && tag[0] != GlobalDrawingToolManager.GlobalDrawingToolTagPrefix)
            {
                tag = string.Format("{0}{1}", GlobalDrawingToolManager.GlobalDrawingToolTagPrefix, tag);
            }

            T lineT = DrawingTool.GetByTagOrNew(owner, typeof(T), tag, templateName) as T;

            lineT.model = model;


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

            if (startTime == Core.Globals.MinDate && endTime == Core.Globals.MinDate && startBarsAgo == int.MinValue && endBarsAgo == int.MinValue)
            {
                throw new ArgumentException("bad start/end date/time");
            }

            DrawingTool.SetDrawingToolCommonValues(lineT, tag, isAutoScale, owner, isGlobal);


            // dont nuke existing anchor refs on the instance
            ChartAnchor startAnchor;

            startAnchor = DrawingTool.CreateChartAnchor(owner, startBarsAgo, startTime, startY);
            ChartAnchor endAnchor = DrawingTool.CreateChartAnchor(owner, endBarsAgo, endTime, endY);

            startAnchor.CopyDataValues(lineT.StartAnchor);
            endAnchor.CopyDataValues(lineT.EndAnchor);

            /*if (brush != null)
             *                  lineT.LineStroke = new Stroke(brush, dashStyle, width);*/

            lineT.SetState(State.Active);
            return(lineT);
        }
Esempio n. 16
0
        private static AndrewsPitchfork AndrewsPitchforkCore(NinjaScriptBase owner,
                                                             string tag, bool isAutoScale,
                                                             int anchor1BarsAgo, DateTime anchor1Time, double anchor1Y,
                                                             int anchor2BarsAgo, DateTime anchor2Time, double anchor2Y,
                                                             int anchor3BarsAgo, DateTime anchor3Time, double anchor3Y,
                                                             Brush brush, DashStyleHelper dashStyle, int width,
                                                             bool isGlobal, string templateName)
        {
            if (owner == null)
            {
                throw new ArgumentException("owner");
            }

            if (string.IsNullOrWhiteSpace(tag))
            {
                throw new ArgumentException(@"tag cant be null or empty", "tag");
            }

            if (isGlobal && tag[0] != GlobalDrawingToolManager.GlobalDrawingToolTagPrefix)
            {
                tag = GlobalDrawingToolManager.GlobalDrawingToolTagPrefix + tag;
            }

            AndrewsPitchfork pitchfork = DrawingTool.GetByTagOrNew(owner, typeof(AndrewsPitchfork), tag, templateName) as AndrewsPitchfork;

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

            DrawingTool.SetDrawingToolCommonValues(pitchfork, tag, isAutoScale, owner, isGlobal);

            ChartAnchor startAnchor = DrawingTool.CreateChartAnchor(owner, anchor1BarsAgo, anchor1Time, anchor1Y);
            ChartAnchor endAnchor   = DrawingTool.CreateChartAnchor(owner, anchor2BarsAgo, anchor2Time, anchor2Y);
            ChartAnchor extAnchor   = DrawingTool.CreateChartAnchor(owner, anchor3BarsAgo, anchor3Time, anchor3Y);

            startAnchor.CopyDataValues(pitchfork.StartAnchor);
            endAnchor.CopyDataValues(pitchfork.EndAnchor);
            extAnchor.CopyDataValues(pitchfork.ExtensionAnchor);

            if (string.IsNullOrEmpty(templateName) || brush != null)
            {
                pitchfork.AnchorLineStroke.Width = width;
                pitchfork.RetracementLineStroke  = new Stroke(brush, dashStyle, width)
                {
                    RenderTarget = pitchfork.RetracementLineStroke.RenderTarget
                };
            }

            pitchfork.SetState(State.Active);
            return(pitchfork);
        }
Esempio n. 17
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:
                if (StartAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(StartAnchor);
                    StartAnchor.IsEditing = false;

                    // give end anchor something to start with so we dont try to render it with bad values right away
                    dataPoint.CopyDataValues(EndAnchor);
                }
                else if (EndAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(EndAnchor);
                    EndAnchor.IsEditing = false;
                }

                // is initial building done (both anchors set)
                if (!StartAnchor.IsEditing && !EndAnchor.IsEditing)
                {
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                break;

            case DrawingState.Normal:
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                // see if they clicked near a point to edit, if so start editing
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);

                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else
                {
                    if (GetCursor(chartControl, chartPanel, chartScale, point) != null)
                    {
                        DrawingState = DrawingState.Moving;
                    }
                    else
                    {
                        // user whiffed.
                        IsSelected = false;
                    }
                }
                break;
            }
        }
Esempio n. 18
0
 public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
 {
     // simply end whatever moving
     if (DrawingState == DrawingState.Moving || DrawingState == DrawingState.Editing)
     {
         DrawingState = DrawingState.Normal;
         model.SaveProfiles();
     }
     if (editingAnchor != null)
     {
         editingAnchor.IsEditing = false;
     }
     editingAnchor = null;
 }
Esempio n. 19
0
        public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            if (DrawingState == DrawingState.Building)
            {
                return;
            }

            // simply end whatever was editing / moving
            DrawingState = DrawingState.Normal;
            if (editingAnchor != null)
            {
                editingAnchor.IsEditing = false;
            }
            editingAnchor = null;
        }
Esempio n. 20
0
 public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
 {
     // simply end whatever moving
     if (DrawingState == DrawingState.Moving || DrawingState == DrawingState.Editing)
     {
         DrawingState = DrawingState.Normal;
     }
     if (editingAnchor != null)
     {
         editingAnchor.IsEditing = false;
     }
     editingAnchor = null;
     foreach (ChartAnchor anchor in Anchors)
     {
         anchor.ClearMoveDelta();
     }
     lastMouseMoveDataPoint = null;
 }
        public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point)
        {
            switch (DrawingState)
            {
            case DrawingState.Building: return(Cursors.Pen);

            case DrawingState.Editing: return(IsLocked ? Cursors.No : Mode == RegionHighlightMode.Time ? Cursors.SizeWE : Cursors.SizeNS);

            case DrawingState.Moving: return(IsLocked ? Cursors.No : Cursors.SizeAll);

            default:
                Point       startAnchorPixelPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale);
                ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (closest != null)
                {
                    if (IsLocked)
                    {
                        return(Cursors.Arrow);
                    }
                    return(Mode == RegionHighlightMode.Time ? Cursors.SizeWE : Cursors.SizeNS);
                }

                Point  endAnchorPixelPoint = EndAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Vector totalVector         = endAnchorPixelPoint - startAnchorPixelPoint;
                if (MathHelper.IsPointAlongVector(point, startAnchorPixelPoint, totalVector, cursorSensitivity))
                {
                    return(IsLocked ? Cursors.Arrow : Cursors.SizeAll);
                }

                // check if cursor is along region edges
                foreach (Point anchorPoint in new[] { startAnchorPixelPoint, endAnchorPixelPoint })
                {
                    if (Mode == RegionHighlightMode.Price && Math.Abs(anchorPoint.Y - point.Y) <= cursorSensitivity)
                    {
                        return(IsLocked ? Cursors.Arrow : Cursors.SizeAll);
                    }
                    if (Mode == RegionHighlightMode.Time && Math.Abs(anchorPoint.X - point.X) <= cursorSensitivity)
                    {
                        return(IsLocked ? Cursors.Arrow : Cursors.SizeAll);
                    }
                }
                return(null);
            }
        }
Esempio n. 22
0
        private static Ruler RulerCore(NinjaScriptBase owner, string tag, bool isAutoScale, int startBarsAgo, DateTime startTime, double startY,
                                       int endBarsAgo, DateTime endTime, double endY, int textBarsAgo, DateTime textTime, double textY, bool isGlobal, string templateName)
        {
            if (owner == null)
            {
                throw new ArgumentException("owner");
            }
            if (startTime == Core.Globals.MinDate && endTime == Core.Globals.MinDate && startBarsAgo == int.MinValue && endBarsAgo == int.MinValue)
            {
                throw new ArgumentException("bad start/end date/time");
            }

            if (string.IsNullOrWhiteSpace(tag))
            {
                throw new ArgumentException(@"tag cant be null or empty", "tag");
            }

            if (isGlobal && tag[0] != GlobalDrawingToolManager.GlobalDrawingToolTagPrefix)
            {
                tag = GlobalDrawingToolManager.GlobalDrawingToolTagPrefix + tag;
            }

            Ruler ruler = DrawingTool.GetByTagOrNew(owner, typeof(Ruler), tag, templateName) as Ruler;

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

            DrawingTool.SetDrawingToolCommonValues(ruler, tag, isAutoScale, owner, isGlobal);

            ChartAnchor startAnchor = DrawingTool.CreateChartAnchor(owner, startBarsAgo, startTime, startY);
            ChartAnchor endAnchor   = DrawingTool.CreateChartAnchor(owner, endBarsAgo, endTime, endY);
            ChartAnchor txtAnchor   = DrawingTool.CreateChartAnchor(owner, textBarsAgo, textTime, textY);

            startAnchor.CopyDataValues(ruler.StartAnchor);
            endAnchor.CopyDataValues(ruler.EndAnchor);
            txtAnchor.CopyDataValues(ruler.TextAnchor);
            ruler.SetState(State.Active);
            return(ruler);
        }
Esempio n. 23
0
        public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:     return(Cursors.Pen);

            case DrawingState.Moving:       return(IsLocked ? Cursors.No : Cursors.SizeAll);

            case DrawingState.Editing:      return(IsLocked ? Cursors.No : (editingAnchor == EntryAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE));

            default:
                // draw move cursor if cursor is near line path anywhere
                Point entryAnchorPixelPoint = EntryAnchor.GetPoint(chartControl, chartPanel, chartScale);

                // see if we are near an anchor right away. this is is cheap so no big deal to do often
                ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);

                if (closest != null)
                {
                    return(IsLocked ? Cursors.Arrow : (closest == EntryAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE));
                }

                Point  stopAnchorPixelPoint = RiskAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Vector anchorsVector        = stopAnchorPixelPoint - entryAnchorPixelPoint;

                // see if the mouse is along one of our lines for moving
                if (MathHelper.IsPointAlongVector(point, entryAnchorPixelPoint, anchorsVector, cursorSensitivity))
                {
                    return(IsLocked ? Cursors.Arrow : Cursors.SizeAll);
                }

                if (!DrawTarget)
                {
                    return(null);
                }

                Point  targetPoint         = RewardAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Vector targetToEntryVector = targetPoint - entryAnchorPixelPoint;
                return(MathHelper.IsPointAlongVector(point, entryAnchorPixelPoint, targetToEntryVector, cursorSensitivity) ? (IsLocked ? Cursors.Arrow : Cursors.SizeAll) : null);
            }
        }
Esempio n. 24
0
        public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:     return(Cursors.Pen);

            case DrawingState.Moving:       return(IsLocked ? Cursors.No : Cursors.SizeAll);

            case DrawingState.Editing:
                if (IsLocked)
                {
                    return(Cursors.No);
                }
                return(editingAnchor == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE);

            default:
                // draw move cursor if cursor is near line path anywhere
                Point startPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale);

                ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (closest != null)
                {
                    if (IsLocked)
                    {
                        return(Cursors.Arrow);
                    }
                    return(closest == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE);
                }

                Point endPoint = EndAnchor.GetPoint(chartControl, chartPanel, chartScale);
                Point minPoint = startPoint;
                Point maxPoint = endPoint;


                maxPoint = GetExtendedPoint(startPoint, endPoint);

                Vector totalVector = maxPoint - minPoint;
                return(MathHelper.IsPointAlongVector(point, minPoint, totalVector, cursorSensitivity) ?
                       IsLocked ? Cursors.Arrow : Cursors.SizeAll : null);
            }
        }
Esempio n. 25
0
 protected override void OnStateChange()
 {
     if (State == State.SetDefaults)
     {
         AreaBrush     = Brushes.CornflowerBlue;
         AreaOpacity   = 40;
         DrawingState  = DrawingState.Building;
         Name          = Custom.Resource.NinjaScriptDrawingToolTimeCycles;
         OutlineStroke = new Stroke(Brushes.CornflowerBlue, DashStyleHelper.Solid, 2, 100);
         StartAnchor   = new ChartAnchor {
             DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart, IsEditing = true, DrawingTool = this
         };
         EndAnchor = new ChartAnchor {
             DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd, IsEditing = true, DrawingTool = this
         };
     }
     else if (State == State.Terminated)
     {
         Dispose();
     }
 }
Esempio n. 26
0
        protected override void OnStateChange()
        {
            base.OnStateChange();
            switch (State)
            {
            case State.SetDefaults:
                AnchorLineStroke      = new Stroke(Brushes.DarkGray, DashStyleHelper.Solid, 1f, 50);
                RetracementLineStroke = new Stroke(Brushes.SeaGreen, DashStyleHelper.Solid, 2f);
                Description           = Custom.Resource.NinjaScriptDrawingToolAndrewsPitchforkDescription;
                Name        = Custom.Resource.NinjaScriptDrawingToolAndrewsPitchfork;
                StartAnchor = new ChartAnchor {
                    IsEditing = true, DrawingTool = this
                };
                ExtensionAnchor = new ChartAnchor {
                    IsEditing = true, DrawingTool = this
                };
                EndAnchor = new ChartAnchor {
                    IsEditing = true, DrawingTool = this
                };
                StartAnchor.DisplayName     = Custom.Resource.NinjaScriptDrawingToolAnchorStart;
                EndAnchor.DisplayName       = Custom.Resource.NinjaScriptDrawingToolAnchorEnd;
                ExtensionAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorExtension;
                PriceLevelOpacity           = 5;
                IsTextDisplayed             = true;
                break;

            case State.Configure:
                if (PriceLevels.Count == 0)
                {
                    PriceLevels.Add(new PriceLevel(0, Brushes.SeaGreen));
                    PriceLevels.Add(new PriceLevel(50, Brushes.SeaGreen));
                    PriceLevels.Add(new PriceLevel(100, Brushes.SeaGreen));
                }
                break;

            case State.Terminated:
                Dispose();
                break;
            }
        }
Esempio n. 27
0
        private static Region Region(NinjaScriptBase owner, string tag,
                                     int startBarsAgo, DateTime startTime, int endBarsAgo, DateTime endTime,
                                     ISeries <double> series1, ISeries <double> series2, double price,
                                     Brush outlineBrush, Brush areaBrush, int areaOpacity, int displacement)
        {
            Region region = DrawingTool.GetByTagOrNew(owner, typeof(Region), tag, null) as Region;

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

            DrawingTool.SetDrawingToolCommonValues(region, tag, false, owner, false);

            ChartAnchor startAnchor = DrawingTool.CreateChartAnchor(owner, startBarsAgo, startTime, 0);
            ChartAnchor endAnchor   = DrawingTool.CreateChartAnchor(owner, endBarsAgo, endTime, 0);

            startAnchor.CopyDataValues(region.StartAnchor);
            endAnchor.CopyDataValues(region.EndAnchor);

            if (series1 == null && series2 == null)
            {
                throw new ArgumentException("At least one series is required");
            }

            region.Series1      = series1;
            region.Series2      = series2;
            region.Price        = price;
            region.Displacement = displacement;

            region.AreaBrush   = areaBrush;
            region.AreaOpacity = areaOpacity;

            region.OutlineStroke = outlineBrush != null ? new Stroke(outlineBrush) : null;

            region.SetState(State.Active);
            region.DrawingState = DrawingState.Normal;
            region.IsSelected   = false;
            return(region);
        }
 protected override void OnStateChange()
 {
     if (State == State.SetDefaults)
     {
         AnchorLineStroke = new Stroke(Brushes.DarkGray, DashStyleHelper.Dash, 1f);
         AreaBrush        = Brushes.Goldenrod;
         AreaOpacity      = 25;
         DrawingState     = DrawingState.Building;
         EndAnchor        = new ChartAnchor {
             DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd, IsEditing = true, DrawingTool = this
         };
         OutlineStroke = new Stroke(Brushes.Goldenrod, 2f);
         StartAnchor   = new ChartAnchor {
             DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart, IsEditing = true, DrawingTool = this
         };
         ZOrderType = DrawingToolZOrder.AlwaysDrawnFirst;
     }
     else if (State == State.Terminated)
     {
         Dispose();
     }
 }
Esempio n. 29
0
        private static GannFan GannFanCore(NinjaScriptBase owner, bool isAutoScale, string tag, int barsAgo, DateTime time, double y, bool isGlobal, string templateName)
        {
            if (owner == null)
            {
                throw new ArgumentException("owner");
            }
            if (time == Core.Globals.MinDate && barsAgo == int.MinValue)
            {
                throw new ArgumentException("bad start/end date/time");
            }

            if (string.IsNullOrWhiteSpace(tag))
            {
                throw new ArgumentException("tag cant be null or empty");
            }

            if (isGlobal && tag[0] != '@')
            {
                tag = "@" + tag;
            }

            GannFan gannFan = DrawingTool.GetByTagOrNew(owner, typeof(GannFan), tag, templateName) as GannFan;

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

            DrawingTool.SetDrawingToolCommonValues(gannFan, tag, isAutoScale, owner, isGlobal);

            ChartAnchor anchor = DrawingTool.CreateChartAnchor(owner, barsAgo, time, y);

            anchor.CopyDataValues(gannFan.Anchor);

            gannFan.SetState(State.Active);
            return(gannFan);
        }
Esempio n. 30
0
        protected override void OnStateChange()
        {
            switch (State)
            {
            case State.SetDefaults:
                Description = Custom.Resource.NinjaScriptDrawingToolGannFan;
                Name        = Custom.Resource.NinjaScriptDrawingToolGannFan;
                Anchor      = new ChartAnchor
                {
                    DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor,
                    IsEditing   = true,
                };
                FanDirection      = GannFanDirection.UpRight;
                PriceLevelOpacity = 5;
                IsTextDisplayed   = true;
                PointsPerBar      = -1;
                break;

            case State.Configure:
                if (GannAngles.Count == 0)
                {
                    Brush[] gannBrushes = { Brushes.Red,  Brushes.MediumOrchid,     Brushes.DarkSlateBlue, Brushes.SteelBlue,
                                            Brushes.Gray, Brushes.MediumAquamarine, Brushes.Khaki,         Brushes.Coral, Brushes.Red };
                    for (int i = 0; i < 9; i++)
                    {
                        int ratioX = i == 8 ? 8 : (i <= 4 ? 1 : i - 3);
                        int ratioY = i == 0 ? 8 : (i <= 4 ? 5 - i : 1);
                        GannAngles.Add(new GannAngle(ratioX, ratioY, gannBrushes[i % 8]));
                    }
                }
                break;

            case State.Terminated:
                Dispose();
                break;
            }
        }