string begindate = null;
string curdate = null;
string overdate = null;
int half = 0;
string gpname = null;
int width = 1050;//K线图矩形宽
int height = 400;//K线图矩形高
int leftX = 40;//k线图矩形原始坐标X
int topY = 80;//k线图矩形原始坐标Y
//按钮加载K线
private void button1_Click(object sender, EventArgs e)
{
if (this.comboBox1.Text == “热点”)
{
gpname = “zhy” + this.textBox1.Text.Trim();
}
else
{
gpname =this.textBox1.Text.Trim();
}
if (gpname != “zhy”)
{
int count = 10;
half = count;
//string jintian = DateTime.Now.ToShortDateString().ToString();
string jintian = this.dateTimePicker1.Text;
curdate = jintian;
begindate = jintian;
this.Refresh();
string sql = “select top " + count + " begintime,dayopen,dayclose,dayhigh,daylow,day5,day10,day20,day60 from " + gpname + " where begintime<=’” + jintian + “’ order by begintime desc”;
huatu(sql, count);
label1.Text = curdate;
this.textBox1.Text = “”;
}
}
//画K线方法
private void huatu(string sql,int num)
{
Graphics g = CreateGraphics();
Pen p = new Pen(Color.Red, 1);//上涨
Pen p1 = new Pen(Color.Green, 1);//下跌
Pen p2 = new Pen(Color.Black, 1);
Pen p3 = new Pen(Color.Brown, 1);
Pen p4 = new Pen(Color.Purple, 1);
Pen p5 = new Pen(Color.Blue, 1);
Point[] pointList5;//用来绘制曲线图的关键点,依次将这些点连接起来即得到曲线图(Ma5)
Point[] pointList10;//(Ma10)
Point[] pointList20;//(Ma20)
Point[] pointList60;//(Ma60)
DataSet ds = null;
DataTable dt = null;
ds = db.getds(sql, “mminfo”);
dt = ds.Tables[0];
pointList5 = new Point[dt.Rows.Count];//初始化坐标数组
pointList10 = new Point[dt.Rows.Count];//初始化坐标数组
pointList20 = new Point[dt.Rows.Count];//初始化坐标数组
pointList60 = new Point[dt.Rows.Count];//初始化坐标数组

        int Kwidth = width / dt.Rows.Count - 10;g.DrawRectangle(p, leftX, topY, width, height);//k线开始Font myFont = new Font("微软雅黑", 8);string begindate1 = null;          string overdate1=dt.Rows[dt.Rows.Count-1]["begintime"].ToString();overdate =overdate1.Substring(0,overdate1.IndexOf(" "));string begindate2 = dt.Rows[0]["begintime"].ToString();begindate = begindate2.Substring(0, begindate2.IndexOf(" "));decimal high = (decimal)dt.Compute("Max(dayhigh)", null);//选择的K线组合中最高价decimal low = (decimal)dt.Compute("Min(daylow)", null);//选择的K线组合中最低价decimal hhigh = Math.Floor(high);decimal llow = Math.Floor(low);float llow1 = float.Parse(llow.ToString());int changdu = width / dt.Rows.Count;//横轴每个日期的长度decimal hlow = hhigh - llow;//纵轴总共差价decimal oneprice = hlow / 10;float onepoint = float.Parse((height / hlow).ToString());//单个价格所占的纵轴坐标for (int i = 0; i < dt.Rows.Count; i++)//横轴时间{g.DrawLine(p, width + leftX - changdu * (i + 1) + Kwidth / 2, height + topY, width + leftX - changdu * (i + 1) + Kwidth / 2, height + topY + 10);//横线N等分(20整体向右移动20单位,600为矩形长度,80为矩形离窗体左边为80) }for (int i = 0; i < 9; i++)//纵轴价格{g.DrawLine(p, width + leftX, height + topY - 40 * (i + 1), width + leftX + 10, height + topY - 40 * (i + 1));//纵线10等分g.DrawString(((i + 1) * oneprice + llow).ToString(), myFont, Brushes.Red, width + leftX + 15, height + topY - 7 - height / 10 * (i + 1));}for (int i = 0; i < dt.Rows.Count; i++){int len1 = dt.Rows[i]["begintime"].ToString().IndexOf(" ");int len = dt.Rows[i]["begintime"].ToString().LastIndexOf('/') + 1;int len2 = dt.Rows[i]["begintime"].ToString().IndexOf('/') + 1;begindate1 = dt.Rows[i]["begintime"].ToString().Substring(len2, len1 - len2);float o = float.Parse(dt.Rows[i]["dayopen"].ToString());float c = float.Parse(dt.Rows[i]["dayclose"].ToString());float h = float.Parse(dt.Rows[i]["dayhigh"].ToString());float l = float.Parse(dt.Rows[i]["daylow"].ToString());float day5=float.Parse(dt.Rows[i]["day5"].ToString());float day10 = float.Parse(dt.Rows[i]["day10"].ToString());float day20 = float.Parse(dt.Rows[i]["day20"].ToString());float day60 = float.Parse(dt.Rows[i]["day60"].ToString());int px5 = int.Parse((width + 80 - changdu * (i + 1) + Kwidth / 2).ToString());int py5 = int.Parse(Math.Floor(height - (day5 - llow1) * onepoint+80).ToString());int py10 = int.Parse(Math.Floor(height - (day10 - llow1) * onepoint + 80).ToString());int py20 = int.Parse(Math.Floor(height - (day20 - llow1) * onepoint + 80).ToString());int py60 = int.Parse(Math.Floor(height - (day60 - llow1) * onepoint + 80).ToString());if (begindate1 == "10/30"){label17.Text = px5.ToString();label16.Text = py5.ToString();}pointList5[i] = new Point(px5, py5);pointList10[i] = new Point(px5, py10);pointList20[i] = new Point(px5, py20);pointList60[i] = new Point(px5, py60);g.DrawString(begindate1, myFont, Brushes.Red, new PointF(width + leftX - changdu * (i + 1) + Kwidth / 2 - 5, height + topY + 20));if (c > o){g.DrawLine(p, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (c - llow1) * onepoint + topY, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (h - llow1) * onepoint + topY);//上影(600为矩形长度,80为矩形到窗体左边的距离,60为长度10等分,10为纵柱最高价)g.DrawRectangle(p, width + leftX - changdu * (i + 1), height - (c - llow1) * onepoint + topY, Kwidth, (c - o) * onepoint);//实体(Kwidth为K线宽度)(20,40为调节K线大小)g.DrawLine(p, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (o - llow1) * onepoint + topY, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (l - llow1) * onepoint + topY);//下影 (20为整体向左平移20个单位)}else if (c < o){g.DrawLine(p1, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (o - llow1) * onepoint + topY, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (h - llow1) * onepoint + topY);//上影g.DrawRectangle(p1, width + leftX - changdu * (i + 1), height - (o - llow1) * onepoint + topY, Kwidth, (o - c) * onepoint);//实体g.DrawLine(p1, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (c - llow1) * onepoint + topY, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (l - llow1) * onepoint + topY);//下影 }else if (c == o){g.DrawLine(p, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (o - llow1) * onepoint + topY, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (h - llow1) * onepoint + topY);//上影g.DrawLine(p1, width + leftX - changdu * (i + 1), height - (o - llow1) * onepoint + topY, width + leftX - 20 - changdu * (i + 1) + 20 + Kwidth, height - (o - llow1) * onepoint + topY);//实体g.DrawLine(p, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (c - llow1) * onepoint + topY, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (l - llow1) * onepoint + topY);//下影 }if (i == 0){label28.Text = dt.Rows[i]["begintime"].ToString().Substring(0, len1);       }if (i == dt.Rows.Count - 1){label29.Text = dt.Rows[i]["begintime"].ToString().Substring(0, len1);               }}g.DrawCurve(p2, pointList5);//画5均线g.DrawCurve(p3, pointList10);//画10均线g.DrawCurve(p4, pointList20);//画20均线g.DrawCurve(p5, pointList60);//画60均线p.Dispose();g.Dispose();}private void Kxian_KeyDown(object sender, KeyEventArgs e){DataSet ds;string curdate1 = null;string sql = null;            string bdate = null;string odate = null;//int count = int.Parse(this.comboBox1.Text.Trim());//int count = 10;switch (e.KeyCode){case Keys.Left:sql = "select top 1 begintime,dayopen,dayclose,dayhigh,daylow,day5,day10,day20,day60 from "+gpname+" where begintime<'" + curdate + "' order by begintime desc";ds = db.getds(sql, "previous");if (ds.Tables[0].Rows.Count > 0){curdate1 = ds.Tables[0].Rows[0]["begintime"].ToString();curdate = curdate1.Substring(0, curdate1.IndexOf(" "));label1.Text = curdate;label7.Text = ds.Tables[0].Rows[0]["dayopen"].ToString();label6.Text = ds.Tables[0].Rows[0]["dayclose"].ToString();label9.Text = ds.Tables[0].Rows[0]["dayhigh"].ToString();label8.Text = ds.Tables[0].Rows[0]["daylow"].ToString();label12.Text = ds.Tables[0].Rows[0]["day5"].ToString();label11.Text = ds.Tables[0].Rows[0]["day10"].ToString();label22.Text = ds.Tables[0].Rows[0]["day20"].ToString();label21.Text = ds.Tables[0].Rows[0]["day60"].ToString();if (CompareDate(curdate, overdate) < 0){this.Refresh();sql = "select * from(select top " + half + "  begintime,dayopen,dayclose,dayhigh,daylow,day5,day10,day20,day60 from "+gpname+"  where begintime>='" + curdate + "' order by begintime asc) a order by begintime desc";huatu(sql, half);overdate = curdate;}}break;case Keys.Up:                   if (half >=10){this.Refresh();half = half / 2;bdate = DateTime.Parse(curdate).AddDays(-half).ToShortDateString();odate = DateTime.Parse(curdate).AddDays(half).ToShortDateString();sql = "select  begintime,dayopen,dayopen,dayclose,dayhigh,daylow,day5,day10,day20,day60 from "+gpname+"  where begintime between '" + bdate + "' and '" + odate + "' order by begintime desc ";huatu(sql, half);label2.Text = half.ToString();}break;case Keys.Right:sql = "select top 1 begintime,dayopen,dayclose,dayhigh,daylow,day5,day10,day20,day60 from "+gpname+" where begintime>'" + curdate + "' order by begintime asc";ds = db.getds(sql, "next");if (ds.Tables[0].Rows.Count > 0){curdate1 = ds.Tables[0].Rows[0]["begintime"].ToString();curdate = curdate1.Substring(0, curdate1.IndexOf(" "));label1.Text = curdate;label7.Text = ds.Tables[0].Rows[0]["dayopen"].ToString();label6.Text = ds.Tables[0].Rows[0]["dayclose"].ToString();label9.Text = ds.Tables[0].Rows[0]["dayhigh"].ToString();label8.Text = ds.Tables[0].Rows[0]["daylow"].ToString();label12.Text = ds.Tables[0].Rows[0]["day5"].ToString();label11.Text = ds.Tables[0].Rows[0]["day10"].ToString();label22.Text = ds.Tables[0].Rows[0]["day20"].ToString();label21.Text = ds.Tables[0].Rows[0]["day60"].ToString();if (CompareDate(curdate, begindate) > 0){this.Refresh();sql = "select top " + half + "  begintime,dayopen,dayclose,dayhigh,daylow,day5,day10,day20,day60 from "+gpname+"  where begintime<='" + curdate + "' order by begintime desc";huatu(sql, half);overdate = curdate;}}break;case Keys.Down:                  if (half < 356){half = half * 2;this.Refresh();bdate = DateTime.Parse(curdate).AddDays(-half).ToShortDateString();odate = DateTime.Parse(curdate).AddDays(half).ToShortDateString();sql = "select  begintime,dayopen,dayopen,dayclose,dayhigh,daylow,day5,day10,day20,day60 from "+gpname+"  where begintime between '" + bdate + "' and '" + odate + "' order by begintime desc ";huatu(sql, half);label2.Text = half.ToString();}  break;}}//画箭头private void button2_Click(object sender, EventArgs e){Graphics g = CreateGraphics();string bdate = this.label28.Text;string curdate = this.label1.Text;string odate = this.label29.Text;string begindate1 = null;string sql = "select  begintime,dayopen,dayclose,dayhigh,daylow,day5,day10,day20,day60 from " + gpname + "  where begintime between '" + odate + "' and '" + bdate + "' order by begintime desc ";DataSet ds = null;DataTable dt = null;ds = db.getds(sql, "mminfo");dt = ds.Tables[0];int changdu = width / dt.Rows.Count;//横轴每个日期的长度int Kwidth = width / dt.Rows.Count - 10;//单个K线的长度decimal high = (decimal)dt.Compute("Max(dayhigh)", null);//选择的K线组合中最高价decimal low = (decimal)dt.Compute("Min(daylow)", null);//选择的K线组合中最低价decimal hhigh = Math.Floor(high);decimal llow = Math.Floor(low);float llow1 = float.Parse(llow.ToString());decimal hlow = hhigh - llow;//纵轴总共差价float onepoint = float.Parse((height / hlow).ToString());//单个价格所占的纵轴坐标for (int i = 0; i < dt.Rows.Count; i++){int len1 = dt.Rows[i]["begintime"].ToString().IndexOf(" ");begindate1 = dt.Rows[i]["begintime"].ToString().Substring(0, len1);if (curdate == begindate1){float h = float.Parse(dt.Rows[i]["dayhigh"].ToString());g.SmoothingMode = SmoothingMode.AntiAlias;Pen p = new Pen(Color.Red, 7);p.StartCap = LineCap.Square;p.EndCap = LineCap.ArrowAnchor;g.DrawLine(p, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (h - llow1) * onepoint + topY-100, width + leftX - changdu * (i + 1) + Kwidth / 2, height - (h - llow1) * onepoint + topY);p.Dispose();g.Dispose();}}}//截图private void button4_Click(object sender, EventArgs e){string path = "d:\\111.jpg";Point startP = new Point(0, 0);startP = this.PointToScreen(startP);Image img = new Bitmap(width + 50, height + 50);Graphics g = Graphics.FromImage(img);g.CopyFromScreen(new Point(startP.X+leftX,startP.Y+topY),new Point(0,0),img.Size);img.Save(path);this.textBox2.Text=path;}

C#画K线实现画K线和截图保存相关推荐

  1. c iostream.源码_通达信《K线上画趋势线预警》精选指标(附源码)

    通达信<K线上画趋势线预警>精选指标 K线上画趋势线预警源码: N:=5; MA5:=EMA(C,5)COLORWHITE; MA13:=EMA(C,13)COLORCYAN; MA21: ...

  2. 斐波那契回调线怎么画_斐波那契回调线的口诀-斐波那契数列k线图解。

    斐波那契回调线 斐波那契数列的通项公式? 斐波那契数列的求和公式?有么 求教1.斐波那契回调线的高点和低点怎样确定比较好?在多大的一个区间内确定. 新人提问:您知道斐波那契回调线的正确方法吗? 选择股 ...

  3. matlab计算macd_matlab股市图k线 matlab画macd图

    我们在进行均线操盘时常会用到k线走势图以及分时图来综合的判断未来股市的趋势走向.以便于能够及时的做出相应的调整.我们在k线形态图已经明白怎么去做止盈.那么对于分时图而言,投资如何在这里面利用均价线做止 ...

  4. K线理论--单根K线形态

    1. K线图 日K线是根据股价(指数)一天的走势中形成的四个价位即:开盘价,收盘价,最高价,最低价绘制而成的. 开盘价: 每个交易日的第一笔成交价格 收盘价: 每个交易日的最后一笔成交价格 最高价\最 ...

  5. axure中备注线_1分钟K线、日K线、月K线……不同周期的K线图到底有啥用?

    本文由小冉老师微信(xiaoran376418732)整理,个人观点,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负. 有人说炒股是一门玄学,有人说炒股是一门艺术. 有时炒股是一件门槛很 ...

  6. 斐波那契回调线怎么画_外汇MT4平台上的斐波那契回调线怎么使用

    [如何画斐波那契回调线] 斐波那契回调线一般选取的是前期高点和近期低点,点选工具栏中的斐波那契回调线图标,如果你要查看的是跌势中的压力和支撑,那么点击价格高点,按住鼠标然后移动到低点放开.如果要看涨势 ...

  7. 如何看懂k线图:K线详细分析图解

    K线图(Candlestick chart)源处于日本德川幕府时代,它是被当时日本的米市商人用来记录米市的行情与价格波动,因为其独到的标画方式而被引入到股市及期货市场.所有的投资者都可以根据K线的实体 ...

  8. 斐波那契回调线怎么画_斐波那契回调线(黄金分割线)神级操作-经典

    原标题:斐波那契回调线(黄金分割线)神级操作-经典 斐波那契回调线,又称黄金分割线.在交易市场上,大多数的技术指标都具有滞后性,导致交易者在使用时不太好掌握.但是,斐波那契回调线具有提前性,能很好的帮 ...

  9. 斐波那契回调线怎么画_交易者必备——斐波那契回调线的绝妙用法

    本期<交易智慧>,将为大家介绍一个交易者常用的技术指标--斐波那契回调线,又称黄金分割线.在交易市场上,大多数的技术指标都具有滞后性,导致交易者在使用时不太好掌握.但是,斐波那契回调线具有 ...

  10. 如何用matlab,frontcon函数画出有效市场边缘和资本市场线

    既上一篇有效市场边缘的作图:http://blog.csdn.net/alanguoo/article/details/52905121 这次来说一下怎么在有效市场边缘上画出切线,即资本市场线,CAL ...

最新文章

  1. bootstrap5
  2. java数据类型_JAVA的数据类型
  3. [置顶] Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite...
  4. 《球球大作战》游戏优化之路(上)
  5. win10一直正在检查更新_教你win10升级更新失败怎么办
  6. UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figur
  7. 地铁闸门会夹伤人吗_家长们注意啦!又有孩子被地铁闸机夹翻
  8. 【爱心代码大全】——情人节表白代码送给她属于我们程序员的浪漫
  9. hdu4565之矩阵快速幂
  10. Qt工作笔记-时QLabel具有点击事件(使用EventFilter)
  11. unity许可证不可用_不可思议之梦蝶从PC版移植到Nintendo Switch经验分享(上)
  12. DeepLearningAI 学习笔记 1.1 深度学习概论
  13. MxCAD云图DWG转PDF
  14. ROBOGUIDE软件:FANUC机器人弧焊焊接系统配置与虚拟仿真
  15. sshd远程主机间的访问
  16. 数独小项目开篇:DFS解决数独难题
  17. JAVA和SQL中时间的格式化 (yyyy-MM-dd HH:mm:ss转换规则)知识总结
  18. oracle查询遇到关键字
  19. chromium 编译
  20. python时间间隔函数_python定间隔取点(np.linspace)的实现

热门文章

  1. 学会Zynq(28)SPI控制器简介
  2. python多线程(Multiprocessing)与多线程(Multithreading)区别优缺点最详细解释
  3. 如何使用OpenAI API和Python SDK构建自己的聊天机器人
  4. linux常用命令2
  5. BLAM(Berkeley Localization And Mapping)安装使用教程
  6. YbtOj#20073. 「NOIP2020 模拟赛 B 组 Day6」钻石守卫
  7. 高中信息技术c语言编程题,高中信息技术招聘C语言编程题精选.doc
  8. MATLAB 矩阵的合并方法
  9. 【NOIP模拟】序列
  10. FTP修改默认端口后,注意事项