返回列表 发布新帖

《提升量化交易执行效率,一行代码解决策略下单难题》

6380 4
发表于 2024-3-4 15:10:46 | 显示全部楼层 阅读模式

一、场景:

在量化交易中,我们经常面临两个问题:

首先是大额订单可能对市场行情产生不利影响;其次是需要保证策略下单的快速成交。

通常,为了解决这些问题,我们需要编写复杂的代码来控制下单数量和跟踪订单状态。然而,过多的代码可能带来潜在的错误风险,特别是对于不熟悉这些控制流程的开发者来说。

现在,有了一个简洁的解决方案,只需一行代码即可解决上述难题,无需编写额外的下单代码或订单状态跟踪代码。这一解决方案就是 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)代码演示

image.png

# 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)执行效果图:

image.png

是不是很简单?快来试试吧!

不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!

欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。

只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!

企业微信截图_17235220909173.png

评论4

心如止水
发表于 2024-3-5 10:24:27 | 显示全部楼层
赞,券商QMT就可以使用,只是很多人没注意到这个用法,可以直接用算法。
*******0301
发表于 2024-5-21 09:57:19 | 显示全部楼层
用algo_passorder调仓的话,需要自己计算当前持仓和目标篮子的差异吗?还是algo_passorder内部会自动处理?
Anna向阳而生
发表于 2024-7-8 11:16:53 | 显示全部楼层
11111
*******0301
发表于 2024-12-27 16:36:47 | 显示全部楼层
*******0301 发表于 2024-5-21 09:57
用algo_passorder调仓的话,需要自己计算当前持仓和目标篮子的差异吗?还是algo_passorder内部会自动处理? ...

后面实盘测试发现需要自己计算差异

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 京ICP备2025122616号-3
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表