[ahk]通达信股票交易软件持仓数据获取--(招商证券、中银国际、通达信官方版等测试可用)

新版通达信持仓获取方式,得启动通达信,点击资金股份,再按热键F9,脚本如下,运行环境请去ahk英文官网下载 Current Version。

[ahk]通达信股票交易软件持仓数据获取--(招商证券、中银国际、通达信官方版等测试可用)_第1张图片


; Tested with AHK v1.1.31.00 Unicode 32/64-bit on Windows XP/7/10
/*
	------------------------------------------------------
	Filename:				获取通达信持仓.ahk
	Description:			在通达信持仓界面,按 F9 可以获取持仓数据,本脚本仅做演示用,如有定制需求,请与作者联系。
	Version:				2020年2月29日
	Created By:				YuKuan.Liu
	Author Weixin:			sunwind1576157
	Type:					AutoHotkey
	URL:                    https://blog.csdn.net/liuyukuan/article/details/49722207
	------------------------------------------------------
	TODO:
		+ 切换树状菜单到资金股份.
	------------------------------------------------------
*/
CoordMode,Mouse,Window

F9::
PostMessage,0x111,14023,0,SysListView321,ahk_class TdxW_MainFrame_Class  ;输出持仓数据
;等待输出设置窗口
loop
{
	Sleep,50
	if A_Index >100
		Reload
}until WinExist("输出") 
;~ WinWait, 输出, , 3

loop
{
	Sleep,100
	ControlGet, isEnable, Enabled,,Edit1,输出
	ControlClick,x60 y60,输出
	ControlClick,Button1,输出
	if A_Index >100
		Reload
}until (isEnable=1)

;获取输出路径
ControlGetText,file,Edit1,输出
;~ ControlSend,,{Enter},输出
ControlSend,,{Enter},输出

filename:=GetFilename(File)


;关闭弹出的文件窗口
loop
{
	Sleep,50
	if A_Index >100
		Reload
}until WinExist(filename)
;~ WinWait, %filename%, , 3
WinClose,% filename

;解析持仓数据
fileparse(File)
return

;~ SplitPath, InputVar [, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive]
GetFilename(txt) 
{
	;~ SplitPath, txt, o  	;OutFileName
	SplitPath, txt, ,,,o  	;OutNameNoExt
	return o
}
fileparse(file)
{
	FileRead,oFile, %file%
	FileContents:=StrReplace(oFile,"  ","`t")
	
	mark:=0
	Loop,parse,FileContents, `n, `r 
	{
		;~ FileDelete,%file%
		LineNumber := A_Index
		;;-------- 读取人民币:余额、可用、可取、股票市值、基金市值、资产、盈亏-------- 
	
		if (InStr(A_LoopField,"人民币")=1)
		{
			Loop, parse, A_LoopField,%A_Tab%,%A_Space%
			{
				if(A_LoopField<>"")
					str.=A_LoopField . "`n"
			}
			MsgBox %str%
		}
		;~ Loop, parse, A_LoopField,`t,`=
		;-------- 跳过 美 元、港 元、以及-------- 
		else if (InStr(A_LoopField,"美")=1   or InStr(A_LoopField,"港")=1 or InStr(A_LoopField,"-")=1)
		{
			mark:=LineNumber
			;记录 --------在哪一行
			continue
		}
		;-------- 跳过空行-------- 
		else if (LineNumber=mark+1)
		{
			continue
		}
		
		;-------- 读取表头-------- 
		else if (LineNumber=mark+2)
		{
			Loop, parse, A_LoopField,%A_Tab%,%A_Space%
			{
					if(A_LoopField<>"")
					head.=A_LoopField . "`n"
			}
			MsgBox 表头是↓`n%head%
		}
		;-------- 读取数据-------- 
		else{
			this_line:=""
			if (A_LoopField="")
				break

			Loop, parse, A_LoopField,%A_Tab%,%A_Space%
				{
					if(A_LoopField<>"")
					this_line.=A_LoopField . "`n"
				}
				MsgBox % LineNumber-mark-2 "is↓`n"  this_line
		}
	}
}

测试结果如下:

[ahk]通达信股票交易软件持仓数据获取--(招商证券、中银国际、通达信官方版等测试可用)_第2张图片

 

2020年2月29日 以下方法因交易软件做了权限限制,已无法获取。此法可以获取普通程序的SysListView321中的内容,但无法获取交易软件客户端里的持仓内容。


  

#Persistent
DetectHiddenWindows, on
;获取招商证券持仓数量,需要先登录到交易软件,并浏览过一次持仓情况后才可自动获取。

Gui, Add, ListView, r20 w800,股票名称|证券数量|可卖数量|成本价|浮动盈亏|盈亏比例(`%)|最新市值|当前价|今买数量|今卖数量|证券代码|股东代码
Gui, Show,, 持仓信息

SetTimer, 获取持仓,1000


获取持仓:

  ;注意1、最后一个参数不要忽略 
  ;注意2、SysListView321这个控件ID需要自己用spy软件先获取,可能随着运行次数不同会变

  ControlGet, tdxlist, List, 0, SysListView321, ahk_class TdxW_MainFrame_Class, List1
  LV_delete()
  Loop, Parse, tdxlist,`n
    LV_Add("",   StrSplit(A_LoopField,A_Tab)*)
Return

GuiClose:
GuiEscape:
  ExitApp

 

几行代码就可以获取持仓,招商证券、中银国际通达信上测试可用

 

 

 

[ahk]通达信股票交易软件持仓数据获取--(招商证券、中银国际、通达信官方版等测试可用)_第3张图片

你可能感兴趣的:(股票,AHK,程序化交易)