金字塔期货日线分钟线python导出
以下是金字塔软件中期货日线和分钟线,结算价 读取 导出
点击查看代码
import struct
import pandas as pd
import numpy as np
import pickle
import _pickle as cPickle
import gzip
import os
#%%
#把 金字塔的日线数据 导出到pkl
def load(path):
with gzip.open(path, 'rb', compresslevel=1) as file_object:
raw_data = file_object.read()
return cPickle.loads(raw_data)
def save(data, path):
serialized = cPickle.dumps(data)
with gzip.open(path, 'wb', compresslevel=1) as file_object:
file_object.write(serialized)
def get_futrue_day(filename): #获取期货日线数据
ofile=open(filename,'rb')
buf=ofile.read()
b=12
no=int((len(buf)-b)/50)
e=b+50
# x_dict=[]
ix1=0
date_list=np.full(no,0)
time_list=np.full(no,0)
open_list=np.full(no,0.0)
high_list=np.full(no,0.0)
low_list=np.full(no,0.0)
close_list=np.full(no,0.0)
openint_list=np.full(no,0)
vol_list=np.full(no,0)
money_list=[0]*no
upnum_list=np.full(no,0) #涨数
dnnum_list=np.full(no,0) #跌数
fbnum_list=np.full(no,0) #分笔
open_vol_list=[0]*no #开盘量
open_money_list=[0]*no #开盘额
for ix1 in range(0,int(no)):
# print(b,e,buf[b:e])
a=struct.unpack('=dfffffffhhhff',buf[b:e]) #日线数据格式 日期 open high low close vol openint 结算价
date_list[ix1]=a[0]
open_list[ix1]=a[1]
high_list[ix1]=a[2]
low_list[ix1]=a[3]
close_list[ix1]=a[4]
openint_list[ix1]=a[5]
vol_list[ix1]=a[6]
money_list[ix1]=a[7]
upnum_list[ix1]=a[8]
dnnum_list[ix1]=a[9]
fbnum_list[ix1]=a[10]
open_vol_list[ix1]=a[11]
open_money_list[ix1]=a[12]
b=b+50
e=e+50
x_df=pd.DataFrame({'date':np.array(date_list),'open':np.array(open_list),'high':np.array(high_list),
'low':np.array(low_list),'close':np.array(close_list),'openint':np.array(openint_list),
'vol':np.array(vol_list),'money':money_list,'涨数':upnum_list,'跌数':dnnum_list,
'分笔':fbnum_list,'开盘量':open_vol_list,'开盘额':open_money_list})
x_df.drop_duplicates(subset=['date'],inplace=True)
x_df.index=pd.to_datetime(x_df['date'],origin='1899-12-30',unit='D')
return x_df[['open','high','low','close','openint','vol','money','涨数','跌数','分笔','开盘量','开盘额']]
def get_futrue_min(filename): #获取期货分钟线数据
ofile=open(filename,'rb')
buf=ofile.read()
no=int((len(buf)-16)/50)
b=16
e=b+50
# x_dict=[]
ix1=0
date_list=[0]*no
time_list=np.full(no,0)
open_list=np.full(no,0.0)
high_list=np.full(no,0.0)
low_list=np.full(no,0.0)
close_list=np.full(no,0.0)
openint_list=np.full(no,0)
vol_list=np.full(no,0)
money_list=np.full(no,0)
upnum_list=np.full(no,0) #涨数
dnnum_list=np.full(no,0) #跌数
fbnum_list=np.full(no,0) #分笔
for ix1 in range(0,int(no)):
# a=struct.unpack('dfffffffhhlhhh',buf[b:e]) #分钟数据格式 日期 open high low close openint vol 成交额 涨数 跌数 分笔
a=struct.unpack('=dfffffffhhhff',buf[b:e])
dt=int(a[0]*24*3600)
date_list[ix1]=dt
open_list[ix1]=a[1]
high_list[ix1]=a[2]
low_list[ix1]=a[3]
close_list[ix1]=a[4]
openint_list[ix1]=a[5]
vol_list[ix1]=a[6]
money_list[ix1]=a[7]
upnum_list[ix1]=a[8]
dnnum_list[ix1]=a[9]
fbnum_list[ix1]=a[10]
b=b+50
e=e+50
x_df=pd.DataFrame({'date':np.array(date_list),'open':np.array(open_list),'high':np.array(high_list),
'low':np.array(low_list),'close':np.array(close_list),'openint':np.array(openint_list),
'vol':np.array(vol_list),'money':money_list,'分笔':fbnum_list})
x_df.index=pd.to_datetime(x_df['date'],origin='1899-12-30',unit='s')
return x_df[['date','open','high','low','close','openint','vol','money','分笔']]
def get_futrue_day_settle(filename): #获取期货日线结算数据
ofile=open(filename,'rb')
buf=ofile.read()
no=int(len(buf)/8)
b=0
e=b+8
ix1=0
date_list=np.full(no,0)
settle_list=np.full(no,0.0)
for ix1 in range(0,int(no)):
a=struct.unpack('lf',buf[b:e]) #日线数据格式 日期 结算价
date_list[ix1]=a[0]
settle_list[ix1]=a[1]
b=b+8
e=e+8
x_df=pd.DataFrame({'date':np.array(date_list),
'settle':np.array(settle_list)})
x_df.index=pd.to_datetime(x_df['date'],unit='s')
return x_df[['settle']]
#%%获取外盘数据
name_dict={'美黄金指数':'D:\\Weisoft Stock(x64)\\Data\\CM\\Day\\GC13',
'美白银指数':'D:\\Weisoft Stock(x64)\\Data\\CM\\Day\\SI13',
'美精铜指数':'D:\\Weisoft Stock(x64)\\Data\\CM\\Day\\HG13',
'美原油指数':'D:\\Weisoft Stock(x64)\\Data\\CE\\Day\\CL13',
'纳指':'D:\\Weisoft Stock(x64)\\Data\\CI\\Day\\NQ00',
'标普':'D:\\Weisoft Stock(x64)\\Data\\CI\\Day\\ES00',
'道琼斯':'D:\\Weisoft Stock(x64)\\Data\\CI\\Day\\YM00',
}
for ix1 in name_dict.keys():
filename=name_dict[ix1]
data=get_futrue_day(filename)
save(data,'D:\\Python\\get_data\\data_外盘\\day\\'+ix1)
#%% 获取结算数据例子
data_1=get_futrue_day('D:\\Weisoft Stock(x64)\\Data\\DQ\\Day\\C01') #获取C01日线的高开低收
data_2=get_futrue_day_settle('D:\\Weisoft Stock(x64)\\Data\\DQ\\Day\\C01_Ex') #获取C01日线的结算数据
data_3=get_futrue_min('D:\\Weisoft Stock(x64)\\Data\\DQ\\Min1\\C01') #获取c01的1分钟数据