3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在进行期货和期权量化交易时,**合约乘数(Contract Multiplier)**是一个至关重要的参数。它决定了单手合约所代表的标的资产数量(例如:沪深300股指期货 IF 的合约乘数是 300 元/点,铜期货是 5 吨/手)。
QMT 平台提供了专门的 API 接口 ContextInfo.get_contract_multiplier(),允许用户在策略运行中动态、自动地获取任意合约的乘数。以下是该接口的详细使用指南及代码示例。
ContextInfo.get_contract_multiplier()ContextInfo.get_contract_multiplier(contractcode)contractcode (string):合约代码,格式必须为 代码.市场(例如:'IF1707.IF' 或 'cu2412.SF')。number(数值类型,代表合约乘数)。以下是一个简单的 Python 策略示例,展示了如何在 handlebar 中获取并打印指定期货合约的乘数:
#encoding:gbk
def init(ContextInfo):
# 设定基础股票池(可选)
ContextInfo.set_universe(['IF2412.IF'])
print("策略初始化成功")
def handlebar(ContextInfo):
# 1. 获取中金所股指期货主力合约的乘数
if_multiplier = ContextInfo.get_contract_multiplier('IF2412.IF')
print(f"股指期货 IF2412 的合约乘数是: {if_multiplier}")
# 2. 获取上期所铜期货合约的乘数
cu_multiplier = ContextInfo.get_contract_multiplier('cu2412.SF')
print(f"沪铜 cu2412 的合约乘数是: {cu_multiplier}")
在实际交易中,我们通常需要先获取当前主力合约,再动态获取其合约乘数,从而计算出真实的持仓市值。以下是完整的实战代码:
#encoding:gbk
import time
def init(ContextInfo):
# 订阅期货品种
ContextInfo.set_universe(['IF.IF'])
def handlebar(ContextInfo):
# 只在最后一根 K 线上执行,避免历史回测时重复打印
if not ContextInfo.is_last_bar():
return
# 1. 获取当前股指期货的主力合约代码
main_contract = ContextInfo.get_main_contract('IF.IF')
print(f"当前股指期货主力合约为: {main_contract}")
# 2. 获取该主力合约的合约乘数
multiplier = ContextInfo.get_contract_multiplier(main_contract)
print(f"该主力合约的乘数为: {multiplier}")
# 3. 获取最新价格并计算单手合约价值
# 注意:get_full_tick 获取最新分笔数据
tick_data = ContextInfo.get_full_tick([main_contract])
if main_contract in tick_data:
last_price = tick_data[main_contract]['lastPrice']
contract_value = last_price * multiplier
print(f"当前最新价: {last_price},单手合约名义价值: {contract_value} 元")
.IF,上期所为 .SF,大商所为 .DF,郑商所为 .ZF。具体市场简称可参考 QMT 官方附录。.SHO / .SZO)及商品期权,获取期权合约单位(如 10000 股/张)。