3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期货量化交易和风险控制中,不同品种(如沪深300指数期货 IF、螺纹钢 rb、黄金 au 等)的**合约乘数(交易单位)**各不相同。为了避免在策略代码中硬编码合约乘数,QMT 提供了 ContextInfo.get_contract_multiplier() 接口,帮助开发者动态获取指定期货合约的乘数,从而精准计算合约总价值与所需保证金。
ContextInfo.get_contract_multiplier(contractcode)
contractcode(字符串),合约代码,格式为 品种代码.市场,例如 'IF1707.IF'、'rb2310.SF'。number(数值),返回该合约对应的合约乘数(如 IF 为 300,rb 为 10)。以下策略展示了如何在 QMT 中动态获取期货合约乘数,并实时计算合约价值与保证金:
#encoding:gbk
def init(ContextInfo):
# 设定关注的期货合约
ContextInfo.symbol = 'IF2309.IF' # 沪深300股指期货
ContextInfo.set_universe([ContextInfo.symbol])
# 假设保证金比例为 12%
ContextInfo.margin_ratio = 0.12
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
symbol = ContextInfo.symbol
# 1. 动态获取合约乘数
multiplier = ContextInfo.get_contract_multiplier(symbol)
# 2. 获取最新行情数据
tick_data = ContextInfo.get_full_tick([symbol])
if symbol in tick_data:
last_price = tick_data[symbol]['lastPrice']
# 3. 计算单手合约总价值与所需保证金
contract_value = last_price * multiplier
margin_required = contract_value * ContextInfo.margin_ratio
# 4. 打印计算结果
print(f"合约代码: {symbol}")
print(f"最新价格: {last_price}")
print(f"合约乘数: {multiplier}")
print(f"单手合约总价值: {contract_value:.2f} 元")
print(f"单手所需保证金: {margin_required:.2f} 元")
IF.IF,rb.SF),否则可能无法正确获取。1。ContextInfo.capital(初始资金/可用资金),可以利用合约保证金计算结果动态决定下单手数,实现资金控制与风险管理。