股票期货量化交易如何用Python调用同花顺接口获取实时行情

企业微信

同花顺接口的调用方式与合规边界

同花顺官方并未提供公开的免费行情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工具查看。

股票期货量化交易如何用Python调用同花顺接口获取实时行情

通过同花顺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("做多价差")

同花顺接口调用需持续维护,客户端升级或接口变更会导致代码失效。量化交易系统应解耦数据源与策略逻辑,便于切换接口。股票期货市场波动大,任何策略需经过压力测试与实盘验证。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/tonghuashun-jiekou-Python-604.html