# transformer-quant **Repository Path**: Feel_Again/transformer-quant ## Basic Information - **Project Name**: transformer-quant - **Description**: 基于Transformer架构的量化金融预测研究 - **Primary Language**: Python - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 4 - **Created**: 2022-12-07 - **Last Updated**: 2025-02-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # transformer-quant 基于Transformer架构的量化金融预测研究 ## 因子 | 名称 | 介绍 | 数量 | 备注 | | --------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---- | ---------------------------------- | | 开收高低 | 这分钟内的股价开收高低 | 4 | 使用过去1200条数据进行ZScore归一化 | | 成交量、成交金额 | | 2 | 使用过去1200条数据进行ZScore归一化 | | 分钟末尾买一至十、卖一至十价格 | | 20 | 使用过去1200条数据进行ZScore归一化 | | 分钟末尾买一至十、卖一至十数量 | | 20 | 使用过去1200条数据进行ZScore归一化 | | 上行/下行波动占比 | 过去n分钟内 $sum(上行r^2)/sum(r^2)$ | 2 | 25-已实现波动分解 | | 高频偏度 | $N^{1/2} *sum(r^3)/(sum(r^2))^{3/2}$ | 1 | 19-股票收益分布特征 | | 主买占比 | 主动买入成交金额/总成交金额 | 1 | 57-基于主动买入行为的选股因子 | | 平均单笔成交金额 | amount/trade_num | 0 | 不做因子,计算下面的因子需要用到 | | 平均单笔流入/流出金额占比 | total_inflow_amount/total_inflow_trade_num/AmtPerTrd | 2 | 46-日内分时成交中的玄机 | | 平均单笔流入流出金额之比 | AmtPreTrd_inFlow_ratio/AmtPreTrd_outFlow_ratio | 1 | 46-日内分时成交中的玄机 | | 量价相关性 | corr(close, vol) | 1 | 69-高频因子的现实与幻想 | | 大单资金净流入率 amt_netinflow_bigorder_ratio | | 1 | 46-日内分时成交中的玄机 | | 大单驱动涨幅 mom_bigorder | | 1 | 46-日内分时成交中的玄机 | | 大买/卖成交金额占比 | 大买成交金额/总成交金额 (大买是指大单买入,大单指的是成交量大于均值+N倍标准差的买卖单) | 2 | 56-买卖单数据中的alpha | | 大单成交金额占比、大买大卖成交金额占比差值 | 上面两个相加、相减 | 2 | 56-买卖单数据中的alpha | | 小买/卖主动成交度 | 小买(卖)单中主动成交的金额/小买(卖)单成交金额 (小、中、大单按照均值、均值+1倍标准差为界) | 2 | 85-买卖单主动成交中的隐藏信息 | | 买单/卖单集中度 | sum(买单/卖单成交金额^2)/总成交金额^2 | 2 | 56-买卖单数据中的alpha | | 买卖单集中度之和 | 上面两个相加 | 1 | 56-买卖单数据中的alpha | | 主买强度 | mean(主买金额)/std(主买金额) | 1 | 57-基于主动买入行为的选股因子 | | 净主买强度 | mean(主买金额-主卖金额)/std(主买金额-主卖金额) | 1 | 57-基于主动买入行为的选股因子 | 用到的分钟频因子: | 名称 | 数量 | | ------------------------------ | ---- | | 开收高低 | 4 | | 分钟成交量、成交金额 | 2 | | 分钟末尾买一至十、卖一至十价格 | 20 | | 分钟末尾买一至十、卖一至十数量 | 20 | | 主买占比 | 1 | | 主买强度 | 1 | | 高频偏度 | 1 | | 上行/下行波动占比 | 2 | | 量价相关性 | 1 | | 平均单笔流入/流出金额占比 | 2 | | 大单资金净流入率 | 1 | | 大单驱动涨幅 | 1 | 日频因子: | 名称 | 数量 | | ------------------- | ---- | | 大买/卖成交金额占比 | 2 | | 小买/卖主动成交度 | 2 | | 买单/卖单集中度 | 2 | ## TODO ```sh ## baseline # BiLSTM 1*256 zz500 15epoch lr0.001 python main.py --save-path "0-LSTM" --model "LSTM" ## Model # # Transformer 2层256 # python main.py --save-path "0-Trans" --model "Transformer" # # Transformer+Time2Vec # python main.py --save-path "0-base" # +Attention python main.py --save-path "0-LSTM+Attention" --model "LSTM+Attention" python main.py --save-path "0-final++" --model "Final++" ## Loss # Final CCC python main.py --save-path "0-CCC" --loss-fn "CCC" # LSTM IC python main.py --save-path "0-LSTM-IC" --model "LSTM" --loss-fn "IC" # LSTM CCC python main.py --save-path "0-LSTM-CCC" --model "LSTM" --loss-fn "CCC" ## stock # hs300 TODO python main.py --save-path "0-hs300" --stock "hs300" # zz1000 TODO python main.py --save-path "0-zz1000" --stock "zz1000" # zz1800 TODO python main.py --save-path "0-zz1800" --stock "hs300" "zz500" "zz1000" # LSTM hs300 python main.py --save-path "0-LSTM-hs300" --stock "hs300" --model "LSTM" ## minute_len TODO python main.py --save-path "0-seq480" --seq-len 480 python main.py --save-path "0-seq720" --seq-len 720 python main.py --save-path "0-seq1200" --seq-len 1200 ## pred_time_points TODO # python main.py --save-path "0-8points" --pred-time-points "10:00:00" "10:30:00" "11:00:00" "11:45:00" "13:30:00" "14:00:00" "14:30:00" "15:15:00" python main.py --save-path "0-8points" --model "Final" --pred-time-points "10:00:00" "10:30:00" "11:00:00" "11:45:00" "13:30:00" "14:00:00" "14:30:00" "15:15:00" ## daily factor # python main.py --save-path "0-daily" --model "TimeTransformer+daily" python main.py --save-path "0-final-base" --model "Final" ## final TODO # python main.py --save-path "0-final" --model "TimeTransformer+daily" --loss-fn "CCC" --stock "hs300" "zz500" "zz1000" --seq-len 480 --epoch-num 30 python main.py --save-path "0-LSTM-final" --model "LSTM" --stock "zz500" "zz1000" --seq-len 480 --pred-time-points "10:00:00" "10:30:00" "11:00:00" "11:45:00" "13:30:00" "14:00:00" "14:30:00" "15:15:00" python main.py --save-path "0-final-seq480-zz1500-8points" --model "Final" --stock "zz500" "zz1000" --seq-len 480 --pred-time-points "10:00:00" "10:30:00" "11:00:00" "11:45:00" "13:30:00" "14:00:00" "14:30:00" "15:15:00" ``` 最终模型: IC、CCC hs300,zz1000,zz1800 长度480、720、1200 每日预测8次 结合日频因子 最终实验: zz1800+seq_len480或720+日频因子+CCC+30epoch +8points? class precision recall f1-score support 0 0.4708 0.4294 0.4492 27696 1 0.6332 0.7240 0.6756 47957 2 0.4951 0.4157 0.4519 27690 数据: k=15 0.6609 0.5381 0.4833 0.4954 k=45 0.5625 0.5330 0.5230 0.5256 k=75 0.5585 0.5324 0.5282 0.5294 k=150 0.4777 0.4695 0.4607 0.4582 请用k的大小作为列,行是acc、precision、recall、macrof1,生成markdown格式的表格 | k | accuracy(%) | precision(%) | recall(%) | f1(%) | | --- | ----------- | ------------ | --------- | ----- | | 15 | 66.09 | 53.81 | 48.33 | 49.54 | | 45 | 56.25 | 53.30 | 52.30 | 52.56 | | 75 | 55.85 | 53.24 | 52.82 | 52.94 | | 150 | 47.77 | 46.95 | 46.07 | 45.82 |