金字塔期货日线分钟线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分钟数据
posted @ 2024-08-10 08:32  远方_2408  阅读(19)  评论(0)    收藏  举报