如何用Freqtrade PyTorch集成构建智能加密货币交易策略:从入门到实战

【免费下载链接】freqtrade Free, open source crypto trading bot 【免费下载链接】freqtrade 项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade

Freqtrade是一款免费开源的加密货币交易机器人,支持通过PyTorch深度学习框架构建强大的交易策略。本文将带你了解如何利用Freqtrade的PyTorch集成功能,从零开始打造一个由人工智能驱动的加密货币交易系统,无需深厚的编程背景也能快速上手。

为什么选择Freqtrade PyTorch集成?

在加密货币交易领域,传统的技术指标分析往往难以应对市场的复杂波动。Freqtrade的PyTorch集成功能让你能够利用深度学习的强大能力,从海量市场数据中挖掘潜在规律,构建更加智能的交易决策模型。

PyTorch作为Facebook开发的深度学习框架,以其灵活的动态计算图和丰富的工具生态系统,成为研究和开发深度学习模型的理想选择。Freqtrade将PyTorch无缝整合到交易流程中,让你可以专注于模型设计而不必担心交易执行的细节。

FreqAI PyTorch架构图 FreqAI PyTorch架构图展示了Freqtrade中PyTorch模型的层次结构,从基础模型到具体的回归和分类实现

快速开始:Freqtrade PyTorch环境搭建

安装Freqtrade与PyTorch依赖

Freqtrade提供了简单的安装脚本,让你可以轻松配置包含PyTorch支持的交易环境:

# 克隆仓库
git clone https://gitcode.com/GitHub_Trending/fr/freqtrade
cd freqtrade

# 运行安装脚本,确保在提示时选择安装PyTorch依赖
./setup.sh -i

安装过程中,当出现"Do you also want dependencies for freqai-rl or PyTorch (~700mb additional space required) [y/N]?"提示时,输入"y"以安装PyTorch相关依赖。

Docker用户快速配置

如果你偏好使用Docker,可以直接使用Freqtrade提供的PyTorch专用镜像:

# 使用PyTorch专用Docker Compose配置
docker compose -f docker/docker-compose-freqai.yml run --rm freqtrade trade --config config_examples/config_freqai.example.json --strategy FreqaiExampleStrategy --freqaimodel PyTorchMLPRegressor

构建你的第一个PyTorch交易模型

基本配置文件设置

Freqtrade使用JSON配置文件管理交易参数。创建一个基本的PyTorch模型配置文件,至少需要包含以下内容:

{
    "freqai": {
        "enabled": true,
        "purge_old_models": 2,
        "train_period_days": 30,
        "backtest_period_days": 7,
        "identifier": "my-first-pytorch-model",
        "feature_parameters" : {
            "include_timeframes": ["5m","15m","4h"],
            "include_corr_pairlist": ["ETH/USDT", "LINK/USD", "BNB/USD"],
            "label_period_candles": 24,
            "include_shifted_candles": 2,
            "indicator_periods_candles": [10, 20]
        },
        "data_split_parameters" : {
            "test_size": 0.25
        }
    }
}

完整的配置示例可以在config_examples/config_freqai.example.json找到。

创建PyTorch策略

Freqtrade策略是一个Python类,定义了如何生成交易信号。以下是一个基本的PyTorch策略框架:

class MyPyTorchStrategy(IStrategy):
    # 策略启动所需的最小蜡烛数量
    startup_candle_count: int = 40  # 建议设置为indicator_periods_candles最大值的2倍
    
    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # 启动FreqAI,处理特征和预测
        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)
        return dataframe
    
    def set_freqai_targets(self, dataframe: DataFrame, **kwargs) -> DataFrame:
        # 定义预测目标:预测未来24根蜡烛的价格变化
        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
    
    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # 定义买入条件:当预测上涨且置信度高时买入
        dataframe.loc[
            (
                dataframe["do_predict"] == 1  # 预测可信
                & (dataframe["&-s_close"] > dataframe["target_roi"])  # 预测涨幅达到目标
            ),
            "enter_long",
        ] = 1
        return dataframe

完整的策略示例可以在templates/FreqaiExampleStrategy.py找到。

运行你的PyTorch交易策略

使用以下命令启动包含PyTorch模型的Freqtrade交易机器人:

freqtrade trade --config config_examples/config_freqai.example.json --strategy FreqaiExampleStrategy --freqaimodel PyTorchMLPRegressor --strategy-path freqtrade/templates

PyTorch模型架构与训练

FreqAI PyTorch模型层次结构

Freqtrade的PyTorch集成采用了清晰的层次结构设计:

  1. BasePyTorchModel:基础模型类,处理设备配置和数据准备
  2. BasePyTorchRegressor/Classifier:回归/分类专用基类,实现预测逻辑
  3. PyTorchMLPRegressor/Classifier:具体模型实现,定义网络结构和训练过程

这种结构使你可以轻松自定义模型架构,同时保持与Freqtrade系统的兼容性。

