Loading...
Loading...
Compare original and translation side by side
undefinedundefined
**环境要求:** Python 3, Windows 7+ / macOS / Linux
**注意:** TqSdk 使用 asyncio,部分 IDE(如 Spyder)不支持。推荐使用 VS Code、Cursor、Trae 等支持 asyncio 的 IDE。
**环境要求:** Python 3, Windows 7+ / macOS / Linux
**注意:** TqSdk 使用 asyncio,部分 IDE(如 Spyder)不支持。推荐使用 VS Code、Cursor、Trae 等支持 asyncio 的 IDE。from tqsdk import TqApi, TqAuth
api = TqApi(auth=TqAuth("快期账户", "账户密码"))from tqsdk import TqApi, TqAuth
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
**关键要点:**
- `get_quote()`、`get_kline_serial()` 等返回的是**引用对象**,值在 `wait_update()` 时自动更新
- 每个引用对象只需调用一次获取函数
- `wait_update()` 是阻塞函数,收到数据包才返回
- `is_changing()` 判断指定对象在最近一次 `wait_update` 中是否被更新
**关键要点:**
- `get_quote()`、`get_kline_serial()` 等返回的是**引用对象**,值在 `wait_update()` 时自动更新
- 每个引用对象只需调用一次获取函数
- `wait_update()` 是阻塞函数,收到数据包才返回
- `is_changing()` 判断指定对象在最近一次 `wait_update` 中是否被更新交易所代码.合约代码undefined交易所代码.合约代码undefinedundefinedundefinedfrom tqsdk import TqApi, TqAuthfrom tqsdk import TqApi, TqAuthundefinedundefinedfrom tqsdk import TqApi, TqKq, TqAuthfrom tqsdk import TqApi, TqKq, TqAuthundefinedundefinedfrom tqsdk import TqApi, TqAccount, TqAuth
api = TqApi(TqAccount("H海通期货", "账号", "密码"), auth=TqAuth("快期账户", "账户密码"))from tqsdk import TqApi, TqAccount, TqAuth
api = TqApi(TqAccount("H海通期货", "账号", "密码"), auth=TqAuth("快期账户", "账户密码"))from tqsdk import TqApi, TqCtp, TqAuth
api = TqApi(TqCtp("tcp://180.168.xxx:41205", "tcp://180.168.xxx:41205", "账号", "密码"),
auth=TqAuth("快期账户", "账户密码"))from tqsdk import TqApi, TqCtp, TqAuth
api = TqApi(TqCtp("tcp://180.168.xxx:41205", "tcp://180.168.xxx:41205", "账号", "密码"),
auth=TqAuth("快期账户", "账户密码"))from tqsdk import TqApi, TqMultiAccount, TqAccount, TqSim, TqAuth
api = TqApi(TqMultiAccount([TqAccount("H海通期货", "账号1", "密码1"), TqSim()]),
auth=TqAuth("快期账户", "账户密码"))from tqsdk import TqApi, TqMultiAccount, TqAccount, TqSim, TqAuth
api = TqApi(TqMultiAccount([TqAccount("H海通期货", "账号1", "密码1"), TqSim()]),
auth=TqAuth("快期账户", "账户密码"))quote = api.get_quote("SHFE.cu2401")quote = api.get_quote("SHFE.cu2401")undefinedundefinedundefinedundefinedundefinedundefinedticks = api.get_tick_serial("SHFE.cu2401")ticks = api.get_tick_serial("SHFE.cu2401")undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedfrom tqsdk import TqApi, TqAuth, TargetPosTask
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
target_pos = TargetPosTask(api, "SHFE.rb2401")from tqsdk import TqApi, TqAuth, TargetPosTask
api = TqApi(auth=TqAuth("快期账户", "账户密码"))
target_pos = TargetPosTask(api, "SHFE.rb2401")undefinedundefinedfrom datetime import date
from tqsdk import TqApi, TqAuth, TqSim, TqBacktest, BacktestFinished
acc = TqSim(init_balance=1000000) # 可选:自定义初始资金
try:
api = TqApi(acc,
backtest=TqBacktest(start_dt=date(2023, 1, 1), end_dt=date(2023, 12, 31)),
auth=TqAuth("快期账户", "账户密码"))
quote = api.get_quote("SHFE.rb2401")
klines = api.get_kline_serial("SHFE.rb2401", 60*60*24)
target_pos = TargetPosTask(api, "SHFE.rb2401")
while True:
api.wait_update()
if api.is_changing(klines.iloc[-1], "datetime"):
ma5 = klines.close.iloc[-6:-1].mean()
if quote.last_price > ma5:
target_pos.set_target_volume(1)
else:
target_pos.set_target_volume(-1)
except BacktestFinished:
print(acc.trade_log) # 交易明细
print(acc.tqsdk_stat) # 统计指标
# tqsdk_stat 包含: init_balance, balance, max_drawdown,
# winning_rate, ror, annual_yield, sharpe_ratio 等
api.close()TqSimStockquote.underlying_symbolfrom datetime import date
from tqsdk import TqApi, TqAuth, TqSim, TqBacktest, BacktestFinished
acc = TqSim(init_balance=1000000) # 可选:自定义初始资金
try:
api = TqApi(acc,
backtest=TqBacktest(start_dt=date(2023, 1, 1), end_dt=date(2023, 12, 31)),
auth=TqAuth("快期账户", "账户密码"))
quote = api.get_quote("SHFE.rb2401")
klines = api.get_kline_serial("SHFE.rb2401", 60*60*24)
target_pos = TargetPosTask(api, "SHFE.rb2401")
while True:
api.wait_update()
if api.is_changing(klines.iloc[-1], "datetime"):
ma5 = klines.close.iloc[-6:-1].mean()
if quote.last_price > ma5:
target_pos.set_target_volume(1)
else:
target_pos.set_target_volume(-1)
except BacktestFinished:
print(acc.trade_log) # 交易明细
print(acc.tqsdk_stat) # 统计指标
# tqsdk_stat 包含: init_balance, balance, max_drawdown,
# winning_rate, ror, annual_yield, sharpe_ratio 等
api.close()TqSimStockquote.underlying_symbolfrom tqsdk.ta import MA, MACD, RSI, BOLL, ATR, KDJ
klines = api.get_kline_serial("SHFE.rb2401", 60*60*24)from tqsdk.ta import MA, MACD, RSI, BOLL, ATR, KDJ
klines = api.get_kline_serial("SHFE.rb2401", 60*60*24)undefinedundefinedfrom tqsdk import tafunc
ema = tafunc.ema(klines.close, 20)
std = tafunc.std(klines.close, 20)
highest = tafunc.highest(klines.high, 20)
lowest = tafunc.lowest(klines.low, 20)from tqsdk import tafunc
ema = tafunc.ema(klines.close, 20)
std = tafunc.std(klines.close, 20)
highest = tafunc.highest(klines.high, 20)
lowest = tafunc.lowest(klines.low, 20)from tqsdk import TqApi
from tqsdk.algorithm import Twap
api = TqApi(auth="快期账户,用户密码")
target_twap = Twap(api, "SHFE.rb2401", "BUY", "OPEN",
volume=500, duration=300,
min_volume_each_order=10,
max_volume_each_order=25)
while True:
api.wait_update()
if target_twap.is_finished():
break
api.close()from tqsdk import TqApi
from tqsdk.algorithm import Twap
api = TqApi(auth="快期账户,用户密码")
target_twap = Twap(api, "SHFE.rb2401", "BUY", "OPEN",
volume=500, duration=300,
min_volume_each_order=10,
max_volume_each_order=25)
while True:
api.wait_update()
if target_twap.is_finished():
break
api.close()from tqsdk import TqApi, TargetPosScheduler
from tqsdk.algorithm import vwap_table
api = TqApi(auth="快期账户,用户密码")
time_table = vwap_table(api, "CZCE.MA401", target_pos=-100, duration=600)
scheduler = TargetPosScheduler(api, "CZCE.MA401", time_table)
while not scheduler.is_finished():
api.wait_update()
api.close()from tqsdk import TqApi, TargetPosScheduler
from tqsdk.algorithm import vwap_table
api = TqApi(auth="快期账户,用户密码")
time_table = vwap_table(api, "CZCE.MA401", target_pos=-100, duration=600)
scheduler = TargetPosScheduler(api, "CZCE.MA401", time_table)
while not scheduler.is_finished():
api.wait_update()
api.close()from tqsdk import TqApi, TqAuth
api = TqApi(auth=TqAuth("快期账户", "账户密码"), web_gui=True)from tqsdk import TqApi, TqAuth
api = TqApi(auth=TqAuth("快期账户", "账户密码"), web_gui=True)
启动后在浏览器访问显示的地址,可以查看 K 线图、持仓、委托单等信息。
启动后在浏览器访问显示的地址,可以查看 K 线图、持仓、委托单等信息。undefinedundefinedundefinedundefinedimport logging
from contextlib import closing
logging.basicConfig(filename='strategy.log', level=logging.INFO)
with closing(TqApi(TqAccount("期货公司", "账号", "密码"),
auth=TqAuth("快期账户", "密码"))) as api:
# 策略代码...
passimport logging
from contextlib import closing
logging.basicConfig(filename='strategy.log', level=logging.INFO)
with closing(TqApi(TqAccount("期货公司", "账号", "密码"),
auth=TqAuth("快期账户", "密码"))) as api:
# 策略代码...
passimport requests
from json import dumps
def send_msg(content):
webhook = "你的钉钉webhook地址"
msg = {"msgtype": "text", "text": {"content": f"天勤量化\n{content}"}}
requests.post(webhook, data=dumps(msg),
headers={"content-type": "application/json;charset=utf-8"})import requests
from json import dumps
def send_msg(content):
webhook = "你的钉钉webhook地址"
msg = {"msgtype": "text", "text": {"content": f"天勤量化\n{content}"}}
requests.post(webhook, data=dumps(msg),
headers={"content-type": "application/json;charset=utf-8"})sim = TqSim()
api = TqApi(sim, auth=TqAuth("快期账户", "账户密码"))
sim.set_commission("SHFE.cu2401", 50) # 设置每手手续费
sim.set_margin("SHFE.cu2401", 26000) # 设置每手保证金sim = TqSim()
api = TqApi(sim, auth=TqAuth("快期账户", "账户密码"))
sim.set_commission("SHFE.cu2401", 50) # 设置每手手续费
sim.set_margin("SHFE.cu2401", 26000) # 设置每手保证金q_near = api.get_quote("SHFE.rb2401")
q_far = api.get_quote("SHFE.rb2405")
t_near = TargetPosTask(api, "SHFE.rb2401")
t_far = TargetPosTask(api, "SHFE.rb2405")
while True:
api.wait_update()
spread = q_near.last_price - q_far.last_price
if spread > 250:
t_near.set_target_volume(-1) # 空近月
t_far.set_target_volume(1) # 多远月
elif spread < 200:
t_near.set_target_volume(0)
t_far.set_target_volume(0)q_near = api.get_quote("SHFE.rb2401")
q_far = api.get_quote("SHFE.rb2405")
t_near = TargetPosTask(api, "SHFE.rb2401")
t_far = TargetPosTask(api, "SHFE.rb2405")
while True:
api.wait_update()
spread = q_near.last_price - q_far.last_price
if spread > 250:
t_near.set_target_volume(-1) # 空近月
t_far.set_target_volume(1) # 多远月
elif spread < 200:
t_near.set_target_volume(0)
t_far.set_target_volume(0)klines = api.get_kline_serial("SHFE.rb2401", 60*15, data_length=200)
target_pos = TargetPosTask(api, "SHFE.rb2401")
while True:
api.wait_update()
if api.is_changing(klines.iloc[-1], "datetime"):
ma5 = klines.close.iloc[-6:-1].mean()
ma20 = klines.close.iloc[-21:-1].mean()
if ma5 > ma20:
target_pos.set_target_volume(1)
else:
target_pos.set_target_volume(-1)klines = api.get_kline_serial("SHFE.rb2401", 60*15, data_length=200)
target_pos = TargetPosTask(api, "SHFE.rb2401")
while True:
api.wait_update()
if api.is_changing(klines.iloc[-1], "datetime"):
ma5 = klines.close.iloc[-6:-1].mean()
ma20 = klines.close.iloc[-21:-1].mean()
if ma5 > ma20:
target_pos.set_target_volume(1)
else:
target_pos.set_target_volume(-1)| 函数 | 说明 |
|---|---|
| 创建 API 实例 |
| 获取实时行情 |
| 获取K线序列 |
| 获取Tick序列 |
| 下单 |
| 撤单 |
| 获取账户资金 |
| 获取持仓 |
| 获取委托单 |
| 获取成交记录 |
| 等待数据更新 |
| 判断对象是否更新 |
| 关闭连接 |
| 创建目标持仓任务 |
| 设置目标持仓 |
| 函数 | 说明 |
|---|---|
| 创建 API 实例 |
| 获取实时行情 |
| 获取K线序列 |
| 获取Tick序列 |
| 下单 |
| 撤单 |
| 获取账户资金 |
| 获取持仓 |
| 获取委托单 |
| 获取成交记录 |
| 等待数据更新 |
| 判断对象是否更新 |
| 关闭连接 |
| 创建目标持仓任务 |
| 设置目标持仓 |
references/references/