vn.py官网
开源量化社区
Member
avatar
加入于:
帖子: 88
声望: 1

一般做期货交易的策略时,使用vnpy跑完回测后,成交记录多空记录是混杂在一起的。有时我们需要对每笔的盈亏进行统计,然后根据统计结果再进行策略优化。如果把成交记录制作成柱形图的话,能大大提高策略研究的效率。
下面是将成交记录制作成柱形图的代码,柱形图上的数字就是该笔交易的盈亏数据,下面X轴对应交易时间。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import pandas as pd
from pandas import Series,DataFrame
from numpy.random import randn
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from datetime import datetime

matplotlib.rcParams['font.family'] = 'SimSun'
plt.rcParams['axes.unicode_minus'] = False #解决Y轴不显示负值的原因是simsun字体中没有负号'-'

# ----------------------成交记录二次分析---------------
number = 0
kong = 0
duo = 0

data = pd.read_csv(r"C:\Users\Administrator\Desktop\主力合约期货\回测结果\成交记录二次分析柱形图\Y2009.csv",usecols=[2,3,4,5,6,7,8]) # 读取成交记录为dataframe格式数据

csv_df = pd.DataFrame(data)

csv_df["盈利"]= 0
csv_df["亏损"]= 0

for index, row in csv_df.iterrows():
    csv_df.loc[index,'时间'] = row['时间'][0:-9]
    if row['方向'] == '空':
        kong = row['价格']

    elif row['方向'] == '多':
        duo = row['价格']
    number += 1 
    if number == 2:
        a = int(kong) - int(duo)
        if a > 0:
            csv_df.loc[index,'盈利'] = a
        else:
            csv_df.loc[index,'亏损'] = a
        number = 0

csv_df.set_index(['时间'],inplace=True)

csv_df[['盈利','亏损']].plot(kind='bar',color = ['g','r'],title='盈亏柱形图',rot = 45,fontsize = 8,width=2,grid =True)
plt.xlabel("时间")
plt.ylabel("元")
csv_df = csv_df.reset_index()
for index,value in csv_df["盈利"].iteritems():
    if value == 0:
        continue
    plt.text(x=index-0.5 , y=value+0.1 , s=f"{value}",horizontalalignment = 'center',fontsize=10)
for index,value in csv_df["亏损"].iteritems():
    if value == 0:
        continue
    plt.text(x=index+0.5 , y=value-1 , s=f"{value}",horizontalalignment = 'center',fontsize=10)

plt.show()

下面是制作后的柱形图:
description

Administrator
avatar
加入于:
帖子: 5100
声望: 295

感谢分享,给你加个精华

Member
avatar
加入于:
帖子: 30
声望: 3

感谢分享!

Member
avatar
加入于:
帖子: 30
声望: 3

挺实用的功能,试了下但是报错!
请教一下@李春宝,这个报错是什么问题?vnpy中安装了matplotlib’的呀。

import matplotlib.pyplot as plt
File "C:\vnstudio\lib\site-packages\matplotlib__init.py", line 914, in <module>
cbook._get_data_path("matplotlibrc"),
File "C:\vnstudio\lib\site-packages\matplotlib\cbook\
init__.py", line 480, in _get_data_path
return Path(matplotlib.get_data_path(), *args)
AttributeError: module 'matplotlib' has no attribute 'get_data_path

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号