一、场景:
在量化交易中,我们经常面临两个问题:
首先是大额订单可能对市场行情产生不利影响;其次是需要保证策略下单的快速成交。
通常,为了解决这些问题,我们需要编写复杂的代码来控制下单数量和跟踪订单状态。然而,过多的代码可能带来潜在的错误风险,特别是对于不熟悉这些控制流程的开发者来说。
现在,有了一个简洁的解决方案,只需一行代码即可解决上述难题,无需编写额外的下单代码或订单状态跟踪代码。这一解决方案就是 algo_passorder。
二、方法:
接下来,让我详细介绍 algo_passorder。它是客户端手工下单面板的算法交易工具,算法交易是迅投提供给客户的智能交易策略,其原理在于通过智能策略和大单拆分方式,减少对市场的冲击,并根据行情波动及时调整报价以保证快速成交。
简言之,algo_passorder 就是一行命令,让您可以轻松输入参数,如总委托数量和拆分下单规则,无需额外操作即可完成任务。比如总量10万股的委托任务,我们输入分几次下单,每次下单时实际委托多少股;又比如总量1万股的委托任务当10秒(或输入的其他时间)后不成交时让该任务自动撤单然后重新报单等。
具体该接口的用法见迅投知识库:http://dict.thinktrader.net/innerApi/trading_function.html?id=I3DJ97#algo-passorder-%E7%AE%97%E6%B3%95%E4%B8%8B%E5%8D%95-%E6%8B%86%E5%8D%95-%E5%87%BD%E6%95%B0
接下来将演示 algo_passorder 的使用方法及执行效果图。
(1)代码演示

# coding:gbk
def after_init(ContextInfo):
target_vol = 30000 # 股, 算法目标总量
userparam={
'OrderType':1, #表示要下算法
'PriceType':0, # 0表示 卖5价下单
'MaxOrderCount':20, # 最大委托次数
'SuperPriceType':0, # 超价类型,0表示按比例
'SuperPriceRate':0.01, # 超价1%下单
'VolumeRate':0.1, # 单笔下单比率 每次拆10%
'VolumeType': 10, # 单笔基准量类型 10 代表目标量 即每次下单的委托是目标量*VolumeRate(target_vol*10%)
'SingleNumMax':1000000, # 单笔拆单最大值
'PriceRangeType':0, # 波动区间类型
'PriceRangeRate':1, # 波动区间值
'ValidTimeType':1, # 有效时间类型 1 表示按执行时间
'ValidTimeStart':get_time('141000'), # 算法开始时间
'ValidTimeEnd':get_time('143000'), # 算法结束时间
'PlaceOrderInterval':10, # 报撤间隔
'UndealtEntrustRule':5, # 未成委托处理数值 用卖5加挂单
}
algo_passorder(23, 1101, account, '000001.SZ', -1, -1, target_vol, '', 2, '算法自动拆单', userparam, ContextInfo)
print('algo_passorder 下单完成')
def get_time(time):
import datetime
h = int(time[:2])
m = int(time[2:4])
s = int(time[4:])
now = datetime.datetime.now()
date = datetime.datetime(now.year, now.month, now.day, h, m, s)
return int(date.timestamp())
(2)执行效果图:

是不是很简单?快来试试吧!
不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!
欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。
只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!
