同花顺Python策略编辑器帮助文档

同花顺Python策略编辑器帮助文档


功能介绍

<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>

页面列表

ITEM_HTML