下面的程序使用VB+API
常用的函数:
1、打开下单软件:
ShellExecute 0, "open", TradeModulePath, "", "", SW_NORMAL
2、寻找已经打开了的下单程序窗口
SearchChildHWND(GetDesktopWindow(), "用户登录", hwnd)
3、获取对话框上的TEXTBOX等控件的内容:
GetDlgItemText(hwnd, 2, str, 255)
4、模拟键盘操作
SetFocusAPI hwnd
SendStringKey "%Y" '回应是
(输入股票代码、价位、点击确定、关闭窗口等操作都可以用这个来实现)
另外,查找对话框的资源ID及控件ID,可以使用eXeScope工具来实现。
而且这个工具可以给那些没有键盘快捷键的按钮、菜单加上快捷键。方法是将它们的标题加上&N,期中N就是键盘ALT+N的意思。
这种思路可能被已经有了券商接口规范的兄弟们嘲笑。实在是没办法。被逼出来的哇。如果有兄弟可怜可怜的话,施舍一份券商接口规范,小弟将非常感谢。
国内的券商行业是一个占据了优势资源因而故步自封且不思进取的行业,业务部门的操作理念陈旧落后,对信息技术基本处于无知和幼稚的状态(我说的是整个行业,特别是所谓的大券商),软件商给他什么他就用什么,不存在需求引导供给的可能性。技术部门承担着重大的系统稳定责任,没有兴趣和动力来推进系统功能的升级。一个通常的反应(对类似开放交易接口的征询问题)就是:出了问题(有什么样的法律后果)怎么办?另外证券行业长期封闭经营,不像期货行业有外盘操作会即时跟踪国外业内动向,期货交易因而愿意采用新的技术方法。所以从这个行业目前你基本上可以绝望直接获取接口的可能性。如果你是机构客户,不妨尝试从中金、中信这种明白你在干什么的券商处获得帮助,因为不光是接口本身,应用环境的支持也是开发所必要的。
如果对开发本身有技术方面的支持需求,可以考虑两种途径。一种是与柜台软件开发商取得联系签约,成为独立第三方。另一种是从民间找有过相关经验的程序员,国内如CSDN这样的开发交流社区上不时能见到有专题讨论,搜一下外围程序、金证、恒生等也许能有收获。
另外,FIX协议也是一种可能的突破口。部分柜台系统供应商已有现成的FIX产品,有基金、QFII客户的部分券商有采购(如中信),你也可以尝试一下。
完全没有支持的独立开发目前看应存在三种方式:第一、网上交易软件数据包嗅探破解(已实现);第二、WEB交易网页翻译(已实现);第三、网上交易软件的APIHOOK(BLACKHORSE提出,你本帖子具体讨论的)。由于交易环境各异,不管哪一种方式的实现编码都有券商针对性,当然原理是通用的。此外,上述三种方式都基于网上交易环境,不需要券商配合。营业部交易环境下的交易接口软件开发则必须获得券商配合。
我目前正在与开户的券商探讨开放交易接口的问题,如有进展,则在本栏通报。
但此技术还存在一个重大的隐患,就是交易客户端的稳定性问题。我在不同的机器上用不同券商的天网下单客户端,都曾发现天网有时在下单动作后不能迅速返回,软件似乎被挂起。不知其他朋友是否有类似经历。
另外,下单软件一般都有确认提示,这会影响自动交易的效率,也需要寻求解决方法(谁知道哪个客户端可以关闭确认提示?)。
此技术还存在难以通用的缺点。一个公司开发的同样的下单软件,不同的券商用的是不同的版本。查找控件ID的结果可能也不同,必须做手工配置。
除eXeScope工具以外,VS2003自带的spy++也可以做控件和资源ID的查询。
关于自动接收是这样的:分析家、飞狐使用的数据接口规范都是一样的。我们要做的工作其实就是写一个我们自己的分析沈阳做网站家来接收数据。
接收引擎(比如我用网络闪电,因为它收费低)。负责把数据从网络上获取回来,然后再以前面说的接口约定传送到分析软件(分析家)里面。
接口规范网络上是公开的。你如果找不到我可以给你。
但是这个规范是for VC的。所以你必须要使用VC来开发接收程序。如果非要用VB的话,理论上是可行的,但是实践起来可能会非常麻烦。估计没人这样做。
一般来说,我们做的接收程序A和数据引擎B之间的交互方式是这样的:
A程序启动后,加载B的dll到内存,然后A调用B的初始化函数来启动引擎
,使得引擎就进入了从互联网上获取数据的状态。
之后,A还要再调用B的Dll的一个注册函数,这个注册函数的作用是告诉B,一旦获取了新的数据之后,应该发消息通知谁。所以这个注册函数的一个入口就是A的某个窗口的HWND。这样,B一旦有了新数据,就向这个HWnd发送消息。
于是A程序就以消息的方式得到了“有新数据”的通知。
B发到A的消息参数中含带了数据的存放地址。从而,A知道该从什么地方获取数据了。
至于数据的存储数据结构,这些都在规范中约定好了。规范中还写了一个A的消息接收范例。应该一看就明白
总之需要你对Windwos、VC相对比较熟悉。
另外,你提到了想要把数据直接存储为数据库的格式。我建议不要这样干。因为实时的数据量非常大,速度也非常快,除非你只对少数的股票感兴趣,否则如果你想要处理所有的股票实时数据的话,恐怕数据库的速度会跟不上,
另外,从静态角度讲,如果历史数据也以数据库的方式存储,恐怕体积会异常庞大。会给后续的使用带来速度上的麻烦。这恐怕也是现在流行软件(如分析家、飞狐)在数据存储方式里面很少有直接用数据库来存储数据的原因。