打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
打造山寨版的证券自动交易系统
经过一段时间的学习和摸索,制作了自动下单模块。把读取新浪或东方财富接口实时数据,编写策略,和自动下单三项结合一起,可能是个低风险稳定盈利模式,但也有可能进入自动赔光模式噢。
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、求一级句柄

listjb=[]
HWnd=0
HWnd=win32gui.FindWindow(None,'****网上交易***某某某')
listjb.append(HWnd)

print(listjb[0])

BBB = 0
list_tt = []

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)

print(listjb[7][18])
print(listjb[7][151])

4、核对

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,信息发送不了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SendMessage函数的常用消息及其应用大全
用VB来模拟一次菜单操作(其他应用程序)
Python对Windows程序窗口的操作
python实现模拟鼠标代码
【转】python win32api win32gui win32con 简单操作教程(窗口句柄 发送消息 常用方法 键盘输入)
一些WIN32编程的总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服