Skip to article frontmatterSkip to article content
使用概率和统计来优化交易策略

Edge Positioning - 边缘定位

通过概率分析提高交易胜率和风险回报比

边缘定位

特别注意,该功能以移除,详情

Edge Positioning 模块使用概率来计算您的胜率和风险回报比。它将使用这些统计数据来控制您的策略交易入场点、头寸大小和止损。

简介

交易策略并不完美。它们是容易受到市场及其指标影响的框架。由于市场完全不可预测,有时策略会赢,有时同一策略会输。

为了在市场上获得优势,策略必须赚取比损失更多的钱。在交易中赚钱不仅仅是关于策略多久赚钱或亏钱。

Edge Positioning 模块旨在提高策略的获胜概率和策略在长期内赚取的钱。

我们提出以下问题:

另一种看待它的方式是提出类似的问题:

Edge positioning 试图自动回答关于风险/回报和头寸大小的难题,以最小化给定策略的损失机会。

交易、获胜和失败

让我们将 oo 称为单个交易 oo 的回报,其中 oRo \in \mathbb{R}

集合 O={o1,o2,...,oN}O = \{o_1, o_2, ..., o_N\} 是交易会话中所有交易回报的集合。我们说 NNOO 的基数,或者通俗地说,它是交易会话中进行的交易数量。

获胜交易是策略赚取钱的交易。

赚钱意味着策略在扣除所有费用后,以盈利的方式平仓。形式上,获胜交易的回报 oi>0o_i > 0。同样,失败交易的回报 oj0o_j \leq 0。因此,我们可以发现所有获胜交易的集合 TwinT_{win},如下所示:

Twin={oOo>0}T_{win} = \{ o \in O | o > 0 \}

同样,我们可以发现所有失败交易的集合 TloseT_{lose},如下所示:

Tlose={oOo0}T_{lose} = \{o \in O | o \leq 0\}

胜率和失败率

胜率 WW 是策略获胜交易与所有交易的比例。我们使用以下函数计算胜率:

W=TwinNW = \frac{|T_{win}|}{N}

其中 WW 是胜率,NN 是交易数量,TwinT_{win} 是策略赚钱的所有交易的集合。

同样,我们可以计算失败交易的比率:

L=TloseNL = \frac{|T_{lose}|}{N}

其中 LL 是失败率,NN 是进行的交易数量,TloseT_{lose} 是策略亏钱的所有交易的集合。注意,上述公式与计算 L=1WL = 1 - WW=1LW = 1 - L 相同。

风险回报比

风险回报比(RR)是用于衡量给定投资的预期收益与损失风险的公式。

它基本上是您可能赢得的除以您可能损失的。形式上:

R=potential profitpotential lossR = \frac{\text{potential profit}}{\text{potential loss}}

在长期内,即在许多交易中,我们可以通过将策略在获胜交易上的平均利润除以策略在失败交易上的平均损失来计算风险回报。我们可以计算平均利润,μwin\mu_{win},如下所示:

average profit=μwin=sum of profitscount winning trades=oTwinoTwin\text{average profit} = \mu_{win} = \frac{\text{sum of profits}}{\text{count winning trades}} = \frac{\sum^{o \in T_{win}} o}{|T_{win}|}

同样,我们可以计算平均损失,μlose\mu_{lose},如下所示:

average loss=μlose=sum of lossescount losing trades=oTloseoTlose\text{average loss} = \mu_{lose} = \frac{\text{sum of losses}}{\text{count losing trades}} = \frac{\sum^{o \in T_{lose}} o}{|T_{lose}|}

最后,我们可以计算风险回报比,RR,如下所示:

R=average profitaverage loss=μwinμloseR = \frac{\text{average profit}}{\text{average loss}} = \frac{\mu_{win}}{\mu_{lose}}\\

期望值

通过结合胜率 WW 和风险回报比 RR 来创建期望比率 EE

期望比率是交易中投资的预期回报。我们可以计算 EE 的值如下:

E=RWLE = R * W - L

上面示例中计算的期望值意味着,平均而言,该策略的交易将返回其损失的 1.68 倍。换句话说,该策略平均每损失 1$,赚取 1.68$。

这很重要,原因有两个:首先,这似乎很明显,但您立即知道您有正回报。其次,您现在有一个数字可以与候选系统进行比较,以决定使用哪些系统。

重要的是要记住,任何期望值大于 0 的系统在使用过去数据时都是盈利的。关键是找到一个在未来会盈利的系统。

您还可以使用此值来评估对此系统的修改的有效性。

它是如何工作的?

