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,176 @@
#交易 #量化交易 #策略研究 #freqtrade #DeepSeek
是的这个脚本使用了Freqtrade的`@informative`装饰器来实现多时间框架策略,这是一种更高级、更简洁的实现方式。以下是与我之前实现方法的详细对比分析:
---
### 一、实现机制对比
|**特性**|**我的实现方法**|**当前脚本方法**|
|---|---|---|
|**多时间框架接入**|在`populate_indicators`中手动调用`self.dp.get_pair_dataframe()`|使用`@informative`装饰器自动注入|
|**数据合并方式**|手动对齐时间戳(`.reindex(method='ffill')`|框架自动处理时间戳对齐|
|**代码复杂度**|高(需处理数据对齐细节)|低(声明式编程,框架自动处理)|
|**可维护性**|中等(逻辑分散)|高(功能模块化)|
|**Freqtrade版本要求**|所有版本|需较新版本(支持`@informative`装饰器)|
---
### 二、`@informative`装饰器核心技术解析
当前脚本的核心是以下结构:
```
@informative('30m') # 声明时间框架
@informative('1h') # 可叠加多个时间框架
def populate_indicators_1h(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# 在此计算指标(仅需关注业务逻辑)
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
return dataframe
```
**框架自动完成**
1. 按配置的时间框架获取数据
2. 执行该函数计算指标
3. 将结果**自动合并**到主时间框架数据
4. 重命名列(避免冲突,如`rsi` → `rsi_1h`
---
### 三、关键优势分析(当前脚本方法)
1. **跨交易对分析**​(独特优势):
```
@informative('1h', 'BTC/{stake}') # 分析BTC相对于stake货币
def populate_indicators_btc_1h(...):
...
@informative('1h', 'ETH/BTC') # 分析ETH/BTC交易对
def populate_indicators_eth_btc_1h(...):
...
```
在信号中可直接使用:
```
(dataframe[f'btc_{stake}_rsi_1h'] < 35) &
(dataframe['eth_btc_rsi_1h'] < 50)
```
2. **灵活的列名控制**
```
# 自定义列名格式(避免冲突)
@informative('1h', 'BTC/{stake}', '{base}_{column}_{timeframe}')
def populate_indicators_btc_1h_3(...):
dataframe['rsi_super_fast'] = ... # → btc_rsi_super_fast_1h
```
3. **自动依赖管理**
无需手动计算`startup_candle_count`,框架自动处理不同时间框架的数据预热
---
### 四、信号生成对比
|**实现方式**|**我的方法**|**当前脚本方法**|
|---|---|---|
|**趋势判断**|需手动编写`detect_market_regime()`函数|直接在主数据中使用跨周期指标(如`rsi_1h`|
|**信号条件**|需区分不同市场环境|统一条件表达式(更简洁)|
|**指标访问**|`dataframe['adx_1h']`|`dataframe['rsi_1h']`(自动重命名)|
当前脚本的信号生成:
```
# 综合使用5m/30m/1h/BTC/ETH等多维度指标
(dataframe[f'btc_{stake}_rsi_1h'] < 35) &
(dataframe['eth_btc_rsi_1h'] < 50) &
(dataframe['BTC_rsi_fast_upper_1h'] < 40) &
(dataframe['btc_rsi_super_fast_1h'] < 30) &
(dataframe['rsi_30m'] < 40) &
(dataframe['rsi_1h'] < 40) &
(dataframe['rsi'] < 30)
```
---
### 五、使用建议(优先选择当前方法)
1. **推荐场景**
- 需要分析**多个交易对**如BTC主导行情
- 使用**多个时间框架**如1h+4h+1d
- 开发**复合型策略**​(趋势+震荡组合)
2. **注意事项**
```
# 必须声明INTERFACE_VERSION = 3
INTERFACE_VERSION = 3
# 装饰器函数命名需唯一(不同时间框架用不同函数)
@informative('1h')
def indicators_for_1h(...): ...
@informative('4h')
def indicators_for_4h(...): ... # 不能复用同名函数
```
3. **性能优化**
```
# 减少不必要的指标计算(仅返回策略需要的列)
@informative('1h')
def populate_indicators_minimal(self, dataframe, metadata):
# 只计算RSI避免返回多余列
return dataframe.assign(rsi=ta.RSI(dataframe, 14))
```
---
### 六、升级我的实现(结合两者优势)
```
class EnhancedStrategy(IStrategy):
INTERFACE_VERSION = 3
timeframe = '5m'
# 1. 声明式多周期指标
@informative('1h')
def trend_indicators(self, dataframe, metadata):
dataframe['adx'] = ta.ADX(dataframe) # → adx_1h
dataframe['trend_strength'] = ... # → trend_strength_1h
return dataframe
# 2. 声明式跨交易对指标
@informative('1h', 'BTC/USDT')
def btc_dominance(self, dataframe, metadata):
dataframe['dominance'] = ... # → BTC_USDT_dominance_1h
return dataframe
# 3. 统一信号生成
def populate_entry_trend(self, dataframe, metadata):
dataframe.loc[
(dataframe['adx_1h'] > 25) &
(dataframe['BTC_USDT_dominance_1h'] > 0.6),
'enter_long'
] = 1
return dataframe
```
---
### 七、总结对比
|**维度**|**我的实现**|**当前脚本**|**推荐选择**|
|---|---|---|---|
|**开发效率**|中(需手动处理数据流)|高(声明式自动注入)|✅ 当前脚本|
|**跨交易对分析**|难实现|原生支持|✅ 当前脚本|
|**代码可读性**|中|高|✅ 当前脚本|
|**灵活性**|高(可完全自定义)|中(受框架约束)|⚖️ 视需求|
|**学习曲线**|低|中|⚖️ 视经验|
**结论**​:对于大多数多时间框架策略,优先采用`@informative`装饰器实现(当前脚本方法),它在开发效率、跨交易对支持和代码可读性上具有显著优势。只有在需要极特殊的数据处理逻辑时,才考虑手动实现。