股票交易接口都是用python语言比较多吗?

最近看到有人问,哪些写股票交易接口的,是不是都用Python比较多呢?为什么python这个语言会这么受欢迎?我们来说说这个问题。

首先,大家要搞清楚,并不是所有的股票交易接口都用Python,也有很多用C++、matlab以及R等语言的。只是Python 作为开放性、简洁性更好的语言,能满足大部分投研需求,C++更接近底层,具备更好性能和低延时,偏向高频策略,Matlab 则统计应用较广。至于Python为何在量化中广泛使用,主要是以下几点:

1. 容易上手,非常适合编程初学者作为启蒙的语言。
2. 语法简洁易懂,有点类似英语的表达。我认为,这是未来所有编程语言的雏形。
3. Python还有个昵称,叫“胶水语言”,是说Python可以很方便地调用别的语言(如C++、Java)编写的功能模块,将他们有机结合在一起形成更高效的新程序。
4. 丰富、强大的库支持是Python的坚强后盾。

就像是这款股票交易接口,也兼容Python,不过做量化的,其实还是更推荐c++的,下面是举例:

1. # -*- coding: utf-8 -*-
2.	
3. """
4.	
5. 此 DLL 接口为 32 位,用 python 解释器调用此接口的时候必须要用 python32 位解释器
6.	
7. 1.用 32 位系统的直接安装 32 位 python 解释器
8. 2.用 64 位系统的要设置兼容 32 位 python 解释器	
9.
10. """	
11.
12. from ctypes import *	
13.
14.	
15. # 填入相对路径加载 DLL
16. Dll = windll.LoadLibrary(".\\MetaTrade.dll")
17.
18. # DLL 初始化,只调用一次
19. # 初始化返回值<=0,为初始化失败,同时不能够掉用其他功能否则会出错
20. Dll.Init()
21.
22. # 返回结果和返回错误分配空间,结果信息空间为 1024*1024 字节,错误信息空间为 256 字节
23. # 要使用批量功能应创建多个 Result 和 ErrorInfo 空间
24. Result = create_string_buffer(1024 * 1024)
25. ErrorInfo = create_string_buffer(256)
26.
27. # 登入交易账户
28. # 参数是 str 类型的必须转换成 bytes 类型,int 类型不用转换,某些参数可以为空
29. Ip = b'111.222.333.444'
30. Port = 1234
31. Version = b''
32. YyBid = 0
33. Account = b'123456789.C'
34. TradeAccount = b'123456789'
35. JyPassword = b'123456'
36. TxPassword = b''
37.
38. # 按位置传参,注意 C 的类型
39. # 要使用批量功能应要创建多个 ClientId
40. ClientId = Dll.Logon(c_char_p(Ip), c_int(Port), c_char_p(Version),
41.	c_int(YyBid), c_char_p(Account), c_char_p(TradeAccount),
42.	c_char_p(JyPassword), c_char_p(TxPassword), ErrorInfo)
43.
44. # 登入成功 ClientId 返回结果为 1,如果返回结果为-1 表示登入失败,可以调 ErrorInfo 查看错误信息
45. print(ErrorInfo.value.decode('gbk'))
46.
47. # 查询各类交易数据
48. # ErrorInfo 为空则返回结果成功请调 Result 查看结果,反之返回结果失败请调 ErrorInfo 查看错误信息
49. Dll.QueryData(ClientId, c_int(Category), Result, ErrorInfo)
50. print(Result.value.decode('gbk'))
51.
52. # 单账户批量查询各类交易数据
53. # 要批量查询多类数据Result 和ErrorInfo 必须建立相同数量,可用for 循环建立,Count 参数必须等于查询数据列表的长
度,反之内存报错
54. CategoryList = [Category1, Category2]
55. CategoryArray = (c_int * len(CategoryList))(*CategoryList)
56. ResultList = [cast(Result1, c_char_p), cast(Result2, c_char_p)]
57. ResultArray = (c_char_p * len(ResultList))(*ResultList)
58. ErrorInfoList = [cast(ErrorInfo1, c_char_p), cast(ErrorInfo2, c_char_p)]
59. ErrorInfoArray = (c_char_p * len(ErrorInfoList))(*ErrorInfoList)
60. Count = len(CategoryList)
61.
62. Dll.QueryDatas(ClientId, CategoryArray, c_int(Count), ResultArray, ErrorInfoArray)

不过,无论是什么样的编程语言,我们更应该关注的是交易接口本身的流畅度是否过关,如果经常丢包的,用起来也会挺糟心的。

猜你喜欢

转载自blog.csdn.net/qq1841085904/article/details/127888270
今日推荐