仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1113|回复: 8
打印 上一主题 下一主题

[学习教程] NET网页编程之利用WPF中amCharts绘制股票K线图

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:26:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。本想本人用GDI画图,经由过程数据间接绘制一张蜡柱图,但以为如许子的功效对照少,以是到网上搜刮一些能画出K线图的控件.发明DynamicDataDisplay挺好的,在它的开辟截图里也发明能够绘制蜡柱图,但文档仿佛做的不是很好,不晓得怎样用它来画,在寻觅它对照好的例子的时分发明有人保举用amCharts绘制,以是便往看了一下,发明挺好用的,效果以下:

筹办事情
先要往这里下载amChartsStockChartforWPF并解压,新建一个WPFProject,在Toolbox里右击,选择ChooseItems,然后点击Browse,找到解压后的文件夹里有一个AmCharts.Windows.Stock.dll,单击Okay,筹办事情就做好了.
界面中amCharts控件的设置
<ams:StockChart></ams:StockChart>用于在窗口中增加如许一个控件,先看看这个控件是怎样绑定命据的:
<ams:StockChart.DataSets>
<ams:DataSetName="stockSet1"Brush="#7f8da9"
ItemsSource="{BindingData}"
DateMemberPath="date"
OpenMemberPath="open"HighMemberPath="high"
LowMemberPath="low"CloseMemberPath="close"
ValueMemberPath="close"VolumeMemberPath="volume"
/>
</ams:StockChart.DataSets>
个中ItemSource中的Data是在程序里发生的,它是一个StockInfo类的汇合.DataMenberPath,HighMenberPath,LowMenberPath,CloseMenberPath,ValueMenberPath,VolumeMenberPath指定的元素都是Data汇合中StockInfo的属性.StockInfo类布局以下:
publicclassStockInfo
{
publicDateTimedate{get;set;}
publicdoubleopen{get;set;}
publicdoublehigh{get;set;}
publicdoublelow{get;set;}
publicdoubleclose{get;set;}
publicdoublevolume{get;set;}
}
<ams:StockChart.Charts></ams:StockChart.Charts>标签用于拔出表格,表格中能够拔出多个图形,用<ams:Chart.Graphs></amd:Chart.Graphs>标签来创立图形.好比上面的代码就创立了一个图形:
<ams:StockChart.Charts>
<ams:ChartTitle="股票代价"GridHeight="2*">
<ams:Chart.Graphs>
<ams:GraphGraphType="Candlestick"
NegativeBrush="Green"PositiveBrush="Red"
LegendItemType="Ohlc"LegendPeriodItemType="Ohlc"
CursorBrush="Blue"CursorSize="6"/>
</ams:Chart.Graphs>
</ams:Chart>
</ams:StockChart.Charts>
注重个中的NegativeBrush和PositiveBrush属性,假如不指定色彩的话,就会默许依照美国股市的色彩来显现.在美国,股票涨了用绿色暗示,跌了用白色暗示,这与中国事完整相反的,因而必要指定色彩.LegentItemType和LegendPeriodItemType用于指定鼠标悬停在图形上,图形上方的信息显现甚么内容,这里我指定的是OHLC,也就是Open(收盘),High(最低价),Low(最低价),Close(开盘).
除此以外,在<ams:StockChart.Charts>标签中我们还能够设置别的属性,好比线条色彩,标尺色彩,信息显现色彩,是不是显现日期:
<ams:Chart.DateTimeAxis>
<ams:DateTimeAxisValuesForeground="#90000000"StrokeThickness="0"TickLength="0"/>
</ams:Chart.DateTimeAxis>
<ams:Chart.LeftValueAxis>
<ams:ValueAxisValuesForeground="#90000000"
StrokeThickness="0"TickLength="0"/>
</ams:Chart.LeftValueAxis>
<ams:Chart.Legend>
<ams:Legend
PositiveValueForeground="Red"NegativeValueForeground="Green"
IsDateVisible="True"/>
</ams:Chart.Legend>
下面的代码都是发生的K线图,amCharts控件还能够在K线图上面画一个成交量的柱形图大概折线图.
<ams:ChartTitle="成交量">
ams:Chart.Graphs>
<ams:GraphGraphType="Column"
LegendItemType="Value"LegendPeriodItemType="Value"
DataField="Volume"PeriodValue="Sum"
CursorBrush="Blue"CursorSize="6"
/>
</ams:Chart.Graphs>
<ams:Chart.DateTimeAxis>
<ams:DateTimeAxisValuesEnabled="False"StrokeThickness="0"/>
</ams:Chart.DateTimeAxis>
<ams:Chart.LeftValueAxis>
<ams:ValueAxisValuesForeground="#90000000"
StrokeThickness="0"TickLength="0"
/>
</ams:Chart.LeftValueAxis>
<ams:Chart.Legend>
<ams:LegendPositiveValueForeground="Red"NegativeValueForeground="Green"/>
</ams:Chart.Legend>
</ams:Chart>
</ams:StockChart.Charts>
在文章上方截图的右下角有个缩放功效,这个功效在<ams:StockChart.PeriodSelector></ams:StockChart.PeriodSelector>标签里完成的:
<ams:StockChart.PeriodSelector>
<ams:PeriodSelectorCustomPeriodLabelText="自界说距离:"PresetPeriodLabelText="缩放:"
Margin="0,5,0,0">
<ams:PeriodSelector.PresetPeriods>
<ams:PresetPeriodButtonInterval="Day"Quantity="10"ToolTipService.ToolTip="10天"Content="10天"/>
<ams:PresetPeriodButtonInterval="Month"Quantity="1"ToolTipService.ToolTip="1个月"Content="1月"/>
<ams:PresetPeriodButtonInterval="Month"Quantity="3"ToolTipService.ToolTip="3个月"Content="3月"/>
<ams:PresetPeriodButtonInterval="Year"Quantity="1"ToolTipService.ToolTip="1年"Content="1年"/>
<ams:PresetPeriodButtonInterval="Year"Quantity="3"ToolTipService.ToolTip="3年"Content="3年"/>
<ams:PresetPeriodButtonQuantity="NaN"ToolTipService.ToolTip="一切数据"Content="最年夜"/>
</ams:PeriodSelector.PresetPeriods>
</ams:PeriodSelector>
</ams:StockChart.PeriodSelector>
对数据举行剖析
至此,关于控件的界面方面就是这些内容.下面提到了绑定了程序里的Data,这个Data是怎样来的呢?数据是从国信金太阳网上买卖专业版里下载的日线数据,这个数据格局仍是对照有划定规矩的,第一行暗示股票信息,第二行暗示数据范例,接上去就是数据了,每一个数据之间用        制表符分开开.

