|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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对抗。 |
|