打造山寨版的证券自动交易系统
经过一段时间的学习和摸索,制作了自动下单模块。把读取新浪或东方财富接口实时数据,编写策略,和自动下单三项结合一起,可能是个低风险稳定盈利模式,但也有可能进入自动赔光模式噢。
1、打开证券软件,用“按键精灵”等可以查询句柄的软件查询输入证券代码该文本框、数量文本框、下单按钮等句柄值。句柄可简单理解为WINDOWS对窗口控件的临时编号(软件关闭后重启,句柄值要重新查)。句柄也可以用程序遍历,写在后面。
2、打开excel行情表并实时更新,可以是股票,或者是期权、期货、可转债等衍生品。网上有模板,我也补充了一部分,详见https://www.jisilu.cn/question/352388
3、当满足策略触发条件时,自动进入买入或卖出,调用sendmessage向证券软件的相关句柄发送信息(填写代码、数量,模拟鼠标点击等),完成自动下单。
VBA 代码示例
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal TofMilliSeconds As Long)
Const WM_LBUTTONDOWN = &H201 '鼠标按下
Const WM_LBUTTONUP = &H202 '鼠标弹出
Const WM_SETTEXT = &HC '发送代码到文本框
Sub test0501()
Dim AWnd As Long, BWnd As Long, CWnd As Long, DWnd As Long, a$, b$, c$
AWnd = Range("C2") '填入证券代码句柄值
BWnd = Range("C3") '填价格框句柄值
Wnd = Range("C4") '填数量框句柄值
DWnd = Range("C5")
a = Range("D2") '证券代码
b = Range("D3") '价格
c = Range("如何善用交易工具打造交易系统 D4") '股数
SendMessage AWnd, WM_SETTEXT, 0, ByVal a '填入证券代码
Sleep 200
SendMessage BWnd, WM_SETTEXT, 0, ByVal b '输入价格
Sleep 200
SendMessage CWnd, WM_SETTEXT, 0, ByVal c '输入股数
Sleep 200
SendMessage DWnd, WM_LBUTTONDOWN, 0&, 0& '按下单按钮
SendMessage DWnd, WM_LBUTTONUP, 0&, 0&
End Sub
PYTHON 代码示例,须先安装pywin32模块
import win32con,win32gui
import time
t1=264270#代码句柄值
t2=460854#价格句柄值
t3=328896#数量句柄值
t4=133236#下单句柄值
a='501050'#股票代码
b='1.1'#价格
c='100'#数量
win32gui.SendMessage(t1,win32con.WM_SETTEXT,None,a)
time.sleep(0.1)
win32gui.SendMessage(t2,win32con.WM_SETTEXT,None,b)
time.sleep(0.1)
win32gui.SendMessage(t3,win32con.WM_SETTEXT,None,c)
time.sleep(0.1)
win32gui.PostMessage(t4, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, 0)
win32gui.PostMessage(t4, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, 0)
句柄遍历:
用FindWindow查到券商软件的顶层句柄,然后用FindWindowEx查找下一级所有的句柄。层层推进。从理论上讲,应该用深搜或宽搜做更好,现在不会了。我用多层循环了。
每次打开券商软件,句柄值会变,结构不变。遍历句柄后,以我的国信证券为例,取第十级的9,10,13,16。即二维数组中的arrjb(如何善用交易工具打造交易系统 10,9)等可做买入操作。
python句柄遍历示例
import win32api,win32con,win32gui
import time
1、求一级句柄
print(listjb[0])
2、求二级句柄
for i in range (10000):
BBB = win32gui.FindWindowEx(listjb[0], BBB, None, None)
#print(BBB)
if BBB > 0:
list_tt.append(BBB)
else:
break
listjb.append(list_tt)
print(listjb[1])
3、求三级及以上句柄
for i in range(2,11):#第i+1级句柄
list_tt=[]
for j in listjb[i-1]:#遍历父句柄
for m in range (10000):
BBB = win32gui.FindWindowEx(j, BBB, None, None)
if BBB > 0:
list_tt.append(如何善用交易工具打造交易系统 如何善用交易工具打造交易系统 BBB)
else:
break
listjb.append(list_tt)
print(listjb)
aa 如何善用交易工具打造交易系统 = win32gui.FindWindowEx(listjb[6][5], 0, None, "买入下单")
bb = win32gui.FindWindowEx(listjb[6][6], 0, None, "卖出下单") 如何善用交易工具打造交易系统
if aa == 0 or bb == 0:
print("句柄可能有误")
if aa !=listjb[7][18] or bb != listjb[7][151]:
print("句柄可能有误")
附注:
1、券商软件默认设置一般有个下单确认,是自动下单的障碍,在设置中将勾勾取消即可,如果勾不掉,参照上面的FindWindow和FindWindowEx和sendmessage机器自动点掉。
2、下单模块我贴出来了,有点VBA基础的稍作修改就可以用了。
3、如果是代码小白或调试不成功,我微信号luckyszt,或加我QQ415216616为好友后,申请远程协助。 如何善用交易工具打造交易系统
4、不是每个券商软件都能搞定,经实战,国信 广发 银河行,华宝、中航不行,华宝和中航中的证券代码输入框的句柄类型是 Afxwnd42,不是eidt,信息发送不了。
通达信实现自动交易系统
QMACD宽客相对论 于 2019-05-24 17:51:15 发布 49027 收藏 61
StockOrder.exe 主程序升级一般只需替换这个文件Order.dll 股票池公式下单DLL需要放到相关软件的对应目录升级也要注意替换放到那些软件目录下的Order.dllStockOrderPanel.dll 这是和金魔方联动的专用文件,其他不需要帮助.doc 帮助文档可能没及时更新股票池使用需要参考最新的公式例子为准大智慧通达信股票池或飞狐等公式下单才需要的文件 目录包含股票池,公式下单的例子公式参考这里为准大智慧股票池例子 目录把里面的文件复制到大智慧 USERDATA\Pool 下就可以运行例子
12-06 1万+
05-07 1813
1、要善用spy++ 2、不同的控件主要靠GetDlgCtrlID去区分 3、要获得另一个进程的焦点窗口(GetFocus)需要调用AttachThreadInput 4、尽量少用keybd_event模拟键盘输入,主要是该函数不能保证按键消息一定能被特定进程接收到。取而代之的是SendMessage(hwnd, WM_IME_CHAR, . )。而模拟回车按下要用PostM.
11-03 2034
除了使用股票池自动交易外,也可以使用预警指标公式自动下单或者图表自动交易来实现股票程序化交易。这一节先介绍利用股票池来实现自动化交易和实现股票程序化交易。股票池自动交易图文1.绑定 order.dll要利用助手给通达信股票池下单,第一步需要绑定 如何善用交易工具打造交易系统 order.dll。把 order.dll 复制到 通达信目录 T0002\dlls 下面,调出公式管理器,按下图提示绑定dll。2.建立股票池.
12-11 7373
1、要善用spy++ 2、不同的控件主要靠GetDlgCtrlID去区分 3、要获得另一个进程的焦点窗口(GetFocus)需要调用AttachThreadInput 4、尽量少用keybd_event模拟键盘输入,主要是该函数不能保证按键消息一定能被特定进程接收到。取而代之的是SendMessage(hwnd, WM_IME_CHAR, . )。而模拟回车按下要用PostMessage .
10-28 528
点击蓝字关注我们把Sec塞进DevOps不只是技术与工具变更那么简单,更重要的是思维方式和内部流程的转变,推进DevSecOps的关键原则是:别给人添麻烦。《Gartner 2017研究报告:DevSecOps应当做好的十件事》和《Gartner 2019研究报告:DevSecOps应当做好的十二件事》两篇研究报告中都对成功实施DevSecOps进行了研究。两篇报告一致认为实施DevSe.
07-22 1373
07-25 325
12-06 1806
11-24 4万+
09-26 2万+
我们主要是通过设计通通量化软件,来学习python编程,另外也是一个量化软件基础功能学习开发的过程. 我的文章给出的都是经过自己学习总结的最终代码.读者可以通过学习来掌握编写量化软件的思路和程序. 前面我们写了BOLL指标和双均线策略,很多读者感觉用python改写通达信大智慧公式指标非常不方便.能不能直接使用?或者简单改写就能使用呢? 我经过学习尝试,认为完全可以。 我们这篇文章以通达信KDJ指.
05-12 465
02-11 1469
大体了解了Backtrader的运行原理后,尝试把一个通达信的交易策略改编为backtrader策略,并测试一下交易时间是否与通达信中出现的交易时间一致。如果一致,说明改写的策略有效。 通达信中有这样一个简单的“MA交易”指标: 可以在通达信主界面按ctrl+F——F3查找“交易”找到这个指标。 如何善用交易工具打造交易系统 指标中这两行: MA1:=MA(CLOSE,SHORT); MA2:=MA(CLOSE,LONG); 修改为Backtrader代码: # 收盘价的 para_short 日..
12-29 9589
如何从零开始构建量化交易系统?
策略模型:策略模型可以说是整个量化模型最核心的部分,决定了整个量化模型的盈利能力。策略模型主要分为两大方向:一个是基于技术面,一个是基于基本面。技术层面就是指各类技术指标加形态的组合策略,比如KDJ、MACD等。基本面主要根据公司的财务数据,分析后得到的一些数据指标,比如:PE(市盈率)、持续增长率等。由于技术面和基本面的指标多了去了,配合就能产生N种组合,不同组合的盈利效果都不一样。所以策略部分应该所有量化之人,穷尽一生所追求的。
风险模型:通过风险控制提高量化模型的盈利能力。怎么提高?说白了就是规避损失。风险模型主要有:数据错误,个股风险,市场风险等内部风险,外部风险一般不太考虑。
交易成本模型:策略模型在于盈利,风险模型在于规避损失,交易成本模型则在于控制成本,使得整个量化模型的盈利最大化。
投资组合构建模型:投资组合构建模型在于构建一个能创造最大盈利的投资组合。
仓位管理模型:仓位管理,简单说就是买多买少的问题。配合风险模型,动态的调整仓位。
执行模型:见信号就操作。
因此,目前我是从零开始构建量化交易系统,宗旨是低成本低门槛,系统几乎全部选用开源第三方软件及模块, 采用简易快搭(争取5天内)的跨平台web框架:
- 基础级:Tradingview作为核心金融量化平台框架,python flask 作为 web框架。参考 :阿岛格专栏:低门槛搭建个人量化平台, 其中基本框架可以参考:第二天:基础框架
- 进阶级:搭建一个自己的Ubuntu Linux 环境及Python语言, 平台采样B/S构架,交易服务器用window系统)。参见:阿岛格专栏:基于人工智能的量化投资 ,其中基本框架和软硬件目录可以参考: (3)软/硬件准备
基础版(低门槛搭建个人量化平台)的目的是,提供方法、共同探讨,一步一步让初入量化的朋友,白嫖免费的库和框架,快速搭建并集成属于自己的、基础级别量化分析框架。可以满足各种不同金融市场和资产类别,包括股票、债券、期货、股指期货、黄金、原油、数字货币等等,提供专业级别的量化分析指标,并且可以根据自己需求和要求,完全自主过滤、显示各式的专业图表。
由于捕捉市场信息的瞬息万变很重要,数据的实时性、准确性和易用性是量化平台的根本。 该量化平台比较了几种实时数据的接入方法,最后考虑了分钟级别的行情实时数据接入,而摈弃了秒级数据。这是可虑必须低成本入门级平台的工作效率与硬件负载的平衡结果。
学习搭建AI量化系统,我自己是先从scikit-learn, theano,keras,到tensorflow的。现在看来有点走弯路,实际上可以从python,直接到tensorflow/pytorch更快速高效些(不清楚的再回看scikit-learn)。当时是看下面这本入门python量化的。之后看tensorflow。
如何善用交易工具打造交易系统
另外雪峰的《股市技术分析实战技法》其实也谈得很多而且很实在。国外引进的书有范·撒凯的《通向金融王国的自由之路》,这本书主要从趋势跟踪系统的角度来谈,不是很全面。遗憾的是amazon上排名靠前的几本国外交易系统经典著作都没有被翻译进来,如《Design, Testing, and Optimization of Trading Systems》这样的好书。