首页 网站首页 商业信息 成交率 查看内容

成交数据统计与分析

共生运营网 2023-3-31 19:19 5650人围观 成交率

要判定一个买卖系统的黑白,离不开对成交数据的分析,我们可以记录每一笔平仓单的盈亏,然后便可以分析其统计目标。

例如:

  • 盈利可用盈利点数、盈利金额或盈利率暗示,计较盈利的标准差可判定盈利能否稳定
  • 按照最大吃亏额可判定系统能承受的压力
  • 胜率、盈亏比、均匀盈利率可用于凯利公式计较,以做资金治理
  • 计较夏普比率等
  • 还可以别离分析多头和空头的盈利情况

要计较平仓单的盈亏,需要在拜托单成交前先记录品种的持仓信息,拜托单成交后按照其成交价及持仓价格的变化来计较该笔拜托单的平仓盈亏。

我们用协程函数check_close_order来检查拜托单的成友谊况,并在拜托单成交后计较其相关数据,例如盈利点数、盈利金额、盈利率等,计较后的成果以列表发给协程函数close_order_log,由close_order_log将每一笔平仓单盈亏成果写入当地OrderCloseLog.csv文件。

与平仓单相对应的开仓价为理论计较值,例如残剩持仓为0时,原持仓的开仓均价即是平仓单对应的开仓价,若残剩持仓不为0,则持仓开仓均价变化的部分即是平仓单对应的开仓价,有了开仓价,再与平仓价作差即可计较盈亏。

平仓开释出的保证金,作为平仓前投入的资金,与盈亏金额做除计较盈利率。

我们用一个简单的示例,经过回测来记录一下平仓盈亏,买卖经过协程函数cta履行,持续开仓两笔,再持续平仓两笔,以期获得分歧的开仓价及平仓价,代码以下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, pandas
from pathlib import Path
from datetime import datetime, time, date
from tqsdk import TqApi, TqAuth, TqAccount, TqChan,TqKq,TqSim, TqBacktest, BacktestFinished
from tqsdk.ta import EMA
from tqsdk.tafunc import time_to_str
flog = os.getcwd()+"\logs" #法式地点目录下建立logs目录
print(flog) #输出记录途径
if os.path.isfile(flog) != True:
p=Path(flog)
p.mkdir(exist_ok=True)
headk = ["品种", "多/空", "开仓价", "平仓价", "平仓手数", "盈利点数", "盈利金额","盈利点率","盈利额率","投入资金","信号位","备注","记录时候"]
filecsv = flog+"\OrderCloseLog.csv" # 拜托单的成交记录
if os.path.isfile(filecsv) != True:
h = pandas.DataFrame(index=[], columns=headk)
h.to_csv(filecsv, index=False)

async def close_order_log(chan):
async for order_list in chan: #
data = pandas.DataFrame([order_list],index=None,columns=headk) #天生pandas数据
data.to_csv(filecsv, index=False , header=False,mode="a+") #成交记录追加到当地

async def check_close_order(api, position, order, order_chan,signal_price=float('nan'),order_info='无'):
if order.offset == "OPEN" :return #只处置平仓拜托
symbol = order.exchange_id +"."+order.instrument_id
quote = api.get_quote(symbol)
if order.direction == "BUY":
direction = "空"
pos0 = position.pos_short #原空头持仓手数
price0 = position.open_price_short #原空头开仓均价
margin0 = position.margin_short #原空头占用保证金
else :
direction = "多"
pos0 = position.pos_long #原多头持仓手数
price0 = position.open_price_long #原多头开仓均价
margin0 = position.margin_long #原多头占用保证金
async with api.register_update_notify() as update_chan:
while order.status != "FINISHED" or (order.volume_orign - order.volume_left) != sum(
[trade.volume for trade in order.trade_records.values()]):
await update_chan.recv()
else:
volume = order.volume_orign - order.volume_left #已成比武数
if volume > 0:
while (position.pos_long != position.volume_long or position.pos_short != position.volume_short
or position.pos_long and position.open_price_long != position.open_price_long
or position.pos_short and position.open_price_short != position.open_price_short
or not position.pos_long and position.open_price_long == position.open_price_long
or not position.pos_short and position.open_price_short == position.open_price_short): await update_chan.recv()
if order.direction == "BUY":
pos_c = position.pos_short #平仓后残剩空头手数
price_c =position.open_price_short #平仓后残剩空头开仓均价
else :
pos_c = position.pos_long #平仓后残剩多头手数
price_c = position.open_price_long #平仓后残剩多头开仓均价
if pos_c > 0:
price = (pos0*price0 - pos_c*price_c)/volume #被平仓的理论开仓均价
else :price = price0
if order.direction == "BUY":
profit_count = price - order.trade_price #盈利点数
else: profit_count = order.trade_price - price
margin_release = margin0*volume/pos0 #开释保证金,平仓开释的保证金为理论投入资金
profit_money = volume * profit_count * quote.volume_multiple #盈利金额
profit_percent = round(profit_money/margin_release,5) #盈利率
#成交记录
order_list = [symbol,direction,price,order.trade_price,volume,profit_count,profit_money,profit_percent,
round(margin_release,2),signal_price,order_info,time_to_str(order.insert_date_time)]
await order_chan.send(order_list) #把计较后的成果发送进来