自定义PyTorch神经网络

你可以通过继承FreqAI的基础模型类来创建自定义神经网络架构。以下是一个简单的多层感知器(MLP)示例:

class PyTorchMLPRegressor(BasePyTorchRegressor):
    def __init__(self, **kwargs) -> None:
        super().__init__(**kwargs)
        config = self.freqai_info.get("model_training_parameters", {})
        self.learning_rate: float = config.get("learning_rate", 3e-4)
        self.model_kwargs: dict[str, Any] = config.get("model_kwargs", {})
        self.trainer_kwargs: dict[str, Any] = config.get("trainer_kwargs", {})

    def fit(self, data_dictionary: dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
        # 获取特征数量
        n_features = data_dictionary["train_features"].shape[-1]
        
        # 定义模型架构
        model = PyTorchMLPModel(
            input_dim=n_features,
            output_dim=1,
            **self.model_kwargs  # 可通过配置文件传递模型参数
        )
        
        # 移动模型到适当的设备(GPU/CPU)
        model.to(self.device)
        
        # 定义优化器和损失函数
        optimizer = torch.optim.AdamW(model.parameters(), lr=self.learning_rate)
        criterion = torch.nn.MSELoss()
        
        # 创建训练器并开始训练
        trainer = PyTorchModelTrainer(
            model=model,
            optimizer=optimizer,
            criterion=criterion,
            device=self.device,** self.trainer_kwargs,
        )
        trainer.fit(data_dictionary)
        return trainer

使用TensorBoard监控训练过程

Freqtrade的PyTorch集成支持TensorBoard,让你可以可视化训练过程和模型性能:

TensorBoard监控界面 TensorBoard提供了丰富的可视化工具,帮助你监控模型训练过程中的关键指标

要使用TensorBoard,只需在配置文件中添加相关设置,然后运行:

tensorboard --logdir=user_data/models/your-model-identifier/tensorboard

提升PyTorch模型性能的实用技巧

使用GPU加速训练

如果你的系统配备了NVIDIA GPU,可以通过以下配置启用GPU加速:

{
    "freqai": {
        "model_training_parameters": {
            "device": "cuda"
        }
    }
}

模型优化与编译

PyTorch提供了torch.compile()方法,可以显著提升模型推理性能:

model = PyTorchMLPModel(input_dim=n_features, output_dim=1)
model.to(self.device)
model = torch.compile(model)  # 启用PyTorch编译优化

动态目标阈值设置

通过使用预测结果的统计特性,可以创建动态的交易阈值,使策略适应市场变化:

# 在populate_indicators中设置动态阈值
dataframe["target_roi"] = dataframe["&-s_close_mean"] + dataframe["&-s_close_std"] * 1.25
dataframe["sell_roi"] = dataframe["&-s_close_mean"] - dataframe["&-s_close_std"] * 1.25

实战案例:使用PyTorch MLP模型进行加密货币交易

数据准备与特征工程

FreqAI会自动处理大部分数据准备工作,但你需要定义有效的特征。以下是一些常用的特征工程技术:

  • 多时间框架分析:同时考虑5分钟、15分钟和4小时等不同时间框架的数据
  • 技术指标扩展:为RSI、MACD等指标应用不同的时间周期
  • 相关性分析:包含相关加密货币对的数据作为特征
  • 市场情绪指标:加入交易量变化、波动率等市场情绪特征

模型训练与评估

建议先在历史数据上进行回测,评估模型性能:

freqtrade backtesting --config config_examples/config_freqai.example.json --strategy FreqaiExampleStrategy --freqaimodel PyTorchMLPRegressor --timerange 20230101-20230601

实盘交易与监控

在实盘交易前,建议先使用模拟交易模式进行测试:

freqtrade trade --config config_examples/config_freqai.example.json --strategy FreqaiExampleStrategy --freqaimodel PyTorchMLPRegressor --dry-run

Freqtrade提供了详细的日志和性能报告,帮助你监控模型在实际市场中的表现。

总结与进阶学习

通过Freqtrade的PyTorch集成,你可以轻松构建和部署强大的深度学习交易策略。从简单的MLP模型到复杂的Transformer架构,Freqtrade提供了灵活的框架让你实现各种创新想法。

要深入学习FreqAI和PyTorch集成,可以参考以下资源:

  • 官方文档:项目中的docs/freqai-configuration.md提供了详细的配置指南
  • 示例策略freqtrade/templates/FreqaiExampleStrategy.py包含完整的策略示例
  • PyTorch模型源码freqtrade/freqai/prediction_models/目录下提供了多种预实现的PyTorch模型

无论你是深度学习新手还是有经验的开发者,Freqtrade的PyTorch集成都能帮助你将人工智能技术应用到加密货币交易中,开启智能交易之旅!🚀

【免费下载链接】freqtrade Free, open source crypto trading bot 【免费下载链接】freqtrade 项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