如何实现拆单和延时报单
<h4><strong>简要说明</strong></h4>
<ul>
<li>拆单是指将一笔大单拆分成多笔小单,多笔小单同时提交委托,即批量下单。延时报单指在拆分大单后,每笔小单间隔一定时间后再分别提交委托。</li>
</ul>
<hr />
<h4><strong>1.采用区间随机方式进行拆单</strong>:</h4>
<p>典型的拆单方法有:固定数量、区间随机、数量递减等方法。下面以区间随机的拆单方法为示例进行说明,其它方法类似。</p>
<p><strong>示例代码</strong></p>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
#例:采用区间随机方式进行拆单,除最后一单外,每单的委托数量大于等于单笔下限数量,小于单笔上限数量,最后一单委托余下的数量(不一定在单笔上限数量内)。
from ths_api import HQ as hq
import xiadan as xd
import numpy as np
bors = 'buy'
code = '000001'
wtjg = 'zxjg'
zwtsl = 2000
dbsx = 500 #单笔上限数量
dbxx = 100 #单笔下限数量,应小于单笔上限数量
ymsl = 0 #记录程序的已买数量
list_wtsl = []
while ymsl < zwtsl:
if zwtsl - ymsl >= dbsx:
wtsl0 = np.random.randint(dbxx/100, dbsx/100)*100
else:
wtsl0 = zwtsl - ymsl
list_wtsl.append(wtsl0)
ymsl = ymsl + wtsl0
ret = xd.cmd('%s %s %s %s' % (bors, code, wtjg, str(wtsl0)))
print(ret)
print(bors, code, wtjg, str(wtsl0))
print('拆单后每单的委托数量列表:', list_wtsl)
</code></pre>
<p><strong>运行结果</strong></p>
<p>程序的输出及部分日志如下所示,并且触发10次相应的委托确认弹窗。</p>
<pre><code>{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244679353。', 'htbh':'1244679353'}
buy 000001 zxjg 300
{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244746777。', 'htbh':'1244746777'}
buy 000001 zxjg 100
{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244774870。', 'htbh':'1244774870'}
buy 000001 zxjg 200
{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244683698。', 'htbh':'1244683698'}
buy 000001 zxjg 100
{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244864954。', 'htbh':'1244864954'}
buy 000001 zxjg 100
{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244851160。', 'htbh':'1244851160'}
buy 000001 zxjg 300
{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244857005。', 'htbh':'1244857005'}
buy 000001 zxjg 300
{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244714839。', 'htbh':'1244714839'}
buy 000001 zxjg 100
{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244796420。', 'htbh':'1244796420'}
buy 000001 zxjg 300
{'retCode':'0', 'retMsg':'您的买入委托已成功提交,合同编号:1244758828。', 'htbh':'1244758828'}
buy 000001 zxjg 200
拆单后每单的委托数量列表: [300, 100, 200, 100, 100, 300, 300, 100, 300, 200]</code></pre>
<hr />
<h4><strong>2.采用区间随机方式进行拆单,并且延时报单</strong>:</h4>
<p><strong>示例代码</strong></p>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
#例:采用区间随机方式进行拆单,除最后一单外,每单的委托数量大于等于单笔下限数量,小于单笔上限数量,最后一单委托余下的数量(不一定在单笔上限数量内)。并且延时报单。
from ths_api import *
import numpy as np
import time
bors = 'buy'
code = '000001'
wtjg = 'zxjg'
zwtsl = 2000
dbsx = 500 #单笔上限数量
dbxx = 100 #单笔下限数量,应小于单笔上限数量
ymsl = 0 #记录程序的已买数量
list_wtsl = []
while ymsl < zwtsl:
if zwtsl - ymsl >= dbsx:
wtsl0 = np.random.randint(dbxx/100, dbsx/100)*100
else:
wtsl0 = zwtsl - ymsl
list_wtsl.append(wtsl0)
ymsl = ymsl + wtsl0
ret = xd.cmd('%s %s %s %s' % (bors, code, wtjg, str(wtsl0)))
print(ret)
print(bors, code, wtjg, str(wtsl0))
time.sleep(10 + np.random.randint(0, 10)) #延时10~20s内的某一随机时间后,继续下一笔子单的委托
print('拆单后每单的委托数量列表:', list_wtsl)</code></pre>
<p><strong>运行结果</strong></p>
<p>运行结果和上一示例的结果类似,但是每笔子单之间有10~20s的随机延时。</p>