C#下利用开源NPlot绘制股票十字交叉线

标签: NPlot 股票十字交叉线 C# 数字货币 交易软件
25人阅读 评论(0) 收藏 举报
分类:
在数字货币或者股票看盘交易软件中,为了方便准确定位K线图中的时间和买卖点,都用到了用十字交叉线来定位买卖时间和买卖点。这里利用.Net下开源的NPlot图表插件,实现了跟着鼠标移动的十字定位交叉线,并能做到根据屏幕坐标转化为时间和买卖点坐标。这里通过在K线图上双击创建交叉十字线,十字线跟着鼠标移动而移动,并且实时获取移动的位置。效果如下:


主要代码实现包括PlotSurface2D(PlotSurface2D为NPlot控件中的容器类)创建及初始化、PlotSurface2D鼠标双击及移动的事件绑定及代码实现,HorizontalLine横线、VerticalLine竖线的声明和创建。详细代码如下:
PlotSurface2D的声明及初始化:
private NPlot.Windows.PlotSurface2D KLinePS;
 private void InitKLinePS()
        {
            KLinePS = new NPlot.Windows.PlotSurface2D();
            this.KLinePS.AutoScaleAutoGeneratedAxes = true;
            this.KLinePS.AutoScaleTitle = false;
            this.KLinePS.DateTimeToolTip = true;
            this.KLinePS.DateTimeToolTip = true;
            this.KLinePS.Legend = null;
            this.KLinePS.LegendZOrder = -1;
            this.KLinePS.Location = new System.Drawing.Point(0, 0);
            this.KLinePS.Name = "costPS";
            this.KLinePS.RightMenu = null;
            this.KLinePS.Padding = 1;
           
            //鼠标tooltips 时间+价格
            this.KLinePS.ShowCoordinates = true;
            this.KLinePS.Size = new System.Drawing.Size(969, 595);
            this.KLinePS.Width = 1300;
            this.KLinePS.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
            this.KLinePS.TabIndex = 2;
            this.KLinePS.Title = "123";
            this.KLinePS.TitleFont = new System.Drawing.Font("Arial", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel);

        }

HorizontalLine横线、VerticalLine竖线的声明,这里只是声明,具体的创建包括在鼠标双击事件中: 

VerticalLine lineCrossX;// = new VerticalLine(10);
        HorizontalLine lineCrossY;// = new HorizontalLine(10);

鼠标事件的绑定: 

 KLinePS.MouseMove += new System.Windows.Forms.MouseEventHandler(KLinePS_MouseMove);
            KLinePS.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(KLinePS_MouseDoubleClick);

鼠标双击事件的实现:

private void KLinePS_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            System.Drawing.Point here = new System.Drawing.Point(e.X, e.Y);
            //屏幕坐标转化为业务坐标
            double x = this.KLinePS.PhysicalXAxis1Cache.PhysicalToWorld(here, true);
            double y = this.KLinePS.PhysicalYAxis1Cache.PhysicalToWorld(here, true);
            DateTime dateTime = new DateTime((long)x);
            //水平线创建
            lineCrossY = new HorizontalLine(y);
            lineCrossY.LengthScale = 0.89f;
            lineCrossY.OrdinateValue = y;
            lineCrossY.Pen = Pens.Green;
            //line.OrdinateValue = 2;
            this.KLinePS.Add(lineCrossY);
            ////  ///////垂直线///////////
            lineCrossX = new VerticalLine(x);
            lineCrossX.LengthScale = 0.89f;
            lineCrossX.Pen = Pens.Red;
            lineCrossX.AbscissaValue = x;
            this.KLinePS.Add(lineCrossX);            
            this.KLinePS.Refresh();
        }

鼠标移动事件的实现:

private void KLinePS_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            if (this.KLinePS.PhysicalXAxis1Cache == null || this.KLinePS.PhysicalYAxis1Cache == null)
                return;
            System.Drawing.Point here = new System.Drawing.Point(e.X, e.Y);
            double x = this.KLinePS.PhysicalXAxis1Cache.PhysicalToWorld(here, true);
            double y = this.KLinePS.PhysicalYAxis1Cache.PhysicalToWorld(here, true);
            if (lineCrossY != null && lineCrossX != null)
            {
                lineCrossY.OrdinateValue = y;
                lineCrossX.AbscissaValue = x;
            }
            this.KLinePS.Refresh();
        }

查看评论

利用HTML5画布绘制精美动态效果

-
  • 1970年01月01日 08:00

C#中用NPlot画图的方法总结

  • 2010年07月18日 15:06
  • 3KB
  • 下载

关于Winform中类似股票K线图十字交叉线随着鼠标移动的实现方法!

有一个项目组这段时间主要多为MFC及Winform类型的项目,主要从技术面而言而已,否则这个项目组的成本也忒高了,......还是记录一段时间的桌面应用知识吧!       今天主要分享一下一个实习...
  • jetsu
  • jetsu
  • 2017-03-16 15:10:09
  • 1068

c#使用Nplot插件开发之使用线图与时间轴

(1)时间轴代码 TradingDateTimeAxis la = new TradingDateTimeAxis(plotSurface2D1.XAxis1); (2)时间轴需要传入的...
  • echoerror
  • echoerror
  • 2016-12-04 10:48:51
  • 1830

C#开源图表组件

下面是C#开源图表组件:  NPlot:http://netcontrols.org/nplot/ 我觉得是.NET开源轻量级比较好的,但是在实时显示图表上不是很出色 graphviz(q...
  • fengshuiyue
  • fengshuiyue
  • 2014-11-17 23:12:49
  • 3902

NPlot改造序言和目标简述

NPlot为一个DotNet开源项目,本身是一个功能强大且性能优秀的图形库,可以绘制常见的各种图形,比如股票图(K线图)、曲线图、散点图、直方图,几乎现实需求中的图它都有能力绘制。可惜啊,当我第一眼看...
  • lxh0129
  • lxh0129
  • 2011-10-20 12:26:00
  • 1280

nplot用法(线、柱、标签、移动窗体)

                myPlot.Clear();                //加入网格                Grid mygrid = new Grid();      ...
  • zxmlqy
  • zxmlqy
  • 2008-05-03 21:14:00
  • 2506

Android安卓使用MPAndroidChart绘制K线图和股票指标

年前的时候就开始研究android的股票软件,因为年后要做一个有关期货的教学软件。以前对股票类软件很少接触,就在朋友的推荐下下载了一个同花顺的软件,再慢慢了解什么是K线图,和一些常用的股票指标。 首...
  • zhuzhu553
  • zhuzhu553
  • 2017-03-09 10:46:23
  • 7332

几个不错的开源的.net界面控件 (转)

转自 http://www.donews.net/bluepenguin/articles/283714.aspx几个不错的开源的.net界面控件 - zt 介绍几个自己觉得不错的几个开源的.net界...
  • qdzx2008
  • qdzx2008
  • 2005-11-04 22:37:00
  • 9641

NPlot开源图表控件 for .NET4.5

  • 2015年03月15日 16:40
  • 147KB
  • 下载
    博客专栏
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 4万+
    积分: 1265
    排名: 4万+
    最新评论
    Android常见bug