async def cta():
buy,sell = 0,0
m,n = 1,1
async with api.register_update_notify() as update_chan:
async for _ in update_chan:
if api.is_changing(klines.iloc[-1],"datetime"):
ema = EMA(klines,5)
if klines.close.iloc[-1] > ema.iloc[-1].ema:
if position.pos_short: #有空单凭空单
buy_close = api.insert_order('DCE.m2109','BUY','CLOSE',1,quote.ask_price1)
signal_price = klines.close.iloc[-1] #信号位
order_info = f"第{m}次平" #拜托单增加备注
m += 1
buy_close_task = api.create_task(check_close_order(api,position,buy_close,chan,signal_price,order_info)) #检查拜托单
await buy_close_task #期待成交完成
if not position.pos_short: buy,m = 0,1
elif buy < 2:#开多单2笔
buy_open = api.insert_order('DCE.m2109','BUY','OPEN',1,quote.ask_price1)
buy += 1
elif klines.close.iloc[-1] < ema.iloc[-1].ema:
if position.pos_long:
sell_close = api.insert_order('DCE.m2109','SELL','CLOSE',1,quote.bid_price1)
signal_price = klines.close.iloc[-1] #信号位
order_info = f"第{n}次平"
n += 1
sell_close_task = api.create_task(check_close_order(api,position,sell_close,chan,signal_price,order_info))
await sell_close_task
if not position.pos_long: sell,n = 0,1
elif sell < 2:
sell_open = api.insert_order('DCE.m2109','SELL','OPEN',1,quote.bid_price1)
sell += 1
sim = TqSim()
api = TqApi(account=sim,auth=TqAuth("信易账号","密码"),backtest=TqBacktest(start_dt=date(2021,1,10), end_dt=date(2021, 1, 20)))
# 获得 m2109 盘口的援用
quote = api.get_quote("DCE.m2109")
# 获得 m2109 持仓的援用
position = api.get_position("DCE.m2109")
# 获得 m2109 5分钟K线的援用
klines = api.get_kline_serial("DCE.m2109", 5*60)
chan = TqChan(api) #建立TqChan
api.create_task(close_order_log(chan=chan)) #建立保存成交记录Task
api.create_task(cta()) #建立战略使命Task
try:
while True:
api.wait_update()
except BacktestFinished :
print(sim.trade_log) # 回测的具体信息
print(sim.tqsdk_stat) # 回测时候内账户买卖信息统计成果,其中包括以下字段
while True :
api.wait_update()

我们为平仓单增加了一个order_info,以实现某些情形下的需求,比如分批止盈的战略,能够需要分类统计分歧批次下的盈利表示。

平仓记录OrderCloseLog.csv结果以下:



与回测开平成交记录像分歧:



有了这个平仓记录,我们便可以分析其统计目标了,间接用pandas读取文件到DataFrame,再利用pandas函数计较,以下是几个常用的分析目标计较:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pandas
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False

