VC6制作的走势图绘制功能函数

本文介绍了一种在VC环境中实时绘制股票价格走势图的方法,包括处理链表数据、计算绘图点位置及绘制过程等关键技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于某些网络股票软件
比如各大门户网上都有的股票查看功能
其中的价格走势图和成交量图的实时绘制是一大亮点
我在VC里实践了下,绘走势图的函数如下
(由于程序里只是读取链表,计算处理结点数据然后绘点连线,耗费CPU时间较少,所以没有用双缓冲方法
如果是绘制位图,一般都要采用双缓冲方法防止刷新时闪屏)


void CDrawRealLine::DrawRealLine()
{
/*----------------------------
*计算画图所需点
*Point[180]--存放所要画的点的数组
*struct bargaininfo_head---价格链表结构体,存放表长度
*struct bargaininfo---价格链表结点
*m_socket---全局通信socket
*-----------------------------*/
idBuffer = m_QueID;//m_QueID查询文本框关联的成员变量
for(int i = 0; i < 180; i++)//Point[180]数组初始化
{
Point[i].num = 0;
Point[i].totalPrice = 0;
Point[i].totalQuality = 0;
}

//接收单个商品价格链表
struct bargaininfo_head *bargaininfo_head = NULL;
bargaininfo_head = getbargainhead(m_socket);
for(i=0;inum;i++)//价格链表头结点保存链表长度信息
{
struct bargaininfo *pInfo = NULL;
pInfo = getbargainnode(m_socket);

strtok(pInfo->time," ");//解析时间,这里""中间是空格
char *tempHour = strtok(NULL,":");
int hour = atoi(tempHour);
char *tempMin = strtok(NULL, ":");
int min = atoi(tempMin);

/*-------------------------------
*有点偷懒了,这里我把时间轴给固定下来,从9:30到15:30,中间均匀分割
*-------------------------------*/
int index = (hour - 9)*30 +min/2-15;//记录点位置
if(index >= 0 && index < 180)
{
Point[index].num++;
Point[index].totalPrice += pInfo->price;
Point[index].totalQuality += pInfo->quality;
}
theApp.index=index;//保存所画点个数
delete(pInfo);
}

//开始画图
CDC *pDC = GetDC();
pDC->SetBkColor(RGB(0,0,5));
CPen yellowpen(PS_SOLID,1,RGB(240,240,0));
pDC->SelectObject(&yellowpen);

//画成交量图
int j;//i用来控制绘图x坐标位置,j用来表示绘图的点脚标
j = 1;
CRect rect;
GetClientRect(&rect);
CPoint client;
client.x=rect.right-240;
client.y=rect.bottom;
i = 40;
for(j = 0; j < 180; j++)
{
pDC->MoveTo(i,client.y-80);
if(Point[j].totalPrice != 0)
{
int temp = client.y-80-(client.y-120)*Point[j].totalQuality/3/60000;
pDC->LineTo(i,temp);
}
i = i + (client.x-80)/180;
}

CPen lightyellow(PS_SOLID,1,RGB(175,175,10));
pDC->SelectObject(&lightyellow);

//画均线图
//先画出第一条
float p1= Point[0].totalPrice/Point[0].num;
if(p1>=theApp.chartstartprice)
{
int m = (p1-theApp.chartstartprice)/theApp.chartstartprice/0.12*(client.y- 120)/3;//点必须是整型
pDC->MoveTo(40,client.y/3);//client.y/3是均线图中间坐标
pDC->LineTo(40+(client.x-80)/180,client.y/3-m);
}
else
{
int n = (p1-theApp.chartstartprice)/theApp.chartstartprice/0.12*(client.y-120)/3;
pDC->MoveTo(40,client.y/3);
pDC->LineTo(40+(client.x-80)/180,client.y/3-n);
}

//再画接下来的线,直接lineto
i=40+(client.x-80)/180;
for(j = 1;j < 180; j++)
{
float p = Point[j].totalPrice/Point[j].num;//要画的平均价格
if(Point[j].totalPrice != 0)
{
if(p>=theApp.chartstartprice)
{
int m = (p-theApp.chartstartprice)
/theApp.chartstartprice/0.12*(client.y-120)/3;
pDC->LineTo(i+(client.x-80)/180,client.y/3-m);
}
else
{
int n = (p-theApp.chartstartprice)
/theApp.chartstartprice/0.12*(client.y-120)/3;
pDC->LineTo(i+(client.x-80)/180,client.y/3-n);
}
}
i+=(client.x-80)/180;
}

pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,0,5));
pDC->TextOut(300,5,"正在查询,请稍候...");//坐标300,5处原来有一个红字的提示,上边画完图后直接用背景色盖
掉提示。
}

