v1 · 空壳能 load

最小构成:一个类、一个周期、三个空函数。还不会买卖。

Freqtrade 认的是类名 FirstSma,不是文件名。三个函数现在只把表格原样还回去,所以回测会是 0 笔。这版的目标只有一个:它出现在 list-strategies 里,状态是 OK。

这版的文件

from pandas import DataFrame
from freqtrade.strategy import IStrategy


class FirstSma(IStrategy):
    INTERFACE_VERSION = 3
    timeframe = "4h"
    can_short = False
    process_only_new_candles = True

    # 强制占位,v3 / v4 再讲含义
    stoploss = -0.99
    minimal_roi = {"0": 10}
    startup_candle_count = 1

    def populate_indicators(self, dataframe, metadata):
        return dataframe

    def populate_entry_trend(self, dataframe, metadata):
        return dataframe

    def populate_exit_trend(self, dataframe, metadata):
        return dataframe
dataframe 是一张表,每一行是一根已经收盘的 K。三个函数都必须把这张表 return 回去,少了 open / high / low / close / volume 任何一列,后面会算崩。

每个参数:是什么,为什么要它,改了会怎样

INTERFACE_VERSION = 3
含义
告诉 Freqtrade:我用的是第几代策略接口。
意义
v3 用 enter_long / exit_long。老文件里的 buy / sell 是 v2,以后会被丢掉。
改了会怎样
写成 2,新写法可能不认。不要改,锁在 3。
timeframe = "4h"
含义
策略看的 K 线周期。一根走完才算一次。
意义
4h 一天 6 根,适合中长线 BTC / ETH。5m 一天 288 根,是另一类短线游戏。
改了会怎样
改成 1h,同样的「20 均线」只覆盖 20 小时,不是 3 天。信号会密一倍多。config 里如果也写了 timeframe,会盖掉这里。
can_short = False
含义
这套策略允不允许做空。
意义
现货只能先买后卖。False 时,就算你填了 enter_short,也会被忽略。
改了会怎样
改成 True,现货配置会加载失败。合约课之前不要动。
process_only_new_candles = True
含义
是不是只在「新的一根 K 收盘」时才重算指标和信号。
意义
True = 用完整 K,不拿还在走的那根做决定,避免信号画了又擦掉(repaint)。
改了会怎样
False 时 dry-run 会在同一根未收盘 K 上反复算,回测和实盘对不齐。中长线保持 True。
stoploss / minimal_roi / startup_candle_count
这版为什么有
Freqtrade 加载策略时强制要止损和 ROI。空壳不写会挂。
这版写成啥
-0.99 和 {"0": 10} 等于「先别管这两扇门」。startup = 1,因为还没有均线要暖。
真正的含义
v3 讲 -0.12 为什么是 12%。v4 讲 {"0": 10} 为什么等于关掉 ROI。

三个空函数在等什么

populate_indicators 以后用来算线。populate_entry_trend 在某一行写 enter_long = 1 才是买。populate_exit_trendexit_long = 1 才是卖。现在一行都没写,所以 0 笔。v2 会在这里加上金叉死叉。

怎么确认这版过关

freqtrade list-strategies --userdir /workspace/ft_userdata/user_data

表里要有 FirstSma,Status 是 OK。这版已经在研究机上验过,是 OK。