量化入门1. FreqTrade的文件结构

之前的文章我们讲了如果在debian上部署1pannel,然后用docker来安装开源的量化机器人Freqtrade,但是很多小伙伴安装好了以后,完全不懂的如何使用,看起来也比较负责。 但是没关系,兄弟,没那么难的。 

这一贴,我们来讲Freqtrade的核心,文件结构,我们深入到 /opt/freqtrade/ft_userdata 目录下,逐个剖析核心文件的内部构造

核心一:config.json (静态配置文件)

这是机器人的环境参数。它是一个标准的 JSON 对象。你以后 80% 的改动都在这里。

我们要关注它里面具体的关键 Key-Value

{
    "max_open_trades": 3,           // 【并发数】允许同时持仓几个币?
    "stake_currency": "USDT",       // 【计价单位】用什么结算?(通常是 USDT)
    "stake_amount": "unlimited",    // 【单笔资金】每次买多少?
                                    // "unlimited" = 总资金 / max_open_trades (自动计算)
                                    // 数字 (e.g., 100) = 固定每次买 100 U

    "dry_run": true,                // 【模式开关】true=模拟盘(假钱),false=实盘(真钱)
    "dry_run_wallet": 1000,         // 【模拟本金】如果是模拟盘,初始给你多少假钱?

    "exchange": {
        "name": "binance",          // 【交易所】去哪里交易?
        "key": "",                  // 【API Key】实盘必填
        "secret": "",               // 【API Secret】实盘必填
        "pair_whitelist": [         // 【白名单】只允许看这几个币
            "BTC/USDT",
            "ETH/USDT"
        ]
    },
    
    "entry_pricing": { ... },       // 【挂单价格】买入是挂市价单(market)还是限价单(limit)?
    "exit_pricing": { ... }         // 【挂单价格】卖出是挂市价单还是限价单?
}
  • 它的地位: 全局常量。

  • 修改后果: 修改后必须重启机器人 (Reload Config) 才会生效。

  • 常见坑: JSON 格式错误(少逗号、多括号)会导致机器人直接启动失败。

 

核心二:strategies/SampleStrategy.py (动态逻辑文件)

这是机器人的大脑。它是一个 Python 类(Class),继承自 IStrategy。 打开这个文件,你只需要看懂四个核心函数,它们对应量化交易的四个步骤:

(1) minimal_roi (静态止盈表)

这是一个字典,定义了“赚多少就跑”的逻辑。

minimal_roi = {
    "60": 0.01,  # 持仓超过60分钟,只要赚1%就卖
    "30": 0.02,  # 持仓超过30分钟,要赚2%才卖
    "0":  0.04   # 刚买入(0分钟),必须暴涨4%才卖
}

(2) stoploss (统一止损)

stoploss = -0.10  # 亏损达到 10% 无条件触发市价止损

(3) populate_indicators (计算指标 – 数据预处理)

这里利用 pandastalib 库计算技术指标,例如:

def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    # 计算 RSI,并存入 dataframe 的 'rsi' 列
    dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
    
    # 计算 MACD
    macd = ta.MACD(dataframe)
    dataframe['macd'] = macd['macd']
    
    return dataframe

(4) populate_entry_trend (买入信号 – 开单逻辑)

这里写 if...then 逻辑,决定什么时候买。

def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    dataframe.loc[
        (
            (dataframe['rsi'] < 30) &  # 条件1:RSI 小于 30 (超卖)
            (dataframe['volume'] > 0)  # 条件2:有成交量
        ),
        'enter_long'] = 1  # 满足条件,标记为“买入”
    return dataframe
  • 它的地位: 运行时逻辑。

  • 执行频率: 每一根 K 线收盘时(比如每 5 分钟)执行一次。

  • 修改后果: 修改后 Reload,机器人会立即应用新逻辑到下一根 K 线。

核心三:tradesv3.sqlite (持久化存储)

这是一个二进制的 SQLite 数据库文件

  • 里面存了什么?

    • trades 表:每一笔历史订单(买入时间、价格、卖出时间、利润)。

    • orders 表:每一次挂单的详细状态。

  • 不要做的事: 严禁手动编辑它!也不要用文本编辑器打开它(会显示乱码)。

  • 如果删了它:

    • 模拟盘 (Dry-run): 没事,大不了记录清零,重新开始玩。

    • 实盘 (Live): 灾难! 机器人会忘记它在交易所里还持有仓位,结果就是它不会去卖出那些币,你会一直被套住。

核心四:user_data/data/ (历史数据缓存)

当你运行 download-data 命令时,数据就存这儿。

  • 结构: user_data/data/binance/BTC_USDT-5m.json.gz

  • 内容: 压缩的 JSON 文件,包含了过去每一根 K 线的 开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)、成交量(Volume)。

  • 用途: 仅用于回测 (Backtesting)。实盘交易时,机器人是直接通过 API 问币安要最新数据的,不看这里。

 

数据是如何流动的(举个🌰):

20251224142950319-图片

这一贴看完了,请你用1pannel打开你的FreqTrade文件,看一下结构,对照着这个贴,看看能不能找到。

20251224143226922-图片

 

请登录后发表评论

    没有回复内容