python代码实现了一个金融数据处理和分析的功能,主要围绕国债期货及相关指数数据展开

发布于:2025-02-10 ⋅ 阅读:(123) ⋅ 点赞:(0)
# 忽略某些模块的提示信息
import warnings
warnings.filterwarnings("ignore")
# 在全局配置中添加RQData账号信息
import rqdatac as rq 

from typing import List
import pandas as pd
import numpy as np
import re
from datetime import datetime, timedelta,time
from dateutil.relativedelta import relativedelta
from vnsw.alpha_research.data_center import DataCenter
from vnpy.trader.constant import Exchange, Interval
from vnpy.trader.setting import SETTINGS
rq.init(username=SETTINGS["datafeed.username"],password=SETTINGS["datafeed.password"])

def to_clickhouse(dc,table_name,df):
    SAVE_REFERENCE_QUERY = "INSERT INTO {table} VALUES"
    query = SAVE_REFERENCE_QUERY.format(table=table_name)

    # 生成更新时间列
    update = datetime.now()
    df["update"] =update
    # 生成要传参用的DataFrame
    # 写入数据库并返回条数
    try:
        dc.client.insert_dataframe(query, df)
        print('已存储',set(df['symbol']),min(df['interval']),min(df['datetime']),'至',max(df['datetime']))
    except Exception as e:
        print ("报错",e)

def load_rq_data(symbols:List[str],exchange:Exchange,start_date:datetime,end_date:datetime,frequency:str)->pd.DataFrame:#米筐的total_turnover是成交额,open_interest是持仓量
    if frequency=='1d' or frequency=='1m':
        df=rq.get_price(symbols, start_date, end_date,frequency,expect_df=True).reset_index()
    else:
        df=pd.DataFrame()
        start_date=start_date.replace(hour=0, minute=0, second=0,microsecond=0)
        while start_date<end_date:
            # print(start_date)
            df2=rq.get_price(symbols, start_date, start_date,frequency,expect_df=True) #米筐不看时分秒,会把所有涵盖日期的所有的x分钟bar返回
            if df2 is None:
                start_date+=relativedelta(days=1)
                continue
            elif len(df2):
                # print(df2)
                df=pd.concat([df,df2.reset_index()])
            start_date+=relativedelta(days=1)
        if max(df['datetime']).time()<time(15, 15):
            df.drop(df[df['datetime']==max(df['datetime'])].index,inplace=True)  
  
    df.rename(columns={
   'order_book_id':'symbol','date':'datetime','close':'close_price','open':'open_price','high':'high_price','low':'low_price','volume':'volume','open_interest':'open_interest',

网站公告

今日签到

点亮在社区的每一天
去签到