
同花顺接口的调用方式与合规边界
同花顺官方并未提供公开的免费行情API。市面上常见的“同花顺接口”通常指两种方案。第一种是通过第三方Python库模拟客户端操作,间接获取行情数据。第二种是使用同花顺旗下iFinD金融数据终端的付费接口。量化交易者需要明确,直接破解或逆向同花顺通信协议违反用户协议,存在法律风险。合规做法是购买官方数据服务,或通过券商提供的量化交易接口获取行情。股票与期货的实时行情对延迟敏感,建议优先选择券商柜台或交易所直连行情。
使用pywinauto模拟同花顺客户端获取行情
pywinauto是Windows桌面自动化库,可以操控同花顺客户端界面,读取自选股列表的行情数据。这种方式适合个人投资者小规模获取数据。安装依赖命令:
pip install pywinauto pandas
代码示例:启动同花顺客户端,连接已打开的窗口,定位到自选股表格,提取股票代码、名称、最新价、涨跌幅。
from pywinauto import Application
import pandas as pd
import time
app = Application(backend="uia").connect(path="hexin.exe")
main_win = app.window(title_re=".*同花顺.*")
main_win.set_focus()
stock_table = main_win.child_window(auto_id="ListCtrl", control_type="Table")
rows = stock_table.descendants(control_type="DataItem")
data = []
for i in range(0, len(rows), 6):
code = rows[i].window_text()
name = rows[i+1].window_text()
price = rows[i+2].window_text()
change = rows[i+3].window_text()
data.append([code, name, price, change])
df = pd.DataFrame(data, columns=["代码", "名称", "最新价", "涨跌幅"])
df.to_csv("ths_quotes.csv", index=False)
期货行情同理,需在同花顺中切换到期货板块,定位对应的表格控件。注意控件auto_id可能随版本变化,需用Inspect.exe工具查看。

通过同花顺iFinD Python接口获取股票期货数据
同花顺iFinD提供官方Python SDK,需付费账号。安装命令:
pip install iFinDPy
登录后调用实时行情与历史数据。股票期货代码格式不同,股票如600000.SH,期货如IF2312.CFE。
from iFinDPy import *
result = THS_iFinDLogin("账号", "密码")
if result != 0:
print("登录失败")
exit()
# 获取股票实时行情
stock_data = THS_RealtimeQuotes("600000.SH,000001.SZ", "open,high,low,latest,volume")
print(stock_data.data)
# 获取期货实时行情
futures_data = THS_RealtimeQuotes("IF2312.CFE,IC2312.CFE", "open,high,low,latest,volume,position")
print(futures_data.data)
THS_iFinDLogout()
iFinD接口延迟低,支持批量订阅。量化交易策略中可结合pandas与numpy计算技术指标,生成交易信号。
量化交易中处理同花顺数据的要点
股票与期货的行情字段差异大。股票关注成交量、换手率、市盈率。期货关注持仓量、结算价、基差。使用同花顺接口获取数据后,需进行清洗。股票代码后缀.SH/.SZ,期货代码需区分交易所。数据存储建议使用parquet或hdf5格式,提升读写速度。
实时行情推送场景下,pywinauto轮询频率不宜过高,1秒一次即可,避免客户端卡顿。iFinD接口支持回调函数,适合高频策略。风险控制模块需要监控行情断连,设置重连机制。
import numpy as np
def calculate_signal(df):
df['ma5'] = df['latest'].rolling(5).mean()
df['ma20'] = df['latest'].rolling(20).mean()
df['signal'] = np.where(df['ma5'] > df['ma20'], 1, -1)
return df
股票T+1制度下,当日买入不能卖出,信号需延迟一天执行。期货T+0,信号可即时触发。同花顺接口获取的期货行情可能缺少逐笔成交,需用tick数据补充。
替代方案与风险提示
若无法获得同花顺官方接口,可考虑以下合规途径。券商提供的量化交易API,如华泰MATIC、国泰君安GTJA。期货公司提供的CTP接口,直连交易所行情。开源数据源如Tushare、AkShare,免费但延迟较高。
使用pywinauto模拟同花顺存在封号风险,同花顺检测到自动化操作可能限制登录。iFinD接口按流量收费,高频调用成本高。股票期货量化交易者应优先选择券商或期货公司官方接口,稳定性与合规性更好。
同花顺接口数据仅用于个人研究,不得用于商业分发。实盘交易前用历史数据回测,避免过度拟合。行情延迟超过500毫秒的策略,不适合日内高频。期货杠杆交易需严格止损,股票组合需控制行业暴露。
完整量化流程示例
结合同花顺接口获取股票池行情,计算动量因子,生成调仓指令。
from iFinDPy import *
import pandas as pd
THS_iFinDLogin("账号", "密码")
stocks = "600519.SH,000858.SZ,300750.SZ"
df = THS_HistoryQuotes(stocks, "close,volume", "2024-01-01", "2024-03-01", "period=1D").data
df['return'] = df.groupby('code')['close'].pct_change()
df['momentum'] = df.groupby('code')['return'].rolling(20).sum().reset_index(0, drop=True)
top = df.groupby('code')['momentum'].last().nlargest(2)
print("买入标的:", top.index.tolist())
THS_iFinDLogout()
期货跨期套利策略中,用同花顺接口获取近月与远月合约价格,计算价差。
near = THS_RealtimeQuotes("IF2312.CFE", "latest").data
far = THS_RealtimeQuotes("IF2403.CFE", "latest").data
spread = far['latest'] - near['latest']
if spread > 50:
print("做空价差")
elif spread < -50:
print("做多价差")
同花顺接口调用需持续维护,客户端升级或接口变更会导致代码失效。量化交易系统应解耦数据源与策略逻辑,便于切换接口。股票期货市场波动大,任何策略需经过压力测试与实盘验证。