import datetime
import time
import pandas as pd
from source_data.tqz_load_source_data import TQZSourceData
# from public_module.tqz_extern.tools.pandas_operator.pandas_operator import pandas
pd.set_option('mode.chained_assignment', None)
class TQZFootPrintTool:
@classmethod
def get_timestamp(cls, date_str: str):
dt_str = f'{date_str} 08:00:00'
s_timestamp = time.strptime(dt_str, "%Y-%m-%d %H:%M:%S")
return int(time.mktime(s_timestamp) * 1000)
if __name__ == '__main__':
symbol = 'BTCUSDT'
start_date, end_date = datetime.datetime.strptime('2022-05-01', '%Y-%m-%d').date(), datetime.datetime.strptime('2022-05-02', '%Y-%m-%d').date()
mergeTrades_data = TQZSourceData.load_mergeTrades_data(date_str=str(start_date), symbol=symbol)
interval = 15 * 60000
imbalance_price_ratio = 3
qty_digital_point_counts = 3
bar_start_timestamp = TQZFootPrintTool.get_timestamp(date_str=str(start_date))
bar_end_timestamp = int(bar_start_timestamp) + interval
daily_footPrint_df = pd.DataFrame(columns=["price", "timestamp", "bid_size", "ask_size", "bid_imbalance", "ask_imbalance"])
while True:
bar_trades_data = mergeTrades_data[(bar_start_timestamp <= mergeTrades_data['datetime']) & (mergeTrades_data['datetime'] < bar_end_timestamp)]
# 1. create bar_price_size_df
bar_price_size_df = pd.DataFrame(columns=["price", "bid_size", "ask_size", "bid_imbalance", "ask_imbalance"])
for value in list(bar_trades_data.groupby('price')):
bar_price_size_df = bar_price_size_df.append({
'price': value[0],
'ask_size': round(value[1][value[1]["isBuyerMaker"] == False]['qty'].sum(), qty_digital_point_counts),
'bid_size': round(value[1][value[1]["isBuyerMaker"] == True]['qty'].sum(), qty_digital_point_counts)
}, ignore_index=True)
bar_price_size_df['ask_size_shift_-1'] = bar_price_size_df['ask_size'].shift(-1)
bar_price_size_df['bid_size_shift_1'] = bar_price_size_df['bid_size'].shift(1)
bar_price_size_df.dropna(subset=['ask_size_shift_-1', 'bid_size_shift_1'], inplace=True)
bar_price_size_df.loc[bar_price_size_df['bid_size'] > (imbalance_price_ratio * bar_price_size_df['ask_size_shift_-1']), 'bid_imbalance'] = True
bar_price_size_df.loc[(imbalance_price_ratio * bar_price_size_df['bid_size_shift_1']) < bar_price_size_df['ask_size'], 'ask_imbalance'] = True
bar_price_size_df.fillna(False, inplace=True)
bar_price_size_df.sort_values('price', ascending=False, inplace=True)
bar_price_size_df.reset_index(inplace=True)
del bar_price_size_df['index']
del bar_price_size_df['ask_size_shift_-1']
del bar_price_size_df['bid_size_shift_1']
# 2. merge daily_footPrint_df & bar_price_size_df
bar_price_size_df['timestamp'] = bar_start_timestamp
daily_footPrint_df = pd.concat([daily_footPrint_df, bar_price_size_df], axis=0)
# 3. update bar_start_timestamp & bar_end_timestamp at last.
bar_start_timestamp = bar_end_timestamp
bar_end_timestamp = int(bar_start_timestamp) + interval
# 4. next day.
if str(pd.to_datetime(f'{bar_start_timestamp}', unit='ms').date()) != str(start_date):
# 4.1 write foot_print.csv.
daily_footPrint_df.to_csv(f'F:/tqz_test/{symbol}_{str(int(interval / 60000))}mBar_footPrint_{str(start_date)}.csv', index=False)
# 4.2 change start_date & mergeTrades_data & daily_footPrint_df.
start_date += datetime.timedelta(days=1)
mergeTrades_data = TQZSourceData.load_mergeTrades_data(date_str=str(start_date), symbol=symbol)
daily_footPrint_df = pd.DataFrame(columns=["price", "timestamp", "bid_size", "ask_size", "bid_imbalance", "ask_imbalance"])
if start_date > end_date:
break
量化交易之数字货币篇 - 生成foot print因子数据
原创ErwinSmith ©著作权
文章标签 python pandas 机器学习 文章分类 JavaScript 前端开发
©著作权归作者所有:来自51CTO博客作者ErwinSmith的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
量化交易开发之基本语法(三)
本教程则是以量化的情景从零讲解python编程,所以将更适合想学做量化策略的人。
数据 变量名 python -
量化交易开发之函数API(四)
我们讲解一下python中的函数知识
API 数据 python -
量化交易开发之初识量化(一)
本系列课程将开启手把手保姆级实战课程,开发属于你自己的量化策略!!!
量化交易 策略因子 实战教学 -
量化交易之数字货币篇 - 高频数据特征提取
高频数据的特征提取
python 人工智能 pandas -
量化交易之hft篇 - alpha因子 (DiffAlpha)
【代码】量化交易之hft篇 - alpha因子 (DiffAlpha)
c++ #include #pragma -
量化交易之hft篇 - alpha因子 (BookAlpha)
【代码】量化交易之hft篇 - alpha因子 (BookAlpha)
c++ #include ios #pragma -
量化交易之数字货币篇 - 高频数据特征工程(hft数据低频化)
高频数据低频化
python 机器学习 人工智能 -
量化交易之C++篇 - 定义因子指针模板
【代码】量化交易之C++篇 - 定义因子指针模板。
c++ 开发语言 算法 Stack #include -
量化交易之单因子策略
无趣吧?收入不能太低吧?学历不能太差吧?……看起来,确实各个都是很一般般的要.
算法 标准差 搜索 数据验证 -
量化交易之QT篇 - IController
【代码】量化交易之QT篇 - IController。
qt ui 开发语言 linux #include -
量化交易之QT篇 - TQZMainController
【代码】量化交易之QT篇 - TQZMainController。
c++ 开发语言 linux qt #include -
量化交易之QT篇 - TQZMessageController
【代码】量化交易之QT篇 - TQZMessageController。
qt linux c++ Text #include