欢迎您光临博庭社区!

 找回密码
 立即注册
查看: 5384|回复: 9

A股自动交易实现思路 [复制链接]

Rank: 6Rank: 6

发表于 2013-12-7 20:51:40 |显示全部楼层
本帖最后由 fantasynew 于 2013-12-7 21:06 编辑

       因为没有开放A股交易接口,只能通过模拟方式操作。常用交易软件有通达信和同花顺,这两者都支持绝大部分券商,我在前两年也做过相关的自动化程序,证实模拟操作可行。尤其是通达信,采用的都是标准控件,容易实现自动化。同花顺的列表是自定义的,以我的水平读不出来,只能下单,没法得到反馈。
       下面探讨一下在金魔方上实现A股自动交易的思路:
       1,通过DLL扩展,能力很强的自己编写DLL模拟交易应该可以,但是对于非计算机专业出身的,这个难度太大。涉及到各种消息和结构体,查资料要到全英文的MSDN,不容易实现。好在我们有现成的DLL可以用,AHK英文官网提供了全功能的DLL,可惜资料太少,中文资料寥寥几句。
       在win7 64bit 旗舰版上测试,采用了64bit Unicode编码AHK.dll,提示“无法加载DLL”。可能和金魔方是32位程序有关系。换用32bit Ansi编码AHK.dll,编译通过,提示“引用DLL无法找到相应函数”。测试代码如下:

#MAINCHART
INPUT:
  N(20, 5, 100);
Extern 'AutoHotkey.dll' Void m_box(String str1,String str2);
我的指标:MA(CLOSE, N);
m_box('MsgBox','hello');

       找不到错误在哪里,也许金魔方开发者可以帮我找出来?
       2,第一条路走不通了,还有第二条,通过COM接口来调用AHK.dll。由于不支持VBA,无法直接调用,网上搜索得知VBS也可以调用COM组件,正准备尝试,发现我的电脑上无法注册AHK.dll。难道是64位系统的原因?没法注册怎么使用啊?
       3,绝望之中想起应该还有第三条路,自己用的开发工具可以生成ActiveX EXE。也是COM接口的一种,缺点是要常驻内存。可是这一步也没搞定,惭愧啊。毕竟不是学计算机的,一个问题能让我百度成几十个问题,直到脑子撑不下了。
       4,还是找出了方法。通过数据库或者ini来传递数据,另外开发模拟软件来轮询。到金魔方里找了一下,没有数据库函数,但是有几个输出文本的函数,这样我们就可以打通A股自动交易的整条道路了。美中不足的是,没有读取文本文件的函数。有个GETPROFILEVALUE,帮助写的很模糊,看不懂到底是干什么的。

       晚饭后思考发现了前三种方法还存在一个较大的问题,如果代码可以实现的话。就是公式是顺序执行的,需要等待上一步的返回结果。放出一个下单指令后,如果没有及时完成全部动作,公式系统就相当于变相停止工作了。如果能异步执行就好了......可惜这是不可能的,真的能异步执行了,其他DLL公式的运行结果可想而知。
      第四个思路不存在等待执行结果的问题,因为可以用多线程来异步执行模拟下单过程,另一边还可以继续监控输出文本,有什么问题可能还来得及终止下单线程。缺点也是好明显的,通过文本文件交换数据,硬盘的延迟在10ms量级,读写要乘以2,对于A股来说,尚可接受。最大的开销是轮询,电脑不好的速度会大受影响。

      写了这些,希望能抛砖引玉,得到更好的解决思路。也希望金魔方能推出A股模拟交易插件,专业人员写的,当然会更好。

使用道具 举报

Rank: 2

发表于 2013-12-8 10:59:47 |显示全部楼层
给监控端发送消息
SendMessage (strMessage, toWho, type)
参数:
strMessage: 信息内容
toWho: 可选,发给谁,没实现
type: 可选,类型,没实现

例1:
SendMessage('来自金魔方的消息');
把这个完善一下,能发给外部程序就好了,比如我有个下单软件,他可以把消息发过来
发给谁 外部程序写到金魔方的配置句柄或名称,金魔方自己有个读配置的函数可以读出来
发送内容 如“买,600008,10.25,300“
方法二:也可以直接进程间通信,金魔方和外部程序先把各自句柄写到一个共用的配置文件中,然后各自读取,实现相互通信。
信息类型中以各种代码标识所需任务,如1,取可用资金。2,取成交情况。双方各自依规则处理并发送结果。这样实现自动控制就比较方便了。

使用道具 举报

Rank: 6Rank: 6

发表于 2013-12-8 11:49:09 |显示全部楼层
本帖最后由 fantasynew 于 2013-12-8 14:21 编辑
小飞龙 发表于 2013-12-8 10:59
给监控端发送消息
SendMessage (strMessage, toWho, type)
参数:

想法不错,存在几个问题:
1,此sendmessage非彼sendmessage,前者是金魔方和监控端通信用,后者是系统API;
2,即使可以发给外部程序,也必须外部程序有处理对应消息的机制,否则会导致程序崩溃,这点我已经试验过;
3,用postmessage会更好些,是异步的,无需等待消息处理完毕;
4,如果通过控件消息来控制外部程序,现有数据类型无法满足,金魔方无法处理指针和结构体;
5,有些功能不是控件消息可以解决的,必须注入进程才能控制,按键精灵那样的模拟点击不考虑,精度无法保证,一般用控件操作稳定性高;
6,进程间通信有zeroMQ等,处理起来对计算机知识要求较多,学习成本大;
7,如果金魔方开放dll或者COM接口,由外部程序来获取金魔方内部数据,会方便的多。
第七条可能性不大,因为和商业利益有关



使用道具 举报

Rank: 6Rank: 6

发表于 2013-12-9 19:44:40 |显示全部楼层
新思路:
1、Fix、CTP接口。国信证券已经开放Fix接口,个人可以申请。华宝证券,兴业证券在测试CTP接口。不过好像只有华宝证券用CTP做次系统。金魔方开发人员可以考虑一下把这些接口做进去。或者技术高的自己编程来实现。
2、网页提交。从网上交易界面发起post,数据量较小。
3,强制调用交易软件内部函数。网上有人做出来劫持通达信下单。

使用道具 举报

Rank: 6Rank: 6

发表于 2013-12-9 21:21:21 |显示全部楼层
和网上逆向下单软件的人聊了一下,一个API接口2000,限制单账户

使用道具 举报

Rank: 6Rank: 6

发表于 2013-12-9 21:41:42 |显示全部楼层
网页自动登录已经搞定,下单部分还在测试

使用道具 举报

Rank: 6Rank: 6

发表于 2013-12-11 05:15:22 |显示全部楼层
希望早日获得成功

使用道具 举报

Rank: 6Rank: 6

发表于 2013-12-12 14:02:26 |显示全部楼层
自动交易系统很牛逼啊。顶帖学习。

使用道具 举报

Rank: 3Rank: 3

发表于 2014-3-21 00:15:17 |显示全部楼层
赞一个

使用道具 举报

Rank: 3Rank: 3

发表于 2014-9-9 11:39:47 |显示全部楼层
先顶后下,拿了就跑不太好

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

bottom

Archiver|http://www.patiosoft.com

GMT+8, 2017-12-17 08:57 , Processed in 0.067440 second(s), 9 queries .

花生网 Copyrigh©2012

和讯信息科技有限公司 ALL Rights Reserved 版权所有 复制必究

回顶部