3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 期货量化交易中,精确计算持仓所需的保证金对于风控和资金管理至关重要。get_instruments(contract) 是 PTrade 提供的专门用于获取期货合约上市基础信息的 API 接口。
get_instruments(contract)contract(str类型),例如 'CU2112.XSGE' 或 'IF2309.CCFX'。FutureParams 对象,包含以下核心字段:
contract_code:合约代码(str)contract_name:合约名称(str)trade_unit / contract_multiplier:交易单位 / 合约乘数(int/float)margin_rate:交易所或策略设置的保证金比例(float)delivery_date:交割日期(str)listing_date:上市日期(str)期货持仓保证金占用的计算公式如下:
$$\text{保证金占用} = \text{最新价格} \times \text{合约乘数} \times \text{持仓数量} \times \text{保证金比例}$$
利用 get_instruments 获取 contract_multiplier 与 margin_rate 后,结合实时行情 get_snapshot 或 get_history 得到的价格,即可精准实现保证金的动态计算。
以下示例展示了如何在 PTrade 中查询沪铜合约(如 CU2112.XSGE)的合约信息,并在盘中动态计算拟开仓或已持仓的保证金占用:
def initialize(context):
# 设置目标期货合约
g.security = 'CU2112.XSGE'
set_universe(g.security)
# 可选:设置自定义保证金比例(如设置沪铜保证金比例为 8%)
set_margin_rate('CU', 0.08)
def before_trading_start(context, data):
# 获取并打印合约基础信息
inst_info = get_instruments(g.security)
log.info(f"合约代码: {inst_info.contract_code}")
log.info(f"合约乘数/交易单位: {inst_info.contract_multiplier}")
log.info(f"保证金比例: {inst_info.margin_rate}")
def handle_data(context, data):
# 1. 获取合约详情
inst_info = get_instruments(g.security)
multiplier = inst_info.contract_multiplier
margin_rate = inst_info.margin_rate
# 2. 获取最新价格
current_price = data[g.security]['close']
# 3. 计算开仓 2 手所需的保证金占用
order_amount = 2
margin_required = current_price * multiplier * order_amount * margin_rate
log.info(f"当前价格: {current_price}, 拟开仓 {order_amount} 手所需保证金: {margin_required:.2f} 元")
# 4. 结合当前账户可用资金进行风控下单(示例)
available_cash = context.portfolio.cash
if available_cash > margin_required:
# 买入开仓
buy_open(g.security, order_amount)
log.info("资金充足,已执行买开指令")
get_instruments 函数仅在 PTrade 的回测和交易模块可用。get_snapshot 获取最新行情。