模拟键鼠的自动下单DIY

Discussion in 'General Topics on Software and Data' started by netf, Oct 5, 2005.

  1. 很难找到券商的网络下单接口规范,于是不得已自己动手写代码,模拟键盘和鼠标的操作来实现程序下单。
    下面的程序使用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的意思。

    这种思路可能被已经有了券商接口规范的兄弟们嘲笑。实在是没办法。被逼出来的哇。如果有兄弟可怜可怜的话,施舍一份券商接口规范,小弟将非常感谢。
    :)
     
  2. 国内券商的下单接口规范在业内称为外围系统或外围程序(直接对券商说规范什么的,他可能不懂),由柜台软件服务商如金证、恒生等向券商有偿提供,供券商自身开发内部管理软件用,主要是信息查询及风险控制等用途。一般券商不直接做下单软件,如果有需求,例如ETF套利软件,则多外包给原柜台软件提供商或独立第三方软件商。券商和独立第三方软件商一般都与柜台软件提供商签有保密协议,不能将接口规范向外泄露,所以一般无法获得有关资料。

    国内的券商行业是一个占据了优势资源因而故步自封且不思进取的行业,业务部门的操作理念陈旧落后,对信息技术基本处于无知和幼稚的状态(我说的是整个行业,特别是所谓的大券商),软件商给他什么他就用什么,不存在需求引导供给的可能性。技术部门承担着重大的系统稳定责任,没有兴趣和动力来推进系统功能的升级。一个通常的反应(对类似开放交易接口的征询问题)就是:出了问题(有什么样的法律后果)怎么办?另外证券行业长期封闭经营,不像期货行业有外盘操作会即时跟踪国外业内动向,期货交易因而愿意采用新的技术方法。所以从这个行业目前你基本上可以绝望直接获取接口的可能性。如果你是机构客户,不妨尝试从中金、中信这种明白你在干什么的券商处获得帮助,因为不光是接口本身,应用环境的支持也是开发所必要的。

    如果对开发本身有技术方面的支持需求,可以考虑两种途径。一种是与柜台软件开发商取得联系签约,成为独立第三方。另一种是从民间找有过相关经验的程序员,国内如CSDN这样的开发交流社区上不时能见到有专题讨论,搜一下外围程序、金证、恒生等也许能有收获。

    另外,FIX协议也是一种可能的突破口。部分柜台系统供应商已有现成的FIX产品,有基金、QFII客户的部分券商有采购(如中信),你也可以尝试一下。

    完全没有支持的独立开发目前看应存在三种方式:第一、网上交易软件数据包嗅探破解(已实现);第二、WEB交易网页翻译(已实现);第三、网上交易软件的API HOOK(BLACKHORSE提出,你本帖子具体讨论的)。由于交易环境各异,不管哪一种方式的实现编码都有券商针对性,当然原理是通用的。此外,上述三种方式都基于网上交易环境,不需要券商配合。营业部交易环境下的交易接口软件开发则必须获得券商配合。

    我目前正在与开户的券商探讨开放交易接口的问题,如有进展,则在本栏通报。
     

  3. 讨论的非常专业,行业中人就是不一样。
    据说证券行业还在用Novell的Netware 3.11 一个和Win3.1 差不多同时期的网络操作系统。据说这个操作系统做的很稳定,功能也够,所以没有太多技术上升级的需要,不像微软的操作系统做出来一堆bug,让人不断的想升级。可是产品做的太好对公司没什么好处,Novell的新产品就少人买了 :)
    我觉得国内券商保守的另一个原因是,股市低迷了这么些年,他们的经济状况都不大好,好多都裁员关营业厅,甚至被重组了,这方面当然减少创新性的投资了。
     
  4. vb也能写出这样的程序,netf兄高手也,佩服佩服!有无稍微完整一些的代码给我们学习学习?
     
  5. tom_sh兄看来对证券行业的接口方法了若指掌啊,请教老兄开户的券商是哪一家,用的是什么柜台软件?
    我对证券不太了解,不知道证券方面比期货还要落后,期货上主要是由于垄断而限制了技术的发展,上海期货交易所其实早就弄出了类似FIX的协议,只是推行有阻力,其他两个期货交易所不配合,证监会也不太管这方面的事情。只能期望国外同行的进入,可能会促进国内期货、证券技术和接口方面的发展了。
     
  6. netf 看来是有很深厚的编程经验,我随有此想法却一直未能实现。在提供一种思路供你参考,通过程序截获下单软件下单是的数据包,分析其中的下单的数据然后再用程序给服务器发送自己的数据包来完成下单。 相关应用:在进行一些游戏比赛时曾用类似的方法,提高自己的成绩,该方法通过。
     
  7. 受黑马与NETF启发,用C#做模拟键鼠下单,有关技术已在天网网上交易客户端测试通过,除下单动作外,部分数据(基于文本框控件的)也可获取,如五档行情、资金余额,卖出股票的可用余额等。撤单、查询股票明细等基于列表项控件的信息还不能提取。

    但此技术还存在一个重大的隐患,就是交易客户端的稳定性问题。我在不同的机器上用不同券商的天网下单客户端,都曾发现天网有时在下单动作后不能迅速返回,软件似乎被挂起。不知其他朋友是否有类似经历。

    另外,下单软件一般都有确认提示,这会影响自动交易的效率,也需要寻求解决方法(谁知道哪个客户端可以关闭确认提示?)。

    此技术还存在难以通用的缺点。一个公司开发的同样的下单软件,不同的券商用的是不同的版本。查找控件ID的结果可能也不同,必须做手工配置。

    除eXeScope工具以外,VS2003自带的spy++也可以做控件和资源ID的查询。
     
  8. ok 了。
    对于一些关键技术。无保留奉献。
     
  9. 我想要谢谢
     
  10. 嘿嘿,俺也很感兴趣。jerryhrj@21cn.com
     
  11. 给坛友的PM,贴出来给可能有用的朋友。

    关于自动接收是这样的:分析家、飞狐使用的数据接口规范都是一样的。我们要做的工作其实就是写一个我们自己的分析家来接收数据。

    接收引擎(比如我用网络闪电,因为它收费低)。负责把数据从网络上获取回来,然后再以前面说的接口约定传送到分析软件(分析家)里面。

    接口规范网络上是公开的。你如果找不到我可以给你。
    但是这个规范是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相对比较熟悉。

    另外,你提到了想要把数据直接存储为数据库的格式。我建议不要这样干。因为实时的数据量非常大,速度也非常快,除非你只对少数的股票感兴趣,否则如果你想要处理所有的股票实时数据的话,恐怕数据库的速度会跟不上,
    另外,从静态角度讲,如果历史数据也以数据库的方式存储,恐怕体积会异常庞大。会给后续的使用带来速度上的麻烦。这恐怕也是现在流行软件(如分析家、飞狐)在数据存储方式里面很少有直接用数据库来存储数据的原因。
     
  12. 希望能给点资料,5astock@163.com,谢谢
     
  13. jml_wng@163.com
    Thanks!
     
  14. 请给我发一份,thinks :)
    robin121@tom.com
     
  15. 也请给我一份来学习一下,谢谢了
    mawh@sohu.com
     
  16. 关于数据存储好像GS做的不错,大量的数据包括Tick占用空间却不大,不知道他们是如何做到的。以前考虑这个问题:一个价格数据一般情况下是要占用4个字节的,所以一条记录一般都在30个字节以上。但是如果只保留变动量那么或许只需要2个甚至1个字节就够了,这样可以大大减少存储空间,而现在计算机的速度完全可以弥补多这么一步计算的时间
     
  17. 有些朋友PM我,想要得到下单方面的代码。
    我在这里申明一下,如果是打算自己动手做程序的,那么我会对每个具体问题提供帮助。但是请不要向我索要整篇代码,请给于体谅。
     
  18. 我也想了解了解!谢谢!

    reeker@126.com