tqsdk.risk_rule - 风控类模块

class tqsdk.risk_rule.TqRuleOpenCountsLimit(api, open_counts_limit, symbol, account=None)

风控规则类 - 交易日内开仓次数限制。

此功能为 TqSdk 专业版提供,如需使用此功能,可以点击 天勤量化专业版 申请试用或购买

Args:

api (TqApi): TqApi 实例

open_volumes_limit (int): 交易日内开仓手数上限

symbol (str/list of str): 负责限制的合约代码或合约代码列表.
  • str: 一个合约代码

  • list of str: 合约代码列表

account (TqAccount/TqKq/TqSim): [可选] 指定发送下单指令的账户实例, 多账户模式下,该参数必须指定

Example1:

from tqsdk import TqApi
from tqsdk.risk_rule import TqRuleOpenCountsLimit

api = TqApi(auth=TqAuth("信易账户", "账户密码"))

rule = TqRuleOpenCountsLimit(api, open_counts_limit=10, symbol="DCE.m2112")  # 创建风控规则实例
api.add_risk_rule(rule)  # 添加风控规则

quote = api.get_quote("DCE.m2112")
try:
    # 每次最新价变动,下一笔订单,直到超过开仓次数风控限制
    while True:
        api.wait_update()
        if api.is_changing(quote, ['last_price']):
            order = api.insert_order(symbol="DCE.m2112", direction="BUY", offset="OPEN", volume=1)
            while order.status != "FINISHED":
                api.wait_update()
except TqRiskRuleError as e:
    print('!!!', e)
api.close()
class tqsdk.risk_rule.TqRuleOpenVolumesLimit(api, open_volumes_limit, symbol, account=None)

风控规则类 - 交易日内开仓手数限制

此功能为 TqSdk 专业版提供,如需使用此功能,可以点击 天勤量化专业版 申请试用或购买

Args:

api (TqApi): TqApi 实例

open_volumes_limit (int): 交易日内开仓手数上限

symbol (str/list of str): 负责限制的合约代码或合约代码列表.
  • str: 一个合约代码

  • list of str: 合约代码列表

account (TqAccount/TqKq/TqSim): [可选] 指定发送下单指令的账户实例, 多账户模式下,该参数必须指定

Example1:

from tqsdk import TqApi
from tqsdk.risk_rule import TqRuleOpenVolumesLimit

api = TqApi(auth=TqAuth("信易账户", "账户密码"))

rule = TqRuleOpenVolumesLimit(api, open_volumes_limit=10, symbol="DCE.m2112")  # 创建风控规则实例
api.add_risk_rule(rule)  # 添加风控规则

# 下单 5 手,不会触发风控规则
order1 = api.insert_order(symbol="DCE.m2112", direction="BUY", offset="OPEN", volume=5)
while order1.status != "FINISHED":
    api.wait_update()

# 继续下单 8 手,会触发风控规则
order2 = api.insert_order(symbol="DCE.m2112", direction="BUY", offset="OPEN", volume=8)
while order2.status != "FINISHED":
    api.wait_update()
api.close()

Example2:

from tqsdk import TqApi, TqKq, TqRiskRuleError
from tqsdk.risk_rule import TqRuleOpenVolumesLimit

account = TqKq()
api = TqApi(account=account, auth=TqAuth("信易账户", "账户密码"))

rule = TqRuleOpenVolumesLimit(api, open_volumes_limit=10, symbol="DCE.m2112", account=account)  # 创建风控规则实例
api.add_risk_rule(rule)  # 添加风控规则

try:
    # 下单 11 手,触发风控规则
    order1 = api.insert_order(symbol="DCE.m2112", direction="BUY", offset="OPEN", volume=11)
    while order1.status != "FINISHED":
        api.wait_update()
except TqRiskRuleError as e:
    print("!!!", e)

api.close()
class tqsdk.risk_rule.TqRuleAccOpenVolumesLimit(api, open_volumes_limit, symbol, account=None)

风控规则类 - 累计开仓手数限制。

限制合约开仓手数之和。

此功能为 TqSdk 专业版提供,如需使用此功能,可以点击 天勤量化专业版 申请试用或购买

Args:

api (TqApi): TqApi 实例

open_volumes_limit (int): 交易日内开仓手数之和上限

symbol (str/list of str): 负责限制的合约代码或合约代码列表.
  • str: 一个合约代码

  • list of str: 合约代码列表

account (TqAccount/TqKq/TqSim): [可选] 指定发送下单指令的账户实例, 多账户模式下,该参数必须指定

Example:

from tqsdk import TqApi, TqKq, TqRiskRuleError
from tqsdk.risk_rule import TqRuleAccOpenVolumesLimit

account = TqKq()
api = TqApi(account=account, auth=TqAuth("信易账户", "账户密码"))

quote = api.get_quote("SSE.000300")
call_in, call_at, call_out = api.query_all_level_finance_options("SSE.000300", quote.last_price, "CALL", nearbys=0)
put_in, put_at, put_out = api.query_all_level_finance_options("SSE.000300", quote.last_price, "PUT", nearbys=0)
near_symbols = call_in + call_at + call_out + put_in + put_at + put_out  # 找到所有当月期权合约

symbols = api.query_options("SSE.000300", expired=False)  # 找到所有中金所期权合约

# 规则1: 中金所当月期权合约日内开仓不超过 100 手
# 规则2: 中金所所有期权合约日内合约开仓不超过 200 手
rule1 = TqRuleAccOpenVolumesLimit(api, open_volumes_limit=100, symbol=near_symbols, account=account)  # 创建风控规则实例
rule2 = TqRuleAccOpenVolumesLimit(api, open_volumes_limit=200, symbol=symbols, account=account)  # 创建风控规则实例
api.add_risk_rule(rule1)  # 添加风控规则
api.add_risk_rule(rule2)  # 添加风控规则

try:
    # 下单 101 手,触发风控规则
    order1 = api.insert_order(symbol="CFFEX.IO2111-C-4900", direction="BUY", offset="OPEN", volume=101, limit_price=35.6)
    while order1.status != "FINISHED":
        api.wait_update()
except TqRiskRuleError as e:
    print("!!!", e)  # 报错,当月期权合约日内合约开仓不超过 100 手, 已下单次数 0

api.close()