datas = pandas.read_csv(r"E:\ProgramData\Python38\Lib\site-packages\logs\OrderCloseLog.csv")
profit = datas[datas["盈利点数"] > 0] #取出盈利数据
profit_buy = profit[profit["多/空"] == "多"] #取出多头盈利
profit_sell = profit[profit["多/空"] == "空"] #取出空头盈利
loss = datas[datas["盈利点数"] <= 0] #取出吃亏数据
loss_buy = loss[loss["多/空"] == "多"] #取出多头吃亏
loss_sell = loss[loss["多/空"] == "空"] #取出空头吃亏
print(profit,loss,sep="\n")
print(profit.describe(),loss.describe(),sep="\n") #输出盈利和吃亏统计信息
print("胜率",len(profit)/len(datas),"均匀盈利率",profit["盈利额率"].mean(),"均匀吃亏率",loss["盈利额率"].mean())
print("盈亏额比例",abs(profit["盈利金额"].sum()/loss["盈利金额"].sum()),"均匀盈亏额比例",abs(profit["盈利金额"].mean()/loss["盈利金额"].mean()))
mean5 = []
count_mean5 = []
for i in datas["盈利点数"].rolling(5):
mean5.APPend(len(i[i > 0])/len(i)) #5日均匀胜率
if list(i[i > 0]):
count_mean5.append(i[i > 0].mean()) #5日均匀盈利点数
else:count_mean5.append(0.0)
win_rate5 = pandas.Series(mean5,name="5日胜率")
profit_count_mean5 = pandas.Series(count_mean5,name="5日均匀盈利点数")
print("5日胜率均值",win_rate5.mean(),"5日胜率标准差",win_rate5.std())
print("5日均匀盈利点数均值",profit_count_mean5.mean(),"5日均匀盈利点数标准差",profit_count_mean5.std())
figure, ax = plt.subplots(2,1) #绘图
win_rate5.plot(figure=figure, ax=ax[0], title="5日胜率")
profit_count_mean5.plot(figure=figure, ax=ax[1], title="5日均匀盈利点数")
plt.show()
'''
输出成果以下:
品种 多/空 开仓价 平仓价 平仓手数 盈利点数 盈利金额 盈利率 投入资金 备注 拜托时候
16 DCE.m2109 空 3612.0 3609.0 1 3.0 30.0 0.01676 1790.5 第1次平 2021-01-11 14:35:00.000000
17 DCE.m2109 空 3612.0 3610.0 1 2.0 20.0 0.01117 1790.5 第2次平 2021-01-11 14:40:00.000000
18 DCE.m2109 多 3614.0 3631.0 1 17.0 170.0 0.09495 1790.5 第1次平 2021-01-11 21:40:00.000000
19 DCE.m2109 多 3614.0 3637.0 1 23.0 230.0 0.12846 1790.5 第2次平 2021-01-11 21:45:00.000000
38 DCE.m2109 多 3622.0 3625.0 1 3.0 30.0 0.01676 1790.5 第1次平 2021-01-12 21:20:00.000000
.. ... .. ... ... ... ... ... ... ... ... ...
130 DCE.m2109 空 3659.0 3574.0 1 85.0 850.0 0.47473 1790.5 第2次平 2021-01-20 09:50:00.000000
133 DCE.m2109 空 3560.0 3556.0 1 4.0 40.0 0.02234 1790.5 第1次平 2021-01-20 11:15:00.000000
134 DCE.m2109 空 3560.0 3555.0 1 5.0 50.0 0.02793 1790.5 第2次平 2021-01-20 11:20:00.000000
135 DCE.m2109 多 3543.5 3547.0 1 3.5 35.0 0.01955 1790.5 第1次平 2021-01-20 14:40:00.000000
136 DCE.m2109 多 3543.5 3546.0 1 2.5 25.0 0.01396 1790.5 第2次平 2021-01-20 14:45:00.000000
品种 多/空 开仓价 平仓价 平仓手数 盈利点数 盈利金额 盈利率 投入资金 备注 拜托时候
0 DCE.m2109 多 3586.0 3573.0 1 -13.0 -130.0 -0.07261 1790.5 第1次平 2021-01-08 21:10:00.000000
1 DCE.m2109 多 3586.0 3565.0 1 -21.0 -210.0 -0.11729 1790.5 第2次平 2021-01-08 21:30:00.000000
2 DCE.m2109 空 3565.5 3575.0 1 -9.5 -95.0 -0.05306 1790.5 第1次平 2021-01-08 21:50:00.000000
3 DCE.m2109 空 3565.5 3573.0 1 -7.5 -75.0 -0.04189 1790.5 第2次平 2021-01-08 22:10:00.000000
4 DCE.m2109 多 3577.0 3570.0 1 -7.0 -70.0 -0.03910 1790.5 第1次平 2021-01-08 22:20:00.000000
.. ... .. ... ... ... ... ... ... ... ... ...
123 DCE.m2109 多 3685.5 3683.0 1 -2.5 -25.0 -0.01396 1790.5 第1次平 2021-01-19 14:50:00.000000
127 DCE.m2109 多 3677.0 3671.0 1 -6.0 -60.0 -0.03351 1790.5 第1次平 2021-01-19 22:30:00.000000
128 DCE.m2109 多 3677.0 3671.0 1 -6.0 -60.0 -0.03351 1790.5 第2次平 2021-01-19 22:35:00.000000
131 DCE.m2109 多 3580.5 3568.0 1 -12.5 -125.0 -0.06981 1790.5 第1次平 2021-01-20 10:10:00.000000
132 DCE.m2109 多 3580.5 3567.0 1 -13.5 -135.0 -0.07540 1790.5 第2次平 2021-01-20 10:30:00.000000

[104 rows x 11 columns]
开仓价 平仓价 平仓手数 盈利点数 盈利金额 盈利率 投入资金
count 33.000000 33.000000 33.0 33.000000 33.000000 33.000000 33.0
mean 3681.257576 3675.606061 1.0 12.439394 124.393939 0.069475 1790.5
std 69.476179 72.963578 0.0 20.336143 203.361430 0.113579 0.0
min 3543.500000 3546.000000 1.0 0.500000 5.000000 0.002790 1790.5
25% 3622.000000 3625.000000 1.0 2.500000 25.000000 0.013960 1790.5
50% 3701.500000 3690.000000 1.0 5.000000 50.000000 0.027930 1790.5
75% 3740.500000 3735.000000 1.0 16.000000 160.000000 0.089360 1790.5
max 3771.500000 3778.000000 1.0 87.000000 870.000000 0.485900 1790.5
开仓价 平仓价 平仓手数 盈利点数 盈利金额 盈利率 投入资金
count 104.000000 104.000000 104.0 104.000000 104.000000 104.000000 104.0
mean 3678.370192 3679.730769 1.0 -8.937500 -89.375000 -0.049918 1790.5
std 58.480268 58.032336 0.0 11.611362 116.113619 0.064850 0.0
min 3565.500000 3565.000000 1.0 -99.500000 -995.000000 -0.555710 1790.5
25% 3619.750000 3617.000000 1.0 -9.125000 -91.250000 -0.050967 1790.5
50% 3687.250000 3688.000000 1.0 -6.500000 -65.000000 -0.036300 1790.5
75% 3728.250000 3728.250000 1.0 -4.500000 -45.000000 -0.025130 1790.5
max 3771.500000 3769.000000 1.0 0.000000 0.000000 0.000000 1790.5
胜率 0.24087591240875914 均匀盈利率 0.06947545454545455 均匀吃亏率 -0.04991769230769231
盈亏额比例 0.44163528778913397 均匀盈亏额比例 1.39182030091121
5日胜率均值 0.22627737226277372 5日胜率标准差 0.2336633050908623
5日均匀盈利点数均值 6.981751824817518 5日均匀盈利点数标准差 13.814272375154243
'''

