initial vault sync

This commit is contained in:
冯先生
2026-06-23 00:24:32 +08:00
commit 8e7723c17a
795 changed files with 157458 additions and 0 deletions

View File

@ -0,0 +1,175 @@
#交易 #量化交易 #freqtrade #策略研究 #DeepSeek
`@informative` 是 **Freqtrade量化交易框架**中特有的装饰器,用于**简化多时间框架策略开发**。它通过自动化的数据注入和指标计算,让开发者能更高效地实现跨周期分析。以下从核心原理、功能特性和实战应用三方面详细解析:
---
### 一、核心原理:装饰器机制
装饰器Decorator是Python的语法糖`@`符号),本质是**高阶函数**
1. **输入**​:接受一个函数/类作为参数
2. **处理**​:在其外部包裹额外功能逻辑
3. **输出**​:返回增强后的新函数/类对象
**通用装饰器示例**​(日志功能扩展)[6,7](@ref)
```python
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"开始执行 {func.__name__}") # 新增功能
result = func(*args, **kwargs) # 调用原函数
print(f"结束执行 {func.__name__}") # 新增功能
return result
return wrapper
@log_decorator # 等价于 my_func = log_decorator(my_func)
def my_func():
print("核心逻辑...")
```
**执行效果**
```
开始执行 my_func
核心逻辑...
结束执行 my_func
```
---
### 二、`@informative` 的专属特性
在Freqtrade中`@informative` 专为**多时间框架策略**设计,解决以下痛点:
1. **自动数据对齐**
自动将高阶周期如1小时指标与主交易周期如5分钟K线对齐避免手动`reindex()`[1,4](@ref)。
2. **跨周期指标计算**
直接在不同时间框架上定义指标,结果自动合并到主数据。
3. **跨交易对分析**
支持同时加载其他交易对数据如BTC主导行情分析[3](@ref)。
**典型代码结构**
```python
from freqtrade.strategy import informative
class MyStrategy(IStrategy):
timeframe = '5m' # 主交易周期
# 自动注入1小时数据并计算其RSI
@informative('1h')
def populate_indicators_1h(self, dataframe: DataFrame, metadata: dict):
dataframe['rsi'] = ta.RSI(dataframe, period=14) # 计算1小时RSI
return dataframe # 自动重命名为 rsi_1h
# 使用1小时RSI生成信号
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict):
dataframe.loc[
(dataframe['rsi_1h'] < 30), # 直接调用1小时指标
'enter_long'
] = 1
return dataframe
```
---
### 三、四大核心功能详解
#### 1. **多时间框架指标融合**
- 自动将 `@informative('1h')` 定义的指标以 `_1h` 后缀合并到主DataFrame
- 避免手动处理时间戳对齐问题[4](@ref)
#### 2. **跨交易对分析**​(独特优势)
```python
@informative('1h', 'BTC/USDT') # 分析BTC/USDT的1小时数据
def populate_indicators_btc(self, dataframe, metadata):
dataframe['dominance'] = ... # 计算BTC主导指标
return dataframe # → 列名自动转为 BTC_USDT_dominance_1h
```
在策略中可直接使用 `dataframe['BTC_USDT_dominance_1h']` 判断大盘趋势[3](@ref)。
#### 3. **自定义列名控制**
防止指标命名冲突:
```python
@informative('1h', format='{base}_{column}_{timeframe}')
def add_indicators(...):
dataframe['rsi_fast'] = ... # → 生成列名如BTC_rsi_fast_1h
```
#### 4. **依赖自动管理**
框架自动计算 `startup_candle_count`,确保足够历史数据覆盖所有周期[1](@ref)。
---
### 四、对比手动实现 vs `@informative`
|**能力**|手动实现 (`self.dp.get_pair_dataframe()`)|`@informative`|
|---|---|---|
|数据对齐|需手动`reindex(method='ffill')`|**自动完成**|
|跨交易对支持|复杂,需循环处理多个交易对|**一行代码声明**|
|代码可读性|低(大量样板代码)|**高(声明式编程)​**|
|指标命名|需手动添加后缀(如`rsi_1h`|**自动重命名**|
|历史数据预热|需手动计算`startup_candle_count`|**自动管理**|
> ⚠️ **注意**​:使用 `@informative` 需满足:
>
> - Freqtrade ≥ `2021.5` 版本
> - 策略类中声明 `INTERFACE_VERSION = 3`
---
### 五、实战场景示例
#### 场景:​**5分钟策略 + 1小时趋势过滤 + BTC主导指标**
```python
class MultiTimeframeStrategy(IStrategy):
INTERFACE_VERSION = 3
timeframe = '5m'
# 1. 加载BTC的1小时数据
@informative('1h', 'BTC/USDT', '{base}_{column}_{timeframe}')
def btc_indicators(self, dataframe, metadata):
dataframe['rsi'] = ta.RSI(dataframe, 14)
return dataframe # → BTC_USDT_rsi_1h
# 2. 加载当前交易对的1小时数据
@informative('1h')
def primary_indicators(self, dataframe, metadata):
dataframe['adx'] = ta.ADX(dataframe) # → adx_1h
return dataframe
# 3. 信号生成(综合多维度指标)
def populate_entry_trend(self, dataframe, metadata):
dataframe.loc[
(dataframe['BTC_USDT_rsi_1h'] > 60) & # BTC处于强势
(dataframe['adx_1h'] > 25) & # 当前交易对趋势强劲
(dataframe['rsi'] < 30), # 5分钟RSI超卖
'enter_long'
] = 1
return dataframe
```
---
### 六、总结
1. **本质**
`@informative` 是Freqtrade对Python装饰器的**领域特化实现**,专为量化交易中多周期、多资产策略设计[6,7](@ref)。
2. **核心价值**
-**减少70%** 数据对齐代码
-**无缝融合**跨周期/资产指标
-**声明式语法**提升策略可读性
3. **适用场景**
- 趋势策略(高阶周期方向过滤)
- 套利策略(多交易对联动分析)
- 高频策略(需要快速迭代信号逻辑)
> 建议通过Freqtrade官方示例进一步实践[Freqtrade Informative Decorator Documentation](https://www.freqtrade.io/en/latest/strategy-customization/#informative-decorator)