先看一下Data的界说:
publicList<StockInfo>Data{get;set;}
中选择了一个上图所示的格局的文本文件,程序会对这个文本文件举行剖析,注重从国信金太阳下载的数据编码用的是ANSI编码.剖析步骤以下:
privateList<StockInfo>LoadStockInfo(stringfileName)
{
using(StreamresourceStream=newFileStream(fileName,FileMode.Open))
{
using(StreamReaderreader=newStreamReader(resourceStream,Encoding.GetEncoding("GB2312")))
{
//读文本中的每行
varstrings=reader.ReadToEnd().Split(newchar[]{
},StringSplitOptions.RemoveEmptyEntries);
//猎取股票称号
stockName=strings[0].Replace("","");
varres=newList<StockInfo>(strings.Length-2);
//第一行是股票称号,第二行是范例称号,第3行才是股票数据
for(inti=2;i<strings.Length;i++)
{
stringline=strings;
string[]subLines=line.Split(        );
DateTimedate=DateTime.Parse(subLines[0]);
Doubleopen=Double.Parse(subLines[1]);
Doublehigh=Double.Parse(subLines[2]);
Doublelow=Double.Parse(subLines[3]);
Doubleclose=Double.Parse(subLines[4]);
Doublevolumn=Double.Parse(subLines[5]);
res.Add(
newStockInfo{
date=date,
open=open,
high=high,
low=low,
close=close,
volume=volumn
});
}
returnres;
}
}
}
在程序中有一个按钮用来翻开一个"翻开文件对话框",选择了一个文件以后,挪用LoadData办法举行数据的显现:
privatevoidLoadData(stringpath)
{
Data=LoadStockInfo(path);
stockChart.Charts[0].Graphs[0].Title=stockName;
stockChart.Charts[1].Graphs[0].Title=stockName;
}
c++是语言,其实C++和java的应用范围根本就不一样的。在java应用的领域内,c++是不合适的。所以微软才搞了C#和Java对抗。
若相依 该用户已被删除
沙发
发表于 2015-1-18 14:41:34 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
分手快乐 该用户已被删除
板凳
发表于 2015-1-25 05:55:34 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
再见西城 该用户已被删除
地板
发表于 2015-2-2 17:32:54 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
深爱那片海 该用户已被删除
5#
发表于 2015-2-8 03:09:52 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
第二个灵魂 该用户已被删除
6#
发表于 2015-2-24 06:18:56 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
简单生活 该用户已被删除
7#
发表于 2015-3-7 11:45:31 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
因胸联盟 该用户已被删除
8#
发表于 2015-3-15 04:47:42 | 只看该作者
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
透明 该用户已被删除
9#
发表于 2015-3-21 19:40:08 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 00:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表