Edge 将动态止损、动态头寸和白名单生成结合到一个隔离模块中,然后应用于交易策略。如果在配置中启用,Edge 将通过一系列止损的历史数据,以找到买入和卖出/止损信号。然后,它计算每个止损的胜率和期望值。以下是一个示例:

交易对止损胜率风险回报比期望值
XZC/ETH-0.010.501.1763840.088
XZC/ETH-0.020.511.1159410.079
XZC/ETH-0.030.521.3596700.228
XZC/ETH-0.040.511.2345390.117

这里的目标是为策略找到最佳止损,以最大化期望值。在上面的示例中,根据历史数据,止损为 3%3\% 导致最大期望值。

Edge 模块然后动态地将评估的止损值强制到您的策略中。

头寸大小

Edge 根据以下因素指示机器人每个交易的风险金额:

允许的风险资本计算如下:

允许的风险资本 = (可用资本百分比) X (每笔交易允许的风险)

止损是根据历史数据计算的,如上所述。

头寸大小计算如下:

头寸大小 = (允许的风险资本) / 止损

示例:

假设质押货币是 ETH,钱包中有 10 ETH。可用资本百分比为 50%50\%,每笔交易允许的风险为 1%1\%。因此,用于交易的可用资本为 100.5=510 * 0.5 = 5 ETH,允许的风险资本为 50.01=0.055 * 0.01 = 0.05 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_secsEdge 运行的频率(秒)。
默认为 3600(每小时一次)。
数据类型: 整数
calculate_since_number_of_daysEdge 计算胜率、风险回报和期望值的数据天数。
注意,它会下载历史数据,因此增加此数字会导致机器人变慢。
默认为 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在计算历史数据的 WRE(期望值)时,您总是希望有最少的交易数量。这个数字越大,Edge 越可靠。
在单笔交易中胜率为 100% 并不意味着什么。但在过去的 100 笔交易中胜率为 70% 显然意味着什么。
默认为 10(强烈建议不要减少此数字)。
数据类型: 整数
max_trade_duration_minuteEdge 将过滤掉持续时间较长的交易。如果交易在一个月后盈利,很难基于此评估策略。但如果大多数交易都是盈利的,并且它们的最大持续时间为 30 分钟,那么这显然是一个好迹象。
注意: 在配置此值时,您应该考虑您的时间框架。例如,对于具有 4 小时间隔的策略,过滤掉持续时间少于一天的交易没有意义。默认值假设您的时间框架相对较小(1m 或 5m 等)。
默认为 1440(一天)。
数据类型: 整数
remove_pumpsEdge 将在处理历史数据时移除给定市场中的突然上涨。然而,由于加密货币市场中经常发生上涨,我们建议您保持此选项关闭。
默认为 false
数据类型: 布尔值

独立运行 Edge

您可以独立运行 Edge 以查看详细结果。以下是一个示例:

freqtrade edge

其输出的示例:

止损胜率风险回报比所需风险回报期望值总交易数平均持续时间(分钟)
AGI/BTC-0.020.645.860.563.411454
NXS/BTC-0.030.642.990.571.541126
LEND/BTC-0.020.822.050.221.501136
VIA/BTC-0.010.553.010.831.191148
MTH/BTC-0.090.562.820.801.121852
ARDR/BTC-0.040.423.141.400.731242
BCPT/BTC-0.010.711.340.400.671430
WINGS/BTC-0.020.561.970.800.652742
VIBE/BTC-0.020.830.910.200.591235
MCO/BTC-0.020.790.970.270.551431
GNT/BTC-0.020.502.061.000.531824
HOT/BTC-0.010.177.724.810.502097
SNM/BTC-0.030.711.060.420.451738
APPC/BTC-0.020.442.281.270.442543
NEBL/BTC-0.030.631.290.580.441959

Edge 通过比较 calculate_since_number_of_daysminimum_expectancy 来生成上表,以找到基于配置文件的 min_trade_number 历史信息。Edge 用于比较的时间范围可以通过使用 --timerange 开关进一步限制。

在实时和模拟模式下,在 process_throttle_secs 过去后,Edge 将再次处理 calculate_since_number_of_daysminimum_expectancy 以找到 min_trade_number。如果未找到 min_trade_number,机器人将返回"白名单为空"。根据部署的交易策略,"白名单为空"可能会经常返回 - 或者总是返回。使用 Edge 也可能导致交易以突发方式进行,尽管这种情况很少见。

如果您经常遇到"白名单为空",请考虑调整 calculate_since_number_of_daysminimum_expectancymin_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 日)。

完整的时间范围规范: