使用 freqAI 可以做什么
- 完成配置后可以使用 freqAI 去获得一个
使用 freqtrade 需要准备什么
- strategy
- configuration file
- model
他们的路径在这里
freqtrade/templates/FreqaiExampleStrategy.py, freqtrade/freqai/prediction_models/LightGBMRegressor.py, and config_examples/config_freqai.example.json, respectively.
设置配置文件
"freqai": {
"enabled": true,
"purge_old_models": 2,
"train_period_days": 30, //用于训练数据的天数
"backtest_period_days": 7,
"identifier" : "unique-id",
"feature_parameters" : {
"include_timeframes": ["5m","15m","4h"],
"include_corr_pairlist": [
"ETH/USD",
"LINK/USD",
"BNB/USD"
],
"label_period_candles": 24,
"include_shifted_candles": 2,
"indicator_periods_candles": [10, 20]
},
"data_split_parameters" : {
"test_size": 0.25
}
}
设置策略
startup_candle_count: int = 20
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe = self.freqai.start(dataframe, metadata, self)
return dataframe
def feature_engineering_expand_all(self, dataframe: DataFrame, period, **kwargs) -> DataFrame:
dataframe["%-rsi-period"] = ta.RSI(dataframe, timeperiod=period)
dataframe["%-mfi-period"] = ta.MFI(dataframe, timeperiod=period)
dataframe["%-adx-period"] = ta.ADX(dataframe, timeperiod=period)
dataframe["%-sma-period"] = ta.SMA(dataframe, timeperiod=period)
dataframe["%-ema-period"] = ta.EMA(dataframe, timeperiod=period)
return dataframe
def feature_engineering_expand_basic(self, dataframe: DataFrame, **kwargs) -> DataFrame:
dataframe["%-pct-change"] = dataframe["close"].pct_change()
dataframe["%-raw_volume"] = dataframe["volume"]
dataframe["%-raw_price"] = dataframe["close"]
return dataframe
def feature_engineering_standard(self, dataframe: DataFrame, **kwargs) -> DataFrame:
dataframe["%-day_of_week"] = (dataframe["date"].dt.dayofweek + 1) / 7
dataframe["%-hour_of_day"] = (dataframe["date"].dt.hour + 1) / 25
return dataframe
def set_freqai_targets(self, dataframe: DataFrame, **kwargs) -> DataFrame:
dataframe["&-s_close"] = (
dataframe["close"]
.shift(-self.freqai_info["feature_parameters"]["label_period_candles"])
.rolling(self.freqai_info["feature_parameters"]["label_period_candles"])
.mean()
/ dataframe["close"]
- 1
)
return dataframe
startup_candle_count,策略的启动时期,策略的启动时期,是指在这个时间内,指标的计算会有误差,但具体的启动时间是多长时间,为了解决这个问题,给策略分配 startup_candle_count 这个属性,该值是计算指标所需要的最大周期,例如
startup_candle_count = 100
dataframe['ema100'] = ta.EMA(dataframe, timeperiod=100)
动态阀门
变量表
时间关键帧
特点
字典
安装前提
注意事项
不能与 VolumePairlists
但是可以和 ShufflePairlist VolumePairlist
启动 freqAI
freqtrade trade --config config_examples/config_freqai.example.json --strategy FreqaiExampleStrategy --freqaimodel LightGBMRegressor --strategy-path freqtrade/templates
当你启动 freqAI 后,他会立即生成新的模型,如果你希望在启动半小时后才开始训练新的模型
"freqai": {
"live_retrain_hours": 0.5
}
或者告诉 freqAI 避免早于半小时开始训练
"freqai": {
"expired_hours": 0.5
}
如果想要清空旧的模型,节省磁盘空间
"freqai": {
"purge_old_models": true
}
如果想使用已经训练的模型,指定 identifier
"freqai": {
"identifier": "example",
}
然后 freqAI 会根据所有的配置自动下载需要的数据(如果没有的话)
回测
回测模式不同于之前,需要提前下载数据,并且时间范围要更大一些
启动回测模式的命令
freqtrade backtesting --strategy FreqaiExampleStrategy --strategy-path freqtrade/templates --config config_examples/config_freqai.example.json --freqaimodel LightGBMRegressor --timerange 20210501-20210701