第27篇:杠杆用得巧,收益翻10倍!Freqtrade杠杆策略全攻略在Freqtrade中进行杠杆交易(尤其是在合约市场如BinanceFutures上),你可以通过配置或策略代码灵活控制杠杆倍数。本篇将系统介绍:配置文件中的leverage策略函数中的leverage()
在 Freqtrade 中进行杠杆交易(尤其是在合约市场如 Binance Futures 上),你可以通过配置或策略代码灵活控制杠杆倍数。
本篇将系统介绍:
leverageleverage()👉 点击访问:https://itrade.icu 这里有 Freqtrade 基础教程、策略源码、指标解析 等丰富内容,助你轻松掌握量化交易技巧!
leverage(全局设置)在 config.json 中可以直接设置全局杠杆倍数,例如:
"leverage": 3
leverage()(策略内动态控制)你可以在策略中定义 leverage() 函数,用于动态指定每一笔交易的杠杆倍数,该函数仅在 Futures 模式下启用。
def leverage(
self,
pair: str,
current_time: datetime,
current_rate: float,
proposed_leverage: float,
max_leverage: float,
entry_tag: Optional[str],
side: str,
**kwargs,
) -> float:
...
参数说明:
| 参数名 | 含义 |
|---|---|
pair |
当前交易对名 |
current_time |
当前时间 |
current_rate |
当前价格 |
proposed_leverage |
默认建议杠杆值 |
max_leverage |
该交易对最大支持杠杆 |
entry_tag |
信号标签,可选 |
side |
'long' 或 'short' |
def leverage(self, pair: str, **kwargs) -> float:
if "BTC" in pair:
return 3.0
elif "ETH" in pair:
return 4.0
else:
return 2.0
def leverage(self, pair: str, current_time: datetime, current_rate: float, proposed_leverage: float, max_leverage: float, entry_tag: Optional[str], side: str, **kwargs) -> float:
def leverage(self, pair: str, **kwargs) -> float:
"""
动态调整杠杆倍数的示例函数,根据当前价格与20周期均线的比值调整杠杆。
- pair: 交易对字符串,例如 "BTC/USDT"
- current_time: 当前时间点,datetime 类型
- current_rate: 当前价格
- proposed_leverage: 系统默认建议的杠杆倍数
- max_leverage: 该交易对允许的最大杠杆倍数
- entry_tag: 可选的买入标签(用于区分不同信号)
- side: 交易方向,"long" 或 "short"
- **kwargs: 其他可选参数
逻辑说明:
1. 计算20周期简单移动均线(ma20)
2. 计算当前价格与ma20的比值 ratio
3. 如果 ratio > 1.02,说明趋势较强,尝试使用较高杠杆,最高不超过max_leverage,返回5倍杠杆或max_leverage中的较小值
4. 如果 ratio < 0.98,说明趋势较弱或下跌,保守策略,使用最低1倍杠杆
5. 否则维持系统默认建议的杠杆倍数
返回:
- 一个介于1和max_leverage之间的杠杆倍数
"""
df = self.dp.get_analyzed_dataframe(pair, self.timeframe)[0]
df['ma20'] = df['close'].rolling(20).mean()
ratio = current_rate / df['ma20'].iloc[-1]
if ratio > 1.02:
return min(5.0, max_leverage)
elif ratio < 0.98:
return 1.0
else:
return proposed_leverage
| 项目 | 建议 |
|---|---|
| 配置全局杠杆 | 简单快捷,适合所有交易统一倍数的策略 |
使用 leverage() |
更灵活,适合动态调整、按交易对/信号/趋势分配杠杆 |
| 回测注意事项 | 回测中不会强制使用真实杠杆交易,请根据结果评估风险 |
| 搭配止损机制 | 杠杆放大收益也放大风险,务必设置止损 |
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
from datetime import datetime
from typing import Optional
class LeverageStrategy(IStrategy):
timeframe = '5m'
leverage = 3 # 默认杠杆(用于回测)
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
计算指标:添加20周期简单移动均线(ma20)
"""
dataframe['ma20'] = dataframe['close'].rolling(20).mean()
return dataframe
def populate_entry_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
"""
入场信号:当当前收盘价高于ma20时,标记为多头进场信号
"""
df['enter_long'] = df['close'] > df['ma20']
return df
def populate_exit_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
"""
出场信号:当当前收盘价低于ma20时,标记为多头退出信号
"""
df['exit_long'] = df['close'] < df['ma20']
return df
def leverage(self, pair: str, current_time: datetime, current_rate: float,
proposed_leverage: float, max_leverage: float, entry_tag: Optional[str],
side: str, **kwargs) -> float:
"""
根据当前价格与ma20均线的关系动态调整杠杆倍数
逻辑:
1. 获取分析过的数据框,读取最新的ma20均线值
2. 计算当前价格与ma20的比值 ratio
3. 若ratio大于1.02,认为趋势强劲,使用较高杠杆(最高不超过max_leverage,最高5倍)
4. 若ratio低于0.98,认为趋势弱,保守使用1倍杠杆
5. 否则使用中间杠杆2倍
返回:
- 调整后的杠杆倍数(浮点数)
"""
df = self.dp.get_analyzed_dataframe(pair, self.timeframe)[0]
ma = df['ma20'].iloc[-1]
ratio = current_rate / ma
if ratio > 1.02:
return min(5.0, max_leverage)
elif ratio < 0.98:
return 1.0
else:
return 2.0
leverage 可在配置或策略函数中定义,实现灵活的杠杆控制如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
