用C#可以做股票软件吗? 如果做的话,首先是数据库的问题,上交所数据,深交所数据,日线,周线,还有一千多只股票,而且还要实时更新,怎样建数据库好点呢?然后是,C#里边实现画K线好实现吗,要用到哪些东西呢?请对此感兴趣的或做过的讨论一下.. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 To:lowtemper(小镇姑娘她爹) 请问你曾经看到过的那个,有相关资料吗,给个链接好么? 去看看http://www.hylt.net/club/viewforum.php?f=32 to:smith888898(思迷思) 那上面果然好多相关资料,不过好像都是vc的啊.个人感觉这种软件里面要实现的东西比较多,而且也比较复杂,smith888898(思迷思)有什么最新成果没,小弟虚心向您学习了!~~ 画K线只是其中一个很小的部分,最麻烦的是数据库处理绘图部分无法就是GDI+里面的东东。 从网上找到了个php画k线的,不过里边有地方不懂,请各位帮忙看一下.<?php Header("Content-type: image/png");$im = ImageCreate(640,260);$bkground = ImageColorAllocate($im,255,255,255);$data = ImageColorAllocate($im,0,0,0);$gird = ImageColorAllocate($im,200,200,160);$upline = ImageColorAllocate($im,255,0,0);$dnline = ImageColorAllocate($im,0,175,175);$d5line = ImageColorAllocate($im,255,127,0);$d20line = ImageColorAllocate($im,0,0,127);$d10line = ImageColorAllocate($im,255,0,255);// 先定义好绘各种对象所用的颜色。for($i=20;$i<=220;$i+=25) ImageLine($im, 60, $i, 560, $i, $gird);for($j=60;$j<=560;$j+=25) ImageLine($im, $j, 20, $j, 220, $gird);// 事先计算好位置、格子宽度,用for循环画线,省事多了。$zzg=10.55; $zzd=7.63;$lzg=10350;// 假设的股市数据,// $zzg是需要分析的这一段时间的最高价,假设是10.55元。// $zzd是需要分析的这一段时间的最低价,假设是7.63元。// $lzg是需要分析的这一段时间的最高成交量,假设是10350手。// 这是计算坐标网格的“刻度”的重要数据。$bl=$zzg-$zzd;// 最高价跟最低价的差额。根据它跟网格总高度之间的比例,// 就可以得出一个实际的价格在网格里所处的位置。for($i=1;$i<=7;$i++) { $y=$i*25-10; // 根据网格线的位置计算标注刻度的合适高度(纵坐标)。 $str=Number_Format($zzg-($i-1)/6*$bl,2,".",","); // 计算每根刻度线对应的价格、并格式化该字符串。 $x=55-ImageFontWidth(2)*StrLen($str); // 根据这个字符串将要占用的宽度,计算出合适的横坐标。 ImageString($im, 2,$x, $y,$str, $data); // 写出这个字符串。 }$str=Number_Format($lzg,0,".",",");ImageString($im,2,564,164,$str,$data);$str=Number_Format($lzg/2,0,".",",");ImageString($im,2,564,189,$str,$data);// 由于写成交量的刻度只有两处,用循环写就不合算了。// 如果数量比较多,也应该用循环。// 由于一张K线图要画无数根小K线柱,所以,把画一根小K线柱写成函数function kline($img,$kp,$zg,$zd,$sp,$cjl,$ii)// 参数:$img 图象;$kp $zg $zd $sp 是开盘、最高、最低、收盘;// $cjl 成交量;$ii 计数器,表示K线柱的序号。{ global $bl,$zzd,$lzg; // 声明该函数里用到的$bl,$zzd,$lzg三个变量是全局变量。 $h=150; // K线柱区域高度是 150。 $hh=200; // K线柱区域、成交量柱区域总高度是 200。 if($sp<$kp) $linecolor = ImageColorAllocate($img,0,175,175); // 如果收盘价低于开盘,是阴线,用青色 else $linecolor = ImageColorAllocate($img,255,0,0); // 否则为阳线,用红色。 $x=58+$ii*4; // 根据K线柱序号计算横坐标。 $y1=20+$h-($kp-$zzd)/$bl*$h; // 根据开盘价计算对应纵坐标。 $y2=20+$h-($sp-$zzd)/$bl*$h; // 根据收盘价计算对应纵坐标。 $y3=20+$h-($zg-$zzd)/$bl*$h; // 根据最高价计算对应纵坐标。 $y4=20+$h-($zd-$zzd)/$bl*$h; // 根据最低价计算对应纵坐标。 $y5=20+$hh-$cjl/$lzg*($hh-$h); // 根据成交量计算对应纵坐标。 if($y1<=$y2) ImageFilledRectangle($img,$x-1,$y1,$x+1,$y2,$linecolor); else ImageFilledRectangle($img,$x-1,$y2,$x+1,$y1,$linecolor); // 横坐标减1到加1,跨度为3。即绘宽度为3的小填充矩形。 // 高度和纵坐标则是由开盘、收盘价决定的。 // 经测试发现,这个函数必须是左上点坐标写在右下点坐标之前, // 而非自动判断两点孰为左上,孰为右下。 ImageFilledRectangle($img,$x-1,$y5,$x+1,220,$linecolor); // 根据成交量绘成交量柱体。 ImageLine($img,$x,$y3,$x,$y4,$linecolor); // 根据最高价、最低价绘上下影线。}// 试画一根。开盘 8.50 最高 8.88 最低 8.32 收盘 8.80 成交 6578手。kline($im,8.50,8.88,8.32,8.80,6578,1);// 再画一根。开盘 8.80 最高 9.50 最低 8.80 收盘 9.50 成交 8070手。// 光头光脚的大阳线啊!kline($im,8.80,9.50,8.80,9.50,8070,2);// 再来一根阴线。开盘 9.80 最高 9.80 最低 8.90 收盘 9.06 成交 10070手。// 赔了!昨天抛掉多好呀。kline($im,9.80,9.80,8.90,9.06,10070,3);// ……ImagePNG($im);ImageDestroy($im);?>特别是这个for循环,$str=Number_Format($zzg-($i-1)/6*$bl,2,".",",");为什么要除6啊,字符串将要占用的宽度在c#里边用哪个函数啊?高人帮忙分析一下啊/////for($i=1;$i<=7;$i++) { $y=$i*25-10; // 根据网格线的位置计算标注刻度的合适高度(纵坐标)。 $str=Number_Format($zzg-($i-1)/6*$bl,2,".",","); // 计算每根刻度线对应的价格、并格式化该字符串。 $x=55-ImageFontWidth(2)*StrLen($str); // 根据这个字符串将要占用的宽度,计算出合适的横坐标。 ImageString($im, 2,$x, $y,$str, $data); // 写出这个字符串。 } 从网上找的php的那三个函数number_format格式化数字字符串。语法: string number_format(float number, int [decimals], string [dec_point], string [thousands_sep]);返回值: 字符串函数种类: 数学运算 内容说明 本函数用来将浮点参数 number 格式化。若没加参数 decimals 则返回的字符串只要整数部份,加了此参数才依参数指定的小数点位数返回。参数 dec_point 表示小数点的表示方式方法,默认值是 ".",若需要转换成其它的小数点就可以在这个参数改掉。参数 thousands_sep 为整数部份每三位的分隔符号,默认值是 ","。本函数最特别的地方就是参数数目,最少要有一个,也就是欲格式化的字符串;也可以有二个或者四个参数,但不能用三个参数。治募注意的是指定小数点的位数之后的数字直接舍弃,没有四舍五入的情形。ImageFontWidth取得字型的宽度。语法: int imagefontwidth(int font);传回值: 整数函式种类: 图形处理 内容说明 本函式用来取得指定字型的宽度,单位为像素 (pixel)。ImageString绘横式字符串。语法: int imagestring(int im, int font, int x, int y, string s, int col);返回值: 整数函数种类: 图形处理 内容说明 本函数在图片上绘出水平的横式字符串。参数 font 为字形,设为 1 到 5 表示使用默认字形。参数 x、y 为字符串起点坐标。字符串的内容放在参数 s 上。参数 col 表示字符串的颜色。 可以公司本来准备用C#开发但是客户端需要下载.NETFRAMEWORK很不方便集成到安装包中又太大结果搞成用VB开发了 用GDI+,有专门的一本红皮书的 真有兴趣就去http://www.stockbook.cn/php/index.php看看,有全套源码相送 如何快速在一个二维数组中查找~? 讨论下淘宝API更新数据? 请求一个处理字符的速度问题 已知一个类的名字(string型),如何实例化一个他的对象? C#连接SQL2005的问题... 关于Dispose(Boolean)的几个问题 请教一个在C#中运行网络邻居命令行的问题 如何從文本文件中讀出漢字? 问一个问题 怎么可以实现EXCEL数据表数据导进MSSQL呢?? 谁用过VS2005中的htmlinputhidden控件,为何不能在JS和服务器程序间传值,在名称之前系统自动都加了一段字符串,郁闷 公司诚购买PDA源码,价格可以商量 .NET中如何将传入的值,再传给当页的用户控件
请问你曾经看到过的那个,有相关资料吗,给个链接好么?
http://www.hylt.net/club/viewforum.php?f=32
那上面果然好多相关资料,不过好像都是vc的啊.
个人感觉这种软件里面要实现的东西比较多,而且也比较复杂,smith888898(思迷思)有什么最新成果没,小弟虚心向您学习了!~~
绘图部分无法就是GDI+里面的东东。
<?php
Header("Content-type: image/png");$im = ImageCreate(640,260);
$bkground = ImageColorAllocate($im,255,255,255);
$data = ImageColorAllocate($im,0,0,0);
$gird = ImageColorAllocate($im,200,200,160);
$upline = ImageColorAllocate($im,255,0,0);
$dnline = ImageColorAllocate($im,0,175,175);
$d5line = ImageColorAllocate($im,255,127,0);
$d20line = ImageColorAllocate($im,0,0,127);
$d10line = ImageColorAllocate($im,255,0,255);
// 先定义好绘各种对象所用的颜色。for($i=20;$i<=220;$i+=25)
ImageLine($im, 60, $i, 560, $i, $gird);
for($j=60;$j<=560;$j+=25)
ImageLine($im, $j, 20, $j, 220, $gird);
// 事先计算好位置、格子宽度,用for循环画线,省事多了。$zzg=10.55;
$zzd=7.63;
$lzg=10350;
// 假设的股市数据,
// $zzg是需要分析的这一段时间的最高价,假设是10.55元。
// $zzd是需要分析的这一段时间的最低价,假设是7.63元。
// $lzg是需要分析的这一段时间的最高成交量,假设是10350手。
// 这是计算坐标网格的“刻度”的重要数据。
$bl=$zzg-$zzd;
// 最高价跟最低价的差额。根据它跟网格总高度之间的比例,
// 就可以得出一个实际的价格在网格里所处的位置。for($i=1;$i<=7;$i++)
{
$y=$i*25-10;
// 根据网格线的位置计算标注刻度的合适高度(纵坐标)。
$str=Number_Format($zzg-($i-1)/6*$bl,2,".",",");
// 计算每根刻度线对应的价格、并格式化该字符串。
$x=55-ImageFontWidth(2)*StrLen($str);
// 根据这个字符串将要占用的宽度,计算出合适的横坐标。
ImageString($im, 2,$x, $y,$str, $data);
// 写出这个字符串。
}$str=Number_Format($lzg,0,".",",");
ImageString($im,2,564,164,$str,$data);
$str=Number_Format($lzg/2,0,".",",");
ImageString($im,2,564,189,$str,$data);
// 由于写成交量的刻度只有两处,用循环写就不合算了。
// 如果数量比较多,也应该用循环。
// 由于一张K线图要画无数根小K线柱,所以,把画一根小K线柱写成函数
function kline($img,$kp,$zg,$zd,$sp,$cjl,$ii)
// 参数:$img 图象;$kp $zg $zd $sp 是开盘、最高、最低、收盘;
// $cjl 成交量;$ii 计数器,表示K线柱的序号。
{
global $bl,$zzd,$lzg;
// 声明该函数里用到的$bl,$zzd,$lzg三个变量是全局变量。
$h=150; // K线柱区域高度是 150。
$hh=200; // K线柱区域、成交量柱区域总高度是 200。
if($sp<$kp)
$linecolor = ImageColorAllocate($img,0,175,175);
// 如果收盘价低于开盘,是阴线,用青色
else
$linecolor = ImageColorAllocate($img,255,0,0);
// 否则为阳线,用红色。
$x=58+$ii*4;
// 根据K线柱序号计算横坐标。
$y1=20+$h-($kp-$zzd)/$bl*$h;
// 根据开盘价计算对应纵坐标。
$y2=20+$h-($sp-$zzd)/$bl*$h;
// 根据收盘价计算对应纵坐标。
$y3=20+$h-($zg-$zzd)/$bl*$h;
// 根据最高价计算对应纵坐标。
$y4=20+$h-($zd-$zzd)/$bl*$h;
// 根据最低价计算对应纵坐标。
$y5=20+$hh-$cjl/$lzg*($hh-$h);
// 根据成交量计算对应纵坐标。 if($y1<=$y2) ImageFilledRectangle($img,$x-1,$y1,$x+1,$y2,$linecolor);
else ImageFilledRectangle($img,$x-1,$y2,$x+1,$y1,$linecolor);
// 横坐标减1到加1,跨度为3。即绘宽度为3的小填充矩形。
// 高度和纵坐标则是由开盘、收盘价决定的。
// 经测试发现,这个函数必须是左上点坐标写在右下点坐标之前,
// 而非自动判断两点孰为左上,孰为右下。
ImageFilledRectangle($img,$x-1,$y5,$x+1,220,$linecolor);
// 根据成交量绘成交量柱体。
ImageLine($img,$x,$y3,$x,$y4,$linecolor);
// 根据最高价、最低价绘上下影线。
}// 试画一根。开盘 8.50 最高 8.88 最低 8.32 收盘 8.80 成交 6578手。
kline($im,8.50,8.88,8.32,8.80,6578,1);
// 再画一根。开盘 8.80 最高 9.50 最低 8.80 收盘 9.50 成交 8070手。
// 光头光脚的大阳线啊!
kline($im,8.80,9.50,8.80,9.50,8070,2);
// 再来一根阴线。开盘 9.80 最高 9.80 最低 8.90 收盘 9.06 成交 10070手。
// 赔了!昨天抛掉多好呀。
kline($im,9.80,9.80,8.90,9.06,10070,3);// ……ImagePNG($im);
ImageDestroy($im);
?>特别是这个for循环,$str=Number_Format($zzg-($i-1)/6*$bl,2,".",",");为什么要除6啊,字符串将要占用的宽度在c#里边用哪个函数啊?高人帮忙分析一下啊/////
for($i=1;$i<=7;$i++)
{
$y=$i*25-10;
// 根据网格线的位置计算标注刻度的合适高度(纵坐标)。
$str=Number_Format($zzg-($i-1)/6*$bl,2,".",",");
// 计算每根刻度线对应的价格、并格式化该字符串。
$x=55-ImageFontWidth(2)*StrLen($str);
// 根据这个字符串将要占用的宽度,计算出合适的横坐标。
ImageString($im, 2,$x, $y,$str, $data);
// 写出这个字符串。
}
number_format
格式化数字字符串。语法: string number_format(float number, int [decimals], string [dec_point], string [thousands_sep]);返回值: 字符串函数种类: 数学运算
内容说明
本函数用来将浮点参数 number 格式化。若没加参数 decimals 则返回的字符串只要整数部份,加了此参数才依参数指定的小数点位数返回。参数 dec_point 表示小数点的表示方式方法,默认值是 ".",若需要转换成其它的小数点就可以在这个参数改掉。参数 thousands_sep 为整数部份每三位的分隔符号,默认值是 ","。本函数最特别的地方就是参数数目,最少要有一个,也就是欲格式化的字符串;也可以有二个或者四个参数,但不能用三个参数。治募注意的是指定小数点的位数之后的数字直接舍弃,没有四舍五入的情形。
ImageFontWidth
取得字型的宽度。语法: int imagefontwidth(int font);传回值: 整数函式种类: 图形处理
内容说明
本函式用来取得指定字型的宽度,单位为像素 (pixel)。
ImageString
绘横式字符串。语法: int imagestring(int im, int font, int x, int y, string s, int col);返回值: 整数函数种类: 图形处理
内容说明
本函数在图片上绘出水平的横式字符串。参数 font 为字形,设为 1 到 5 表示使用默认字形。参数 x、y 为字符串起点坐标。字符串的内容放在参数 s 上。参数 col 表示字符串的颜色。
公司本来准备用C#开发
但是客户端需要下载.NETFRAMEWORK
很不方便
集成到安装包中又太大
结果搞成用VB开发了
http://www.stockbook.cn/php/index.php
看看,有全套源码相送