This framework is used to analyse commodity futures factors, including correlation analysis, group analysis, industry analysis and factor backtesting.
Besides visiting the following website directly, you can also refer to the tutorial folder directly.
grasping data:
commodity_pool_data
factor_data
commodity futures basics data
commodity futures daily market data
commodity futures industry data
continuous futures contract data
construct factor, commodity pool, signal, weight:
construct factor
construct commodity pool
construct signal
construct weight
factor test:
factor test
backtesting:
backtesting
group backtesting and analysis:
group_backtesting and analysis
The following is the API reference documentation. You can refer to it:
/docs/build/html/index.rst,
in which you can see:
The Data can be grasped from the following url:
链接:https://pan.baidu.com/s/1z8RBAI8E7gB9tuLKsYGCyw 提取码:l7fz
After downloading the data, you need to put the data folder in the root path.
import os
from pathlib import Path
os.chdir(Path(os.getcwd()).parent.parent)
os.getcwd()
'D:\\LFProjects\\NewPythonProject'
from factor_test.base import BaseFactorTest
from backtesting.group_backtesting import GroupBacktesting
from backtesting.period_backtesting import LongShortPeriodBacktesting
self = LongShortPeriodBacktesting(rate=0.0000, period=1, price='open')
self.set_factor(group='TradeHoldFactor', name='BilateralTradeHoldFactor1', N=20, window=1)
self.set_commodity_pool(group='DynamicPool', name='DynamicPool3')
self.set_signal(group='CrossSectionSignal', name='CrossSectionSignal1', quantile=0.6)
self.set_weight(group='EqualWeight', name='NoRiskNeutralEqualWeight')
self.run_backtesting()
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2830/2830 [00:10<00:00, 266.22it/s]
self.output_backtest_result()
factor_test = BaseFactorTest()
factor_test.set_factor(group='TradeHoldFactor', name='BilateralTradeHoldFactor1',N=20,window=1)
factor_test.get_Frank_vs_Rrank(group_num=10, period=1)
factor_test.get_Frank_vs_Rrank(group_num=10, period=5)
factor_test.get_Frank_vs_Rrank(group_num=10, period=10)
factor_test.get_Frank_vs_Rrank(group_num=10, period=20)
factor_test.get_Frank_vs_Rrank(group_num=5, period=1, industry='化工能源')
factor_test.get_Frank_vs_Rrank(group_num=5, period=1, industry='有色_贵金属')
factor_test.get_Frank_vs_Rrank(group_num=5, period=1, industry='农产品_软商品')
factor_test.get_Frank_vs_Rrank(group_num=5, period=1, industry='油脂油料')
factor_test.get_Frank_vs_Rrank(group_num=5, period=5, industry='油脂油料')
factor_test.get_Frank_vs_Rrank(group_num=5, period=10, industry='油脂油料')
factor_test.get_Frank_vs_Rrank(group_num=5, period=20, industry='油脂油料')
factor_test.get_Frank_vs_Rrank(group_num=5, period=1, industry='黑色')
factor_test.get_Frank_vs_Rrank(group_num=5, period=20, industry='黑色')
self.get_factor_PN_stats()
group_test = GroupBacktesting(group_num=10, period=1)
group_test.set_factor(group='TradeHoldFactor', name='BilateralTradeHoldFactor1', N=20, window=1)
group_test.set_commodity_pool(group='DynamicPool', name='DynamicPool3')
group_test.set_signal(group='GroupSignal', name='GroupLongSignal1')
group_test.get_group_distribution_per_symbol(period=1, shift=0)
group_test.get_groupby_pool_in_out(figsize=(30,30), annot_fontsize2=18, heatmap_rotation2=True)
factor_test = BaseFactorTest()
factor_test.set_factor(group='TradeHoldFactor', name='BilateralTradeHoldFactor1',N=20,window=10)
factor_test.get_Frank_vs_Rrank(group_num=10, period=1)
factor_test.get_Frank_vs_Rrank(group_num=10, period=5)
factor_test.get_Frank_vs_Rrank(group_num=10, period=10)
factor_test.get_Frank_vs_Rrank(group_num=10, period=20)
factor_test.get_Frank_vs_Rrank(group_num=10, period=40)
factor_test.get_Frank_vs_Rrank(group_num=10, period=60)
factor_test.get_factor_distribution_per_symbol()