# coding:utf-8 from datetime import datetime as dt import os import pandas as pd import pymysql from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback from xtquant.xttype import StockAccount from xtquant import xtdata, xtconstant from sqlalchemy import create_engine pd.set_option('display.max_columns', None) # 设置显示最大行 df = pd.DataFrame(columns=['time', 'open', 'close', 'high', 'low', 'volume', 'amount']) field = ['time', 'open', 'close', 'high', 'low', 'volume', 'amount'] eng_w = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/qihuo?charset=utf8',) def avg_price(df): print('avg_price') daily_avg_price = [] for i in range(1, len(df) + 1): daily_avg_price.append(round(sum(df['amount'][:i]) / sum(df['volume'][:i]) / 10, 2)) df['daily_avg_price'] = daily_avg_price return df def over_avg(datas): global df for stock_code in datas: df_temp = pd.DataFrame(datas[stock_code]) df_temp['time'] = df_temp['time'].apply(lambda x: dt.fromtimestamp(x / 1000.0)) df = pd.concat([df, df_temp], axis=0, ignore_index=True) df = avg_price(df) df = df[['time', 'open', 'close', 'high', 'low', 'volume', 'amount', 'daily_avg_price']] print(df) if __name__ == '__main__': print('start') xtdata.subscribe_quote('rb00.SF', '1d', '', '') xtdata.download_history_data('rb00.SF', '1d', '', '') data = xtdata.get_market_data_ex([], ['rb00.SF'], period='1d') print(type(data['rb00.SF'])) exit() db_pool = pymysql.connect(host='localhost', user='root', port=3307, password='r6kEwqWU9!v3', database='qihuo') cursor_pool = db_pool.cursor() data['rb00.SF'].to_sql('rb00_1d' , con=eng_w, index=False, if_exists='replace', chunksize=20000) exit() fts = xtdata.get_stock_list_in_sector('中金所主力合约') print(fts, len(fts)) fts_list = ['IF00.CFFEX', 'IH00.CFFEX', 'IC00.CFFEX', 'IO00.CFFEX'] # t = dt.now().strftime('%Y%m%d') s = 'IF00.CFFEX' new_s ='IF00.IF' data = xtdata.get_market_data_ex([], ['IF00.IF', 'RB01.SHFE'], period='1d', end_time='', count=-1) df = data['IF00.IF'][['open', 'close', 'high', 'low', 'volume', 'amount']].copy() print('df', df) df2 = data['RB01.SHFE'][['open', 'close', 'high', 'low', 'volume', 'amount']].copy() print('df2', df2) df2['daily_point'] = df2['close'] - df2['open'] # 计算每日波动点数,开盘-收盘 df['daily_point'] = df['close'] - df['open'] # 选取需要的字段 print(df.describe()) # 描述统计信息 describe_stats = df['daily_point'].describe() # 正数的平均值 positive_mean = df[df['daily_point'] > 0]['daily_point'].mean() # 负数的平均值 negative_mean = df[df['daily_point'] < 0]['daily_point'].mean() # 绝对值的平均值 absolute_mean = df['daily_point'].abs().mean() # 分位数分布 percentiles = df['daily_point'].quantile([0.25, 0.5, 0.75]) # 统计正数的数量 positive_count = len(df[df['daily_point'] > 0]) # 统计负数的数量 negative_count = len(df[df['daily_point'] < 0]) print("统计信息:\n", describe_stats) print("正数的平均值:", positive_mean) print("负数的平均值:", negative_mean) print("绝对值的平均值:", absolute_mean) print("25%、50%、75% 分布:\n", percentiles) print("正数的数量:", positive_count) print("负数的数量:", negative_count)