问题描述
解决方案
在 PTrade 中进行担保品买卖(margin_trade)时,若希望使用“对手方最优价格”进行市价委托,market_type 参数应填 0。
参数说明
根据 PTrade API 文档中 margin_trade 函数的说明,market_type 参数对应的值如下:
- 0:对手方最优价格
- 1:最优五档即时成交剩余转限价
- 2:本方最优价格
- 3:即时成交剩余撤销
- 4:最优五档即时成交剩余撤销
- 5:全额成交或撤单
注意事项
虽然 market_type=0 代表对手方最优价格,但在实际使用时需注意交易所和板块的支持情况(根据文档描述):
- 深证股票:支持参数 0。
- 上证科创板股票:支持参数 0。
- 上证非科创板股票(主板):文档中仅列出支持参数 1 和 4。如果交易上证主板股票,建议先确认券商柜台是否支持该市价类型,或改用
market_type=1(最优五档即时成交剩余转限价)作为替代。
代码示例
以下是一个在 handle_data 中使用 margin_trade 以“对手方最优价格”买入担保品的示例:
def initialize(context):
# 设置股票池,例如一只深证股票
g.security = '000001.SZ'
set_universe(g.security)
def handle_data(context, data):
# 获取当前持仓
position = get_position(g.security)
# 示例:如果没有持仓,则买入 100 股
if position.amount == 0:
# 使用 margin_trade 进行担保品买入
# amount 为正数表示买入
# market_type=0 表示使用对手方最优价格
margin_trade(g.security, 100, market_type=0)
log.info("以对手方最优价格买入担保品: %s" % g.security)
常见问题 (Q&A)
Q: margin_trade 函数支持哪些业务类型?
A: margin_trade 仅用于担保品买卖(即使用自有资金买入股票作为担保品,或卖出持有的担保品股票)。如果是进行融资买入(借钱买股)需使用 margincash_open,融券卖出(借股卖出)需使用 marginsec_open。
Q: 如果我不填 market_type 参数会怎样?
A: 如果 limit_price(限价)和 market_type(市价类型)都不传,系统默认取当前行情的最新价进行限价委托。如果传入了 market_type,则以市价委托为准。
Q: 上证主板股票想用市价单,推荐用哪个参数?
A: 对于上证非科创板股票,文档推荐支持的是 1(最优五档即时成交剩余转限价)和 4(最优五档即时成交剩余撤销)。通常 market_type=1 是比较常用的替代方案,因为它能保证在成交不完时转为限价单继续挂单,避免撤单。