数据库用的是 MSSQL2000(经不起折腾的数据库),数据库出问题了,没法抓图咯,有兴趣的朋友可以自己去试下。哦,对了,平台是VC6。不过.net下也可编译通过吧(不负责任的一句话)
FreeStock股票分析软件(V1.0)   FreeStock 股票分析软件展示了一般股票分析软件的核心技术,全部代码采用VC6.0编写,没有使用任何第三方控件,程序执行速度快。V1.0基本完成了静态分析部分的决大部分功能,在这个基础上进行盘中、选股等功能的扩充是相当容易的。 如果在使用过程中程序出现BUG,请告诉我:cymwork@sina.com; 或者对本软件有什么意见或建议,也请告诉我:cymwork@sina.com,以便程序功能更强大,更加方便普通用户的使用。 特色功能: 1、良好的程序结构,便于扩充:所有的图形元素都封装在类中,使用及扩充很容易; 2、高效快速的文件系统:这在股票分析软件中至关重要的,数据文件采用B+树索引,单个数据文件可存储2G的资料; 3、超强的表格系统:表格在任何任何软件中都很重要,这个表格呢? 以下是已经基本完成的功能简介: 行情表:显示实时盘中数据,也是与用户进行交互的接口; 画线工具:提供如下的画线功能: 名称 功能简述 直线 在图形中移动两点画直线,以测量趋势。 圆 在图形中移动两点画园,分析周期和转折点的规律。 正弦曲线 在图形中移动两点画正弦曲线,分析周期和转折点的规律。 矩形曲线 在图形中移动两点画矩形曲线,分析周期和转折点的规律。 菲氏正弦波 在图形中移动两点画菲氏正弦波,分析周期和转折点的规律,并可智能化计算出未来股价的三个重要转折日期。 菲氏矩形波 在图形中移动两点画菲氏矩形波,分析周期和转折点的规律。 椭圆 在图形中移动两点画椭园,分析周期和转折点的规律。 角度线 在图形中移动两点或输入角度值,分析波段趋势规律。 上升甘氏 在图形中分析上升波段趋势规律和对下降波段的支撑作用。 下降甘氏 在图形中分析下降波段趋势规律和对上升波段的支撑作用。 菲波那奇数列 在图形中移动两点画出菲波那奇数列,分析周期和转折点的规律。 黄金分割线 在图形中移动两点画出横向和纵向黄金分割线,分析周期和转折点的规律。 百分比线 在图形中移动两点画出横向百分比线,分析周期和转折点的规律。 黑洞阻挡线 在图形中移动两点画出起点黑洞阻挡线,分析中期阻挡规律。 密集成交带 选择股价波段,可显示该波段的密集成交带。 gan指标 是智能化研究股价波段的多价位阻挡工具。 十字光标:很方便的查看图形数据; 键盘宝:与用户交互的接口,支持公式的输入; 区域统计:方便的数据统计; 筹码分布图:几乎所有股票分析软件都有的; 日线报表:查看个股的历史数据; 多股同列:可以实现2、4、9股同列,由于时间的关系,V1.0没有做选择的界面,所以只有4股同列; 分析周期:可以很方便地在日线、周线、月线、5分钟、15分钟、30分钟、60分钟及盘中走势间切换; 画面组合:盘中可以最多3图组合;盘后最多可以4图组合; 指标内容:V1.0只完成了K线、成交量及MACD三个指标; 除复权:Ctrl+J,Ctrl+H热健 图形操作:放大、缩小;左移、右移;左翻页、右翻页; 数据导入:V1.0完成了乾隆格式的历史数据导入,速度极快; 界面设置:V1.0内置两套方案,由于时间的关系,没有做选择的界面,在SPLASH中见到的是另外一套方案。 说明: 1、打包文件中附带的历史数据有: 1A0001,1A0002,1A0003,600601,600602,600603 0001,0002,0003,2A01,2A02,2A03,2B01. 2、目前深证的代码只支持4位。 如果在使用过程中程序出现BUG,请告诉我:cymwork@sina.com; 或者对本软件有什么意见或建议,也请告诉我:cymwork@sina.com,以便程序功能更强大,更加方便普通用户的使用。 cymwork 于2002年03月13日 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值