边缘定位¶
特别注意,该功能以移除
,详情
Edge Positioning
模块使用概率来计算您的胜率和风险回报比。它将使用这些统计数据来控制您的策略交易入场点、头寸大小和止损。
简介¶
交易策略并不完美。它们是容易受到市场及其指标影响的框架。由于市场完全不可预测,有时策略会赢,有时同一策略会输。
为了在市场上获得优势,策略必须赚取比损失更多的钱。在交易中赚钱不仅仅是关于策略多久赚钱或亏钱。
Edge Positioning 模块旨在提高策略的获胜概率和策略在长期内赚取的钱。
我们提出以下问题:
另一种看待它的方式是提出类似的问题:
Edge positioning 试图自动回答关于风险/回报和头寸大小的难题,以最小化给定策略的损失机会。
交易、获胜和失败¶
让我们将 称为单个交易 的回报,其中 。
集合 是交易会话中所有交易回报的集合。我们说 是 的基数,或者通俗地说,它是交易会话中进行的交易数量。
获胜交易是策略赚取钱的交易。
赚钱意味着策略在扣除所有费用后,以盈利的方式平仓。形式上,获胜交易的回报 。同样,失败交易的回报 。因此,我们可以发现所有获胜交易的集合 ,如下所示:
同样,我们可以发现所有失败交易的集合 ,如下所示:
胜率和失败率¶
胜率 是策略获胜交易与所有交易的比例。我们使用以下函数计算胜率:
其中 是胜率, 是交易数量, 是策略赚钱的所有交易的集合。
同样,我们可以计算失败交易的比率:
其中 是失败率, 是进行的交易数量, 是策略亏钱的所有交易的集合。注意,上述公式与计算 或 相同。
风险回报比¶
风险回报比()是用于衡量给定投资的预期收益与损失风险的公式。
它基本上是您可能赢得的除以您可能损失的。形式上:
在长期内,即在许多交易中,我们可以通过将策略在获胜交易上的平均利润除以策略在失败交易上的平均损失来计算风险回报。我们可以计算平均利润,,如下所示:
同样,我们可以计算平均损失,,如下所示:
最后,我们可以计算风险回报比,,如下所示:
期望值¶
通过结合胜率 和风险回报比 来创建期望比率 。
期望比率是交易中投资的预期回报。我们可以计算 的值如下:
上面示例中计算的期望值意味着,平均而言,该策略的交易将返回其损失的 1.68 倍。换句话说,该策略平均每损失 1$,赚取 1.68$。
这很重要,原因有两个:首先,这似乎很明显,但您立即知道您有正回报。其次,您现在有一个数字可以与候选系统进行比较,以决定使用哪些系统。
重要的是要记住,任何期望值大于 0 的系统在使用过去数据时都是盈利的。关键是找到一个在未来会盈利的系统。
您还可以使用此值来评估对此系统的修改的有效性。
它是如何工作的?¶
Edge 将动态止损、动态头寸和白名单生成结合到一个隔离模块中,然后应用于交易策略。如果在配置中启用,Edge 将通过一系列止损的历史数据,以找到买入和卖出/止损信号。然后,它计算每个止损的胜率和期望值。以下是一个示例:
交易对 | 止损 | 胜率 | 风险回报比 | 期望值 |
---|---|---|---|---|
XZC/ETH | -0.01 | 0.50 | 1.176384 | 0.088 |
XZC/ETH | -0.02 | 0.51 | 1.115941 | 0.079 |
XZC/ETH | -0.03 | 0.52 | 1.359670 | 0.228 |
XZC/ETH | -0.04 | 0.51 | 1.234539 | 0.117 |
这里的目标是为策略找到最佳止损,以最大化期望值。在上面的示例中,根据历史数据,止损为 导致最大期望值。
Edge 模块然后动态地将评估的止损值强制到您的策略中。
头寸大小¶
Edge 根据以下因素指示机器人每个交易的风险金额:
- 允许的风险资本
- 止损
允许的风险资本计算如下:
允许的风险资本 = (可用资本百分比) X (每笔交易允许的风险)
止损是根据历史数据计算的,如上所述。
头寸大小计算如下:
头寸大小 = (允许的风险资本) / 止损
示例:
假设质押货币是 ETH,钱包中有 10 ETH。可用资本百分比为 ,每笔交易允许的风险为 。因此,用于交易的可用资本为 ETH,允许的风险资本为 ETH。
交易 1: 策略在 XLM/ETH 市场检测到新的买入信号。
Edge Positioning
计算止损为 ,头寸为 ETH。机器人在 XLM/ETH 市场持有 2.5 ETH 的头寸。交易 2: 策略在 BTC/ETH 市场检测到买入信号,而 交易 1 仍然开放。
Edge Positioning
计算该市场的止损为 。因此,交易 2 的头寸大小为 ETH。
- 交易 3: 策略在 ADA/ETH 市场检测到买入信号。
Edge Positioning
计算止损为 ,头寸为 ETH。由于 交易 1 有 2.5 ETH 被锁定,交易 2 有 1.25 ETH 被锁定,因此只有 ETH 可用。因此,交易 3 的头寸大小为 1.25 ETH。
策略在 XLM/ETH 市场检测到卖出信号。机器人退出 交易 1,盈利 1 ETH。钱包中的总资本变为 11 ETH,用于交易的可用资本变为 5.5 ETH。
交易 4 策略在 XLM/ETH 市场检测到新的买入信号。
Edge Positioning
计算止损为 ,头寸大小为 ETH。
Edge 命令参考¶
用法: freqtrade edge [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH] [--recursive-strategy-search]
[--freqaimodel NAME] [--freqaimodel-path PATH]
[-i TIMEFRAME] [--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,feather,parquet}]
[--max-open-trades INT] [--stake-amount STAKE_AMOUNT]
[--fee FLOAT] [-p PAIRS [PAIRS ...]]
[--stoplosses STOPLOSS_RANGE]
选项:
-h, --help 显示帮助信息并退出
-i TIMEFRAME, --timeframe TIMEFRAME
指定时间框架 (`1m`, `5m`, `30m`, `1h`, `1d`)。
--timerange TIMERANGE
指定要使用的数据时间范围。
--data-format-ohlcv {json,jsongz,feather,parquet}
下载的K线(OHLCV)数据的存储格式。
(默认:`feather`)。
--max-open-trades INT
覆盖配置设置中的 `max_open_trades` 值。
--stake-amount STAKE_AMOUNT
覆盖配置设置中的 `stake_amount` 值。
--fee FLOAT 指定手续费比率。将应用两次(在交易进入和退出时)。
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
限制命令仅用于这些交易对。交易对之间用空格分隔。
--stoplosses STOPLOSS_RANGE
定义一组止损值,edge 将针对这些值评估策略。格式为 "min,max,step"(不带空格)。
例如:`--stoplosses=-0.01,-0.1,-0.001`
通用参数:
-v, --verbose 详细模式(-vv 获取更多信息,-vvv 获取所有消息)。
--no-color 禁用超参数优化结果的着色。在将输出重定向到文件时可能有用。
--logfile FILE, --log-file FILE
记录到指定的文件。特殊值包括:
'syslog', 'journald'。有关更多详细信息,请参阅文档。
-V, --version 显示程序版本号并退出
-c PATH, --config PATH
指定配置文件(默认:`userdir/config.json` 或 `config.json`,以存在的为准)。
可以使用多个 --config 选项。可以设置为 `-` 以从标准输入读取配置。
-d PATH, --datadir PATH, --data-dir PATH
交易所历史回测数据的基本目录路径。要查看期货数据,需要额外使用 trading-mode。
--userdir PATH, --user-data-dir PATH
用户数据目录的路径。
策略参数:
-s NAME, --strategy NAME
指定机器人要使用的策略类名。
--strategy-path PATH 指定额外的策略查找路径。
--recursive-strategy-search
在策略文件夹中递归搜索策略。
--freqaimodel NAME 指定自定义的 freqaimodels。
--freqaimodel-path PATH
为 freqaimodels 指定额外的查找路径。
配置¶
Edge 模块具有以下配置选项:
参数 | 描述 |
---|---|
enabled | 如果为 true,则 Edge 将定期运行。 默认为 false 。 数据类型: 布尔值 |
process_throttle_secs | Edge 运行的频率(秒)。 默认为 3600 (每小时一次)。 数据类型: 整数 |
calculate_since_number_of_days | Edge 计算胜率、风险回报和期望值的数据天数。 注意,它会下载历史数据,因此增加此数字会导致机器人变慢。 默认为 7 。 数据类型: 整数 |
allowed_risk | 每笔交易允许的风险比率。 默认为 0.01 (1%))。 数据类型: 浮点数 |
stoploss_range_min | 最小止损。 默认为 -0.01 。 数据类型: 浮点数 |
stoploss_range_max | 最大止损。 默认为 -0.10 。 数据类型: 浮点数 |
stoploss_range_step | 例如,如果设置为 -0.01,则 Edge 将测试策略的 [-0.01, -0,02, -0,03 ..., -0.09, -0.10] 范围。注意,较小的步长意味着更大的范围,这可能导致计算变慢。 如果您将此参数设置为 -0.001,您将使 Edge 计算变慢 10 倍。 默认为 -0.001 。 数据类型: 浮点数 |
minimum_winrate | 它过滤掉没有至少 minimum_winrate 的对。 如果您想保守并且不想为了风险回报比而牺牲胜率,这很有用。 默认为 0.60 。 数据类型: 浮点数 |
minimum_expectancy | 它过滤掉期望值低于此数字的对。 期望值为 0.20 意味着如果您在交易中投入 10$,您期望获得 12$ 的回报。 默认为 0.20 。 数据类型: 浮点数 |
min_trade_number | 在计算历史数据的 W、R 和 E(期望值)时,您总是希望有最少的交易数量。这个数字越大,Edge 越可靠。 在单笔交易中胜率为 100% 并不意味着什么。但在过去的 100 笔交易中胜率为 70% 显然意味着什么。 默认为 10 (强烈建议不要减少此数字)。 数据类型: 整数 |
max_trade_duration_minute | Edge 将过滤掉持续时间较长的交易。如果交易在一个月后盈利,很难基于此评估策略。但如果大多数交易都是盈利的,并且它们的最大持续时间为 30 分钟,那么这显然是一个好迹象。 注意: 在配置此值时,您应该考虑您的时间框架。例如,对于具有 4 小时间隔的策略,过滤掉持续时间少于一天的交易没有意义。默认值假设您的时间框架相对较小(1m 或 5m 等)。 默认为 1440 (一天)。 数据类型: 整数 |
remove_pumps | Edge 将在处理历史数据时移除给定市场中的突然上涨。然而,由于加密货币市场中经常发生上涨,我们建议您保持此选项关闭。 默认为 false 。 数据类型: 布尔值 |
独立运行 Edge¶
您可以独立运行 Edge 以查看详细结果。以下是一个示例:
freqtrade edge
其输出的示例:
对 | 止损 | 胜率 | 风险回报比 | 所需风险回报 | 期望值 | 总交易数 | 平均持续时间(分钟) |
---|---|---|---|---|---|---|---|
AGI/BTC | -0.02 | 0.64 | 5.86 | 0.56 | 3.41 | 14 | 54 |
NXS/BTC | -0.03 | 0.64 | 2.99 | 0.57 | 1.54 | 11 | 26 |
LEND/BTC | -0.02 | 0.82 | 2.05 | 0.22 | 1.50 | 11 | 36 |
VIA/BTC | -0.01 | 0.55 | 3.01 | 0.83 | 1.19 | 11 | 48 |
MTH/BTC | -0.09 | 0.56 | 2.82 | 0.80 | 1.12 | 18 | 52 |
ARDR/BTC | -0.04 | 0.42 | 3.14 | 1.40 | 0.73 | 12 | 42 |
BCPT/BTC | -0.01 | 0.71 | 1.34 | 0.40 | 0.67 | 14 | 30 |
WINGS/BTC | -0.02 | 0.56 | 1.97 | 0.80 | 0.65 | 27 | 42 |
VIBE/BTC | -0.02 | 0.83 | 0.91 | 0.20 | 0.59 | 12 | 35 |
MCO/BTC | -0.02 | 0.79 | 0.97 | 0.27 | 0.55 | 14 | 31 |
GNT/BTC | -0.02 | 0.50 | 2.06 | 1.00 | 0.53 | 18 | 24 |
HOT/BTC | -0.01 | 0.17 | 7.72 | 4.81 | 0.50 | 209 | 7 |
SNM/BTC | -0.03 | 0.71 | 1.06 | 0.42 | 0.45 | 17 | 38 |
APPC/BTC | -0.02 | 0.44 | 2.28 | 1.27 | 0.44 | 25 | 43 |
NEBL/BTC | -0.03 | 0.63 | 1.29 | 0.58 | 0.44 | 19 | 59 |
Edge 通过比较 calculate_since_number_of_days
和 minimum_expectancy
来生成上表,以找到基于配置文件的 min_trade_number
历史信息。Edge 用于比较的时间范围可以通过使用 --timerange
开关进一步限制。
在实时和模拟模式下,在 process_throttle_secs
过去后,Edge 将再次处理 calculate_since_number_of_days
和 minimum_expectancy
以找到 min_trade_number
。如果未找到 min_trade_number
,机器人将返回"白名单为空"。根据部署的交易策略,"白名单为空"可能会经常返回 - 或者总是返回。使用 Edge 也可能导致交易以突发方式进行,尽管这种情况很少见。
如果您经常遇到"白名单为空",请考虑调整 calculate_since_number_of_days
、minimum_expectancy
和 min_trade_number
以与您的策略的交易频率保持一致。
使用最新数据更新缓存的对¶
Edge 需要历史数据,就像回测一样。 请参阅文档的 数据下载 部分以获取详细信息。
精确止损范围¶
freqtrade edge --stoplosses=-0.01,-0.1,-0.001 #min,max,step
高级使用时间范围¶
freqtrade edge --timerange=20181110-20181113
执行 --timerange=-20190901
将获取所有可用数据,直到 9 月 1 日(不包括 2019 年 9 月 1 日)。
完整的时间范围规范:
- 使用 2018/01/31 之前的 tickframes:
--timerange=-20180131
- 使用 2018/01/31 之后的 tickframes:
--timerange=20180131-
- 使用 2018/01/31 到 2018/03/01 的 tickframes:
--timerange=20180131-20180301
- 使用 POSIX 时间戳 1527595200 到 1527618600 之间的 tickframes:
--timerange=1527595200-1527618600