freqtrade 量化交易框架学习笔记

安装

下载 freqtrade

git clone https://github.com/freqtrade/freqtrade.git
cd freqtrade

创建并进入虚拟环境:

conda create --name freqtrade python=3.12
conda activate freqtrade

安装依赖:

python3 -m pip install --upgrade pip
python3 -m pip install -r requirements.txt
python3 -m pip install -e .

配置

freqtrade new-config --config user_data/config.json

网络问题

"ccxt_async_config": {
"aiohttp_proxy": "http://127.0.0.1:7890",
"timeout": 60000,
"session_args": {"family": 2}
}

下载数据

以交易对 SOL/USDT:USDT (代表 SOL U本位永续合约)为例:

freqtrade download-data --pairs SOL/USDT:USDT --exchange binance

这样会默认下载最近 30 天的 1m5m 周期数据。可以用 --timerange 20200101- 指定起始日期,用 --days 20 指定天数,或用 -t 15m 指定 K线周期。

回测

freqtrade backtesting --config user_data/config.json --strategy SampleStrategy

策略编写

策略是一个 Python 类,用于定义交易逻辑,遵循以下结构:

IStrategy
├─ 基本参数(timeframe / stoploss / minimal_roi / 杠杆等)
├─ populate_indicators() ← 计算指标
├─ populate_entry_trend() ← 开仓条件
└─ populate_exit_trend() ← 平仓条件
from freqtrade.strategy import IStrategy
from pandas import DataFrame
import talib.abstract as ta
class MyStrategy(IStrategy):
timeframe = '15m'
stoploss = -0.10
minimal_roi = {"0": 0.01}
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[(dataframe['rsi'] < 30),'enter_long'] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[(dataframe['rsi'] > 70),'exit_long'] = 1
return dataframe