一般做期货交易的策略时,使用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()
下面是制作后的柱形图: