功能介绍
<p>登录交易系统,在界面右上角,点击“策略”按钮,进入Python策略编辑器:</p>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/6a0a0298a82613b9df05cd84c9d1786c?showdoc=.jpg" alt="" /></p>
<p><img src="https://www.showdoc.cc/server/api/attachment/visitfile/sign/c5d69a64091b1ce4f2c4776143e696ba?showdoc=.jpg" alt="" /></p>
<h4>1.行情</h4>
<h5>1.1 查询行情相关数据</h5>
<p>主要包括:查询及处理分时行情数据、周期行情数据、均线及常见指标数据、自选股板块股信息等。</p>
<h5>具体接口简介</h5>
<pre><code>def get_block(blockname=''):
'''
@brief 获取自选股、自定义板块成分股(需在行情客户端下使用)
@param blockname(str) 板块名称,比如 自选股、板块1等,默认为空,返回自选股
@return dict,包含2列,zqdm(证券代码)、zqmc(证券名称)
'''
def get_block_stocklist(blockname=''):
'''
@brief 获取自选股、自定义板块成分股列表(需在行情客户端下使用)
@param blockname(str) 板块名称,比如 自选股、板块1等,默认为空,返回自选股
@return list,证券代码列表
'''
def block_to_stocklist(block):
'''
@brief 从get_block接口返回的dict里面取板块的股票代码列表
@param block(dict) get_block返回的数据
@return 代码列表(list)
'''
def kline_to_dataframe(kline):
'''
@brief 周期数据转成pandas.DataFrame数据结构
@param kline(dict) get_kline/reg_kline返回的周期数据
@return pandas.DataFrame格式的周期数据
'''
def klinecode_to_dataframe(kline, code):
'''
@brief 指定代码的周期数据转成pandas.DataFrame数据结构
@param kline(dict) 周期数据
@param code(str) 股票代码
@return pandas.DataFrame格式的周期数据
'''
class ths_hq_api():
def __init__(self):
'''
@brief 连接行情服务器,初始化环境
@return 如果连接成功,会输出日志:登录成功
如果连接失败,会输出日志:无法连接行情服务器,请检查网络状态后重试
'''
def get_quote(self, StockCode):
'''
@brief 获取一次指定代码列表的最新实时行情数据,2s内只能执行1次
@param StockCode 证券代码列表,支持str、list、set格式,一次最多500个代码
@return 实时行情数据结构dict
'''
def reg_quote(self, StockCode):
'''
@brief 订阅指定代码列表的实时行情数据
@param StockCode 证券代码列表,支持str、list、set格式,最多订阅500个
@return 返回实时行情数据结构引用,是个dict,格式参考get_quote的返回,其内容在wait_update后更新
'''
def unreg_quote(self, StockCode):
'''
@brief 取消实时行情数据订阅,取消reg_quote订阅的实时行情数据
@param StockCode 证券代码列表,支持str、list、set格式
@return 无
'''
def get_kline(self, StockCode, duration_minute, length):
'''
@brief 获取一次指定代码列表的周期行情数据,包括分钟线(1、5、15、30、60)、日线、周线、月线、季度线、年线,2s内只能执行1次
@param StockCode 证券代码列表,支持str、list、set格式,一次最多取500个
@param duration_minute 周期,以分钟为步长,支持int,入参为
1=》1分钟线、5、15、30、60、1440=》日线(24*60)、10080=》周线(7*24*60)、43200=》月线、129600=》季度线、525600=》年线
@param length 数据条数,最大1w条,比如 duration_minute=1 length=5表示从当前开始取一分钟线,取5条数据
@return 周期行情数据结构dict
'''
def reg_kline(self, StockCode, duration_minute, length):
'''
@breif 订阅指定代码列表的周期数据
@param StockCode 证券代码列表,支持str、list、set格式,一次最多取500个
@param duration_minute 周期,以分钟为步长,支持int,入参为
1=》1分钟线、5、15、30、60、1440=》日线(24*60)、10080=》周线(7*24*60)、43200=》月线、129600=》季度线、525600=》年线
@param length 时长,对应需要多少条数据,比如 duration_minute=1 length=5表示从当前开始取一分钟线,取5条数据
@return 返回实时行情数据结构引用,是个dict,格式参考get_kline的返回,其内容在wait_update后更新
'''
def unreg_kline(self, StockCode):
'''
@brief 取消周期行情数据订阅,取消reg_kline订阅的周期行情数据
@param StockCode 证券代码列表,支持str、list、set格式
@return 无
'''
def wait_update(self):
'''
@brief 等待订阅的行情数据更新
调用此接口将阻塞当前线程,等待订阅的行情数据推送更新才返回
@return 行情数据变化的代码列表,数据结构为list
'''
def get_quote_update_codelist(self):
'''
@breif 配合wait_update的返回值使用,表示实时行情数据更新的代码列表
@return list
'''
def get_kline_update_codelist(self):
'''
@brief 配合wait_update的返回值使用,表示周期行情数据更新的代码列表
@return list
'''
def is_changing(self, obj, key=None):
'''
@brief 判断obj最近是否有数据更新
@param obj reg_quote、reg_kline返回的数据对象
@param key [可选] 需要判断的字段,默认不指定,格式为str或list of str
@return 如果本次业务数据更新包含了待判定的字段,则返回True,否则返回False
'''
def is_code_changing(self, obj, code, key=None):
'''
@brief 判断code的obj是否有数据更新
@param obj reg_quote、reg_kline返回的数据对象
@param code 股票代码,格式为str
@param key [可选] 需要判断的字段,默认不指定,格式为str或list of str
@return 如果本次业务数据更新包含指定代码的待判断字段,则返回True,否则返回False
'''
def is_quote_changing(self):
'''
@brief 配合wait_update的返回值使用,表示实时行情数据是否更新
@return 如果本次业务数据更新包含了实时行情数据,返回True,否则返回False
'''
def is_kline_changing(self):
'''
@brief 配合wait_update的返回值使用,表示周期行情数据是否更新
@return 如果本次业务数据更新包含了周期行情数据,返回True,否则返回False
'''
def to_dataframe(self, kline, code):
'''
@brief 指定代码的周期数据转成pandas.DataFrame数据结构
@param kline 周期数据
@param code 股票代码
@return pandas.DataFrame数据结构
'''
def AD(self, kline, code):
'''
@brief 累积/派发线
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@return pandas.DataFrame,包含1列
ad
'''
def ADOSC(self, kline, code, fastperiod=3, slowperiod=10):
'''
@brief Chaikin震荡指标
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param fastperiod
@param slowperiod
@return pandas.DataFrame,包含1列
adosc
'''
def ATR(self, kline, code, n=14):
'''
@brief 平均真实波幅
取一定时间周期内的股价波动幅度的移动平均值
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 平均真实波幅的周期
@return pandas.DataFrame,包含1列
atr 平均真实波幅
'''
def APO(self, kline, code, fastperiod=12, slowperiod=26, matype=0):
'''
@brief 绝对价格振荡器
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param fastperiod
@param slowperiod
@param matype
@return pandas.DataFrame,包含1列
apo
'''
def BOLL(self, kline, code, n=5, up=2, dn=2, m=0):
'''
@brief 布林线
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@param up 上轨线
@param dn 下轨线
@param m talib.MA_Type 不一样的加权方式计算移动平均
@return pandas.DataFrame,包含3列,
upperband 上轨线
middleband 中轨线
lowerband 下轨线
'''
def CDL2CROWS(self, kline, code):
'''
@brief 两只乌鸦
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@return pandas.DataFrame,包含1列,
cdl2crows 值为-100, 0 or 100
@note 三日K线模式,第一天长阳,第二天高开收阴,第三天再次高开继续收阴,收盘比前一日收盘价低,预示股价下跌
'''
def CDL3BLACKCROWS(self, kline, code):
'''
@brief 三只乌鸦
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@return pandas.DataFrame,包含1列,
cdl3blackcrows 值为-100, 0 or 100
@note 三日K线模式,连续三根阴线,每日收盘价都下跌且接近最低价,每日开盘价都在上根K线实体内,预示股价下跌。
'''
def CMO(self, kline, code, n=14):
'''
@brief 钱德动量摆动指标
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含3列,
cmo
'''
def DEMA(self, kline, code, n):
'''
@brief 双指数加权移动平均线
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
dema 均线
'''
def EMA(self, kline, code, n):
'''
@brief 指数加权移动平均线
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@return pandas.DataFrame,包含1列,
ema 均线
'''
def HT_TRENDLINE(self, kline, code):
'''
@brief 希尔伯特瞬时变换
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@return pandas.DataFrame,包含1列,
ht
'''
def KAMA(self, kline, code, n=30):
'''
@brief 考夫曼的自适应移动平均线
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
kama
'''
def KDJ(self, kline, code, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0):
'''
@brief 随机指标
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param fastk_period:
@param slowk_period:
@param slowk_matype:
@param slowd_period:
@param slowd_matype:
@return pandas.DataFrame,包含3列,
k、d、j
'''
def MA(self, kline, code, n, m=0):
'''
@brief 均线(移动平均线)
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@param m(int) 0-8 加权, 0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 6=KAMA, 7=MAMA, 8=T3 (Default=SMA)
@return pandas.DataFrame,包含1列,
ma 均线
'''
def MACD(self, kline, code, short=12, long=26, m=9):
'''
@brief 指数平滑异同平均线,根据短期、长期移动平均线的差离情况预判买卖股票时机
DIFF = 12日EMA - 26日EMA
DEA = DIFF的9日EMA
hist = 2*(DIFF - DEA)
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param short(int):短周期
@param long(int):长周期
@param m(int):移动平均线的周期
@return pandas.DataFrame,包含3列,
dif 差离值
dea 指数加权移动平均线
hist macd的柱状线
'''
def MAMA(self, kline, code, fastlimit=0.5, slowlimit=0.05):
'''
@brief MESA自适应移动平均
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param fastlimit
@param slowlimit
@return pandas.DataFrame,包含2列,
mama
fama
'''
def MAVP(self, kline, code, periods, minperiod=2, maxperiod=30, matype=0):
'''
@brief 可变周期的移动平均线
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param periods(ndarray)
@param minperiod
@param maxperiod
@param matype
@return pandas.DataFrame,包含1列,
mavp
'''
def MOM(self, kline, code, n=10):
'''
@brief 动量
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
mom
'''
def OBV(self, kline, code):
'''
@brief 能量潮
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@return pandas.DataFrame,包含1列,
obv
'''
def PPO(self, kline, code, fastperiod=12, slowperiod=26, matype=0):
'''
@brief 比例价格振荡器
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param fastperiod 短期指数平滑移动均线周期
@param slowperiod 长期指数平滑移动均线周期
@param matype 权重
@return pandas.DataFrame,包含1列,
ppo
'''
def ROC(self, kline, code, n=10):
'''
@brief 变化率
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
roc
'''
def ROCP(self, kline, code, n=10):
'''
@brief 变化率百分比
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
rocp
'''
def ROCR(self, kline, code, n=10):
'''
@brief 变化率的比率
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
rocr
'''
def ROCR100(self, kline, code, n=10):
'''
@brief 变化率的比率100倍
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
rocr100
'''
def RSI(self, kline, code, n=14):
'''
@brief 相对强弱指数
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
rsi
'''
def SMA(self, kline, code, n):
'''
@brief 简单移动平均线
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
sma
'''
def STOCHRSI(self, kline, code, timeperiod=14, fastk_period=5, fastd_period=3, fastd_matype=0):
'''
@brief 随机相对强弱指标
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param fastk_period:
@param fastd_period:
@param fastd_matype:
@return pandas.DataFrame,包含2列,
k、d
'''
def T3(self, kline, code, n=5, vfactor=0):
'''
@brief 三指数移动平均线(T3)
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@param vfactor
@return pandas.DataFrame,包含1列,
t3
'''
def TEMA(self, kline, code, n):
'''
@brief 三指数移动平均线
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
tema
'''
def TRIX(self, kline, code, n=30):
'''
@brief 三重光滑EMA的日变化率
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
trix
'''
def WMA(self, kline, code, n):
'''
@brief 加权移动平均数
@param kline get_kline/reg_kline返回的周期数据
@param code 股票代码
@param n(int) 周期
@return pandas.DataFrame,包含1列,
wma
'''
</code></pre>
<h5>1.2 借助i问财帮您选股</h5>
<p>主要包括:输入您的选股策略自动帮您筛选达标股票、通过i问财获取更多股票数据。</p>
<h5>具体接口简介</h5>
<pre><code>def select_stock(query):
'''
@brief 选股接口,取财务数据接口等等
这是一个神奇的接口,可以取到各种你想要的数据
@param query 问句
@return pandas.DataFrame格式
'''
def select_stock_and_datatype(stocklist, datatypelist):
'''
@brief 从问财获取指定代码列表的指定数据项目
@param stocklist(list of str) 指定代码列表
@param datatypelist(list of str) 指定数据项目
@return pandas.DataFrame格式
'''
def select_stocklist(query):
'''
@brief 纯粹的选股接口
@param query 问句
@return list,证券代码列表
'''
def wencai_to_stocklist(df):
'''
@brief 从问财接口select_stock返回的pandas.DataFrame里面取股票代码列表
@param df(pandas.DataFrame) select_stock返回的数据
@return 代码列表(list)
'''</code></pre>
<h4>2.交易</h4>
<h5>2.1 基础的交易</h5>
<p>主要包括:下单、撤单、追单。</p>
<h5>具体接口简介</h5>
<pre><code>def cmd(strCmd):
'''
函数名 cmd
函数功能:交易接口,支持买入、卖出、撤单。
参数:
strCmd:命令行参数
委托:
完整命令:操作动作+证券代码+价格+数量(金额/仓位)+辅助参数(可有可无)
操作动作:buy(买入),sell(卖出)
证券代码:600000(举例),fsdm(当前行情分时代码)
价格:固定的具体价格、zxjg(最新价)、ztjg(涨停价)、dtjg(跌停价)、mrj1~mrj5(买入价1~5)、mcj1~mcj5(卖出价1~5)、dsj1~dsj5(对手价1~5)
数量:固定值
金额:-m 金额值
可用仓位:-cw 参数值
目标仓位:-zcw 参数值
对某账户执行命令:-account 资金账号
条件触发时没有委托确认提示,实现全自动条件单:-notip
举例:
cmd('buy 300059 dsj1 100') (按照当前对手价——卖一价买入100股300059)
cmd('buy 300059 dsj1 100 -notip') (按照当前买一价买入100股300059,委托前不弹框提醒)
cmd('sell 300059 dsj5 -m 100000') (按照当前对手价——买五价卖出300059十万元)
cmd('buy 300059 zxjg -cw 1/2') (按照当前可买数量以最新价买入半仓的300059)
cmd('sell 300059 dtjg -zcw 0.25') (按照跌停价格卖出300059到总仓位为1/4)
撤单:
完整命令:操作动作+参数值
操作动作:cancel(撤单)
参数值:-h 合同编号、方向(buy/sell)、代码、代码+方向(buy/sell)、全撤/撤最后(all/last)
'''
def tip(strTip):
'''
函数名 tip
函数功能:弹框提示
参数:
strTip:提示内容
'''
def get_order_from_htbh(htbh):
'''
函数名 get_order_from_htbh
函数功能:按照合同编号查全量委托,可用来判断该委托单是否成交、撤单等
参数:
htbh:合同编号
'''
def position_to_dataframe(postion):
'''
@brief 持仓数据转成pandas.DataFrame数据结构
@param postion 持仓数据
@return pandas.DataFrame格式的持仓列表
'''
def order_to_dataframe(order):
'''
@brief 可撤委托数据转成pandas.DataFrame数据结构
@param order(dict) 可撤委托数据
@return pandas.DataFrame格式的委托列表
'''
def fullorder_to_dataframe(fullorder):
'''
@brief 全量委托数据转成pandas.DataFrame数据结构
@param fullorder(dict) 全量委托数据
@return pandas.DataFrame格式的委托列表
'''
def pretty_print_dict(obj, indent=' '):
'''
@brief 以更可读的方式打印字典
@param obj 字典格式的变量
@return 以格式化的方式打印的字典
'''</code></pre>
<h5>2.2 查询交易相关数据</h5>
<p>主要包括:查询及处理委托表、持仓表、账户资金表、当日委托汇总表等相关数据。</p>
<h5>具体变量简介</h5>
<pre><code>global g_money:全局资金表dict
global g_position:全局持仓表dict
global g_order:全局可撤委托表dict,以证券代码为键
global g_htbh_order:全局可撤委托表dict,以合同编号为键
global g_fullorder:全局全量委托表dict
global g_htbh_fullorder:全局全量委托表dict,以合同编号为键
global g_ordersum:全局委托汇总表dict
</code></pre>
<h5>2.3 较高级的交易</h5>
<p>主要包括:从Excel中获取数据并委托、组合交易、拆单、算法单等。</p>
<h4>3.策略</h4>
<p>您可以通过Python策略编辑器,编写并在本地运行自己的策略程序,由程序监控行情或其它变量,达到条件后执行买卖等委托操作。策略监控在当天有效。</p>
<p>下图目录中的“经典策略”给出了一些常见的策略程序,可以直接在程序中修改后使用。您也可以参考“经典策略”中的程序,编写自己的策略程序。</p>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/631063a4ee15f54d4c79e09a427371fc?showdoc=.jpg" alt="" /></p>
<ul>
<li>
<p>图中目录的“帮助/HQ接口.py”,包含了常用函数的调用方法、行情数据的字段定义,比如get_quote、reg_quote、get_kline、reg_kline等。当您对行情相关函数有疑问时,可以在该文件中查找对应函数。</p>
</li>
<li>
<p>图中目录的“帮助/xiadan接口.py”,包含了交易时必用的cmd函数,以及委托表、持仓表、资金表等常见表的介绍。当您对交易相关函数或变量有疑问时,可以在该文件中查找。</p>
</li>
<li>
<p>本在线帮助文档的“示例/如何实现一些简单的股票监控策略”,给出了更详细的说明及示例。</p>
</li>
<li>使用时, 只需在python文件头部声明 from ths_api import *
即可使用所有的接口, 包括交易、行情、信号等</li>
</ul>
<h4>4.信号(亦称条件单)</h4>
<p>通过策略监控界面及信号添加界面,一些常见的交易策略不必再写python代码,操作界面即可实现。</p>
<p>系统内置了一些常见的信号,您可以直接调用。另外,您也可以自定义新的信号函数。所有信号均为本地运行,启动后在当天有效。</p>
<p>使用前,请先浏览本在线帮助文档中的“示例//不写python,添加/执行策略”。您可以参照其中说明,构建自己的信号。</p>
<h4>5.风控</h4>
<p>通过Python策略编辑器的“风控策略”功能,您可以在用户界面直接设置常见的个性化风控策略,在执行策略(信号)程序的过程中,自动实时监控。当达到风控底线时,系统会进行提示或禁止委托,把控投资风险。包括:总委托比例风控、标的风控、价格风控、委托量风控。</p>
<p>您也可以参照“risk.py”的程序自己补充新的风控策略。</p>