经过标准差std可知,盈亏的波动比力大,胜率也低,最大吃亏min阔别均匀吃亏mean,说明存在较大肥尾风险,

胜率用总盈利次数除以总买卖次数不敷以反应系统符合市场各个时段的稳定性,我们可以计较5日均匀胜率,按照5日胜率的变化可判定系统随着市场变化所具有的顺应性,5日盈利波动图以下:



从图形来看,胜率较不服稳,胜率标准差也大,说明系统对市场的顺应性差,上述买卖系统简直不是个好系统。

其他更多分析目标大师可按照需求自行计较。

下篇文章先容连系胜率、盈利率和凯利公式做资金治理。

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评

相关推荐

2023年1月18日股市收盘分析

2023年1月18日股市收盘分析

投资有风险,入市须谨慎所有分享都是我个人心得记录,极有可能存在我自己的偏见和错误

二手房成交量高就证明房子好?不,你错了!

二手房成交量高就证明房子好?不,你错了!

文章背景做了这么久自媒体,后台经常有网友提问,某某小区好不好,其实实地调研一下,

2022年全国法拍房挂拍60.6万套,成交率不足两成

2022年全国法拍房挂拍60.6万套,成交率不足两成

“法拍房”的成交价格通常低于市场价,从而一度成为购房人“捡漏”的优质资产。不过,

