如何利用pandas对持仓、成交数据进行高级的数据处理
<p><strong>简要说明</strong></p>
<ul>
<li>利用tool.py中的order_to_dataframe可以方便的将委托表、持仓表的数据转化为DataFrame格式,并采用pandas方便的对数据进行高级处理,下面以如下三个问题作为示例:
1.计算当日委托中的已成交的股票总市值
2.计算</li>
</ul>
<hr />
<ul>
<li>
<p><strong>1.获取账户资金</strong>:</p>
<p><strong>示例代码</strong></p>
</li>
</ul>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xiadan as xd
#例1:直接获取全局资金表的所有字段信息
print(xd.g_money)
</code></pre>
<p><strong>运行结果</strong></p>
<pre><code>{'zt': '00', 'djje': 1600.48, 'kyje': 151137.99, 'sz': 48032.0, 'zjye': 167586.91, 'jjzje': 151137.99, 'zzc': 200770.47, 'hbdw': '0', 'zsz': 48032.0, 'kqje': 0.0}
</code></pre>
<p><strong>输出字段说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">字段</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">zt</td>
<td style="text-align: left;">主题</td>
</tr>
<tr>
<td style="text-align: left;">djje</td>
<td style="text-align: left;">冻结金额</td>
</tr>
<tr>
<td style="text-align: left;">kyje</td>
<td style="text-align: left;">可用金额</td>
</tr>
<tr>
<td style="text-align: left;">sz</td>
<td style="text-align: left;">市值</td>
</tr>
<tr>
<td style="text-align: left;">zjye</td>
<td style="text-align: left;">资金余额</td>
</tr>
<tr>
<td style="text-align: left;">jjzje</td>
<td style="text-align: left;">基金总金额</td>
</tr>
<tr>
<td style="text-align: left;">zzc</td>
<td style="text-align: left;">总资产</td>
</tr>
<tr>
<td style="text-align: left;">hbdw</td>
<td style="text-align: left;">货币单位</td>
</tr>
<tr>
<td style="text-align: left;">zsz</td>
<td style="text-align: left;">总市值</td>
</tr>
<tr>
<td style="text-align: left;">kqje</td>
<td style="text-align: left;">可取金额</td>
</tr>
</tbody>
</table>
<p><strong>示例代码</strong></p>
<pre><code>import xiadan as xd
#例2:查询当前账户的可用金额
print(xd.g_money["kyje"])
</code></pre>
<p><strong>运行结果</strong></p>
<pre><code>151137.99
</code></pre>
<hr />
<ul>
<li>
<p><strong>2.获取持仓信息</strong>:</p>
<p><strong>示例代码</strong></p>
</li>
</ul>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xiadan as xd
import json
dic = xd.g_position
print('输出原始持仓信息:')
print(dic,'\n')
print('将持仓信息转化为json格式便于阅读:')
j1 = json.dumps(dic, ensure_ascii = False, indent = 2)
print(j1)</code></pre>
<p><strong>运行结果</strong></p>
<pre><code>输出原始持仓信息:
{'002886': {'yk': 1016.99, 'jysc': '深圳A股', 'sj': 24.63, 'zqmc': '沃特股份', 'gdzh': '00107220280', 'djsl': 0, 'gpye': 400, 'sz': 9852.0, 'zqdm': '002886', 'sjsl': 400, 'kyye': 400, 'hbdw': '0', 'jksz': '', 'cbj': 22.088}, '002813': {'yk': -51.52, 'jysc': '深圳A股', 'sj': 25.16, 'zqmc': '路畅科技', 'gdzh': '00107220280', 'djsl': 0, 'gpye': 200, 'sz': 5032.0, 'zqdm': '002813', 'sjsl': 200, 'kyye': 200, 'hbdw': '0', 'jksz': '', 'cbj': 25.418}, '300033': {'yk': -551.04, 'jysc': '深圳A股', 'sj': 95.55, 'zqmc': '同花顺', 'gdzh': '00107220280', 'djsl': 0, 'gpye': 100, 'sz': 9555.0, 'zqdm': '300033', 'sjsl': 100, 'kyye': 100, 'hbdw': '0', 'jksz': '', 'cbj': 101.06}, '000001': {'yk': 479.04, 'jysc': '深圳A股', 'sj': 16.94, 'zqmc': '平安银行', 'gdzh': '00107220280', 'djsl': 900, 'gpye': 1400, 'sz': 23716.0, 'zqdm': '000001', 'sjsl': 1400, 'kyye': 500, 'hbdw': '0', 'jksz': '', 'cbj': 16.598}}
将持仓信息转化为json格式便于阅读:
{
"002886": {
"yk": 1016.99,
"jysc": "深圳A股",
"sj": 24.63,
"zqmc": "沃特股份",
"gdzh": "00107220280",
"djsl": 0,
"gpye": 400,
"sz": 9852.0,
"zqdm": "002886",
"sjsl": 400,
"kyye": 400,
"hbdw": "0",
"jksz": "",
"cbj": 22.088
},
"002813": {
"yk": -51.52,
"jysc": "深圳A股",
"sj": 25.16,
"zqmc": "路畅科技",
"gdzh": "00107220280",
"djsl": 0,
"gpye": 200,
"sz": 5032.0,
"zqdm": "002813",
"sjsl": 200,
"kyye": 200,
"hbdw": "0",
"jksz": "",
"cbj": 25.418
</code></pre>
<p><strong>部分输出字段说明:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">字段</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">yk</td>
<td style="text-align: left;">盈亏</td>
</tr>
<tr>
<td style="text-align: left;">jysc</td>
<td style="text-align: left;">交易市场</td>
</tr>
<tr>
<td style="text-align: left;">sj</td>
<td style="text-align: left;">市价(暂时不支持实时行情)</td>
</tr>
<tr>
<td style="text-align: left;">zqmc</td>
<td style="text-align: left;">证券名称</td>
</tr>
<tr>
<td style="text-align: left;">gdzh</td>
<td style="text-align: left;">股东账号</td>
</tr>
<tr>
<td style="text-align: left;">djsl</td>
<td style="text-align: left;">冻结数量</td>
</tr>
<tr>
<td style="text-align: left;">gpye</td>
<td style="text-align: left;">股票余额</td>
</tr>
<tr>
<td style="text-align: left;">sz</td>
<td style="text-align: left;">市值</td>
</tr>
<tr>
<td style="text-align: left;">zqdm</td>
<td style="text-align: left;">证券代码</td>
</tr>
<tr>
<td style="text-align: left;">sjsl</td>
<td style="text-align: left;">实际数量</td>
</tr>
<tr>
<td style="text-align: left;">kyye</td>
<td style="text-align: left;">可用余额</td>
</tr>
<tr>
<td style="text-align: left;">hbdw</td>
<td style="text-align: left;">货币单位</td>
</tr>
<tr>
<td style="text-align: left;">jksz</td>
<td style="text-align: left;">接口设置</td>
</tr>
<tr>
<td style="text-align: left;">cbj</td>
<td style="text-align: left;">成本价</td>
</tr>
</tbody>
</table>
<p><strong>简要说明</strong> </p>
<ul>
<li>可使用xiadan.py中的交易接口函数:cmd。支持买入、卖出、撤单。</li>
</ul>
<p><strong>调用格式</strong></p>
<pre><code>cmd('strCmd')</code></pre>
<hr />
<ul>
<li><strong>1.用cmd函数进行委托</strong>:</li>
</ul>
<p>完整命令strCmd = 操作动作+证券代码+价格+数量(金额/仓位)+辅助参数(可有可无)</p>
<p><strong>参数:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">操作动作</td>
<td style="text-align: left;">buy(买入),sell(卖出)</td>
</tr>
<tr>
<td style="text-align: left;">证券代码</td>
<td style="text-align: left;">600000(举例),fsdm(当前行情分时代码)</td>
</tr>
<tr>
<td style="text-align: left;">价格</td>
<td style="text-align: left;">固定价格、zxjg(最新价)、ztjg(涨停价)、dtjg(跌停价)、dsj1~dsj5(对手价1~5)</td>
</tr>
<tr>
<td style="text-align: left;">数量(金额/仓位)</td>
<td style="text-align: left;">按股数:固定值; 按金额:-m 金额值;可用仓位:-cw 参数值; 目标仓位:-zcw 参数值</td>
</tr>
<tr>
<td style="text-align: left;">辅助参数</td>
<td style="text-align: left;">多账户执行同一命令:-account all; 条件触发时没有委托确认提示,实现全自动条件单:-notip</td>
</tr>
</tbody>
</table>
<p><strong>示例代码</strong></p>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xiadan as xd
#例1:以最新价买入000001平安银行100股
xd.cmd('buy 000001 zxjg 100')
#例2:按照当前对手价——卖一价买入100股300059
xd.cmd('buy 300059 dsj1 100')
#例3:按照当前买一价买入100股300059,委托前不弹框提醒
xd.cmd('buy 300059 dsj1 100 -notip')
#例4:按照当前对手价——买五价卖出300059十万元
xd.cmd('sell 300059 dsj5 -m 100000')
#例5:按照当前可买数量以最新价买入半仓的300059
xd.cmd('buy 300059 zxjg -cw 1/2')
#例6:按照跌停价格卖出300059到总仓位为1/4
xd.cmd('sell 300059 dtjg -zcw 0.25')
</code></pre>
<p><strong>运行结果</strong></p>
<p>除例3外,弹窗提示是否执行委托;例3不弹窗提示直接提交委托。</p>
<hr />
<ul>
<li><strong>2.用cmd函数进行撤单</strong>:</li>
</ul>
<p>完整命令strCmd = 操作动作+参数值</p>
<p><strong>参数:</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">操作动作</td>
<td style="text-align: left;">cancel(撤单)</td>
</tr>
<tr>
<td style="text-align: left;">参数值</td>
<td style="text-align: left;">-h 合同编号、方向(buy/sell)、代码、代码+方向(buy/sell)、全撤/撤最后(all/last)</td>
</tr>
</tbody>
</table>
<p><strong>示例代码</strong></p>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xiadan as xd
#例1:撤掉合同编号为123456的委托单
xd.cmd('cancel -h 123456')
#例2:撤掉所有买单
xd.cmd('cancel buy')
#例3:撤掉当前行情分时代码的所有委托单
xd.cmd('cancel fsdm')
#例4:撤掉当前行情分时代码的所有卖单
xd.cmd('cancel fsdm sell')
#例5:撤掉所有可撤委托单
xd.cmd('cancel all') </code></pre>
<p><strong>运行结果</strong></p>
<p>撤掉相应委托单。</p>