如何有效的提高客户成交率?2种预想、3个核心、6种方法

如何有效的提高客户成交率?2种预想、3个核心、6种方法

请您点击右上角红字“关注”我,非常感谢!要做好销售都是:做——学习——做——总结

一篇文章教你看懂抖音直播带货各项数据(新手小白教程 ...

一篇文章教你看懂抖音直播带货各项数据(新手小白教程 ...

哈喽,大家好,我是袁先生。今天和大家讲解下抖音的基础数据,让新手小白朋友们能够看

法拍房数据出炉,这个城市有点惨,挂拍量居首成交率垫底

法拍房数据出炉,这个城市有点惨,挂拍量居首成交率垫底

近年来,关于房贷断供潮、法拍房“暴增”的消息,不断吸引人们的关注。阿里拍卖的数据

换手率低而成交量放大是什么意思?

换手率低而成交量放大是什么意思?

其实两者是完全不同的两个概念呢,换手率表现的是市场投资者的参与度,而成交量表现的

如何提升转化率?这4个成交秘诀,成交率提高90%以上,最 ...

如何提升转化率?这4个成交秘诀,成交率提高90%以上,最 ...

大家好,我是坤龙。今天我想和大家一起分享:企业如何快速成交,能让顾客抢着成交的秘

如何分析零售行业的数据

如何分析零售行业的数据

随着移动互联网十年红利期的结束,线上流量成本越来越贵,许多企业纷纷将线上业务转移

7种成交法21种话术思路,教你提高转化率(心理分析+话术)

7种成交法21种话术思路,教你提高转化率(心理分析+话术)

​給大家分享7种实用的成交法,结合误区和注意事项,提炼了21种话术供你参考,相信你

成交数据统计与分析

成交数据统计与分析

要判断一个交易系统的好坏,离不开对成交数据的分析,我们可以记录每一笔平仓单的盈亏

成交率从35%增长至85%,这套台阶式成交方案,各行业都能用

成交率从35%增长至85%,这套台阶式成交方案,各行业都能用

关注【坤龙老师】头条号,每天收获最实用的新媒体营销干货。温馨提示:文末有福利假如

运营必懂的33个数据指标与分析方法

运营必懂的33个数据指标与分析方法

2017 年马云在某次年会演讲中提到一件让他惊讶的事情。在西湖边上他曾看到乞丐在用支

成交率提升独家秘籍!——再也不用担心客流大业绩不好了 ... ...

成交率提升独家秘籍!——再也不用担心客流大业绩不好了 ... ...

人人都说店铺成交率特别重要,今天我们就来仔细拆解一下成交率该怎么做:零售基础公式

电商数据分析指标体系

电商数据分析指标体系

电商数据分析指标体系分为八大类指标:总体运营指标网站流量累指标销售转化指标客户价

为什么线上客户成交率远低于线下客户

为什么线上客户成交率远低于线下客户

编辑导语:在做B端业务时,很多时候都需要跟用户打交道,在跟用户进行沟通的时候,我

揭秘国内拍卖成交率最高的民间收藏品拍卖背后的真相

揭秘国内拍卖成交率最高的民间收藏品拍卖背后的真相

羲之文化民藏真品线上拍卖会第六期又如期而至,所有上拍藏品均通过平台民藏真品征选流

销售额=流量*转化率*客单价,你的理解有多深?

销售额=流量*转化率*客单价,你的理解有多深?

社会日新月异,各种新型产业每隔一段时间便闯入人们视野,不断冲击社会产业结构,更冲

一季度全国法拍住宅成交率仅约31%,法拍房为何多流拍?

一季度全国法拍住宅成交率仅约31%,法拍房为何多流拍?

“超亿元”“大折扣”的法拍房往往能赚取不少的流量,尽管法拍房关注度有所提高,但是

提高成交率的5个步骤,你做过几步?

提高成交率的5个步骤,你做过几步?

为什么一些人的销售业绩,是另一些人的2倍、3倍、甚至是10倍?经过不断研究实践,我发

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信