精通金融模式识别(三)
原文:
annas-archive.org/md5/4328078f8bab6733c95749acb5952053译者:飞龙
第八章:高级蜡烛图表系统
到目前为止,您已经对可能对您有用的许多不同类型的模式有了全面的了解,但蜡烛图表也可以是创造性的,不必止步于基本的构建方法。本章介绍了两种蜡烛图表系统,提供了对原始系统的多样替代。
虽然原始系统将 OHLC 数据呈现为实际数据,但本章涵盖的两个建议系统采用了不同的方法来理解数据,并尽可能多地从中获取信息。
第一个高级图表系统是平均趋势烛台,它通过转换 OHLC 数据来帮助趋势追随者获得一个不那么嘈杂的视角。第二个图表系统是 K 线图表,它们仅仅是 OHLC 数据的平滑版本,应用蜡烛图案以寻找更多信号,同时减少噪音。
本章的目的是将这两个强大的图表系统添加到您的交易框架中,以便您有一个不同的视角。理想情况下,当使用原始蜡烛图系统检查模式时,您还应该在这两种替代蜡烛图系统上检查相同的模式。
平均趋势烛台系统
平均趋势烛台系统也称为平均趋势烛台。术语heikin-ashi在日语中意为“平均条”,考虑到其计算方式,这是直观的。创建平均趋势烛台图表的主要目的是理解潜在趋势,并过滤由随机波动引起的噪音。
您可以将该系统视为一种消噪技术,为您留下平滑的蜡烛图表。平均趋势烛台获取开盘价、最高价、最低价和收盘价,并使用简单的公式进行转换,然后绘制结果。
注意
通过转换 OHLC 数据,平均趋势烛台图表不代表实际价值,而是平滑的价值。例如,熊市平均趋势烛台并不一定代表真正的熊市烛台,其收盘价也不一定等于真正的烛台收盘价。事实上,平均趋势烛台的收盘价很少是真实的收盘价。
要计算平均趋势烛台的开盘价,请使用以下公式:
Transformed open price i = Openprice i-1 +Closeprice i-1 2
要计算平均趋势烛台的高价,请使用以下公式:
转换 高 价格 i = m a x ( 高 价格 i , 转换 开盘 价格 i , 转换 收盘 价格 i )
要计算平均趋势烛台的低价,请使用以下公式:
转换后的 低价 价格 i = m i n ( 低价 价格 i , 转换后的 开盘价 价格 i , 转换后的 收盘价 价格 i )
要计算 Heikin-Ashi 收盘价,请使用以下公式:
Transformed close price i = Openprice i +Highprice i +Lowprice i +Closeprice i 4
Heikin-Ashi 图表的第一要点是,由于平滑效应,蜡烛图之间的颜色交替不像普通蜡烛图那样常见,这是一个可取的特性。图 8-1 展示了在 AUDNZD 上两种系统的差异。试着找出哪个是 Heikin-Ashi 图表。
图 8-1. 上方是 AUDNZD 的 Heikin-Ashi 图表;下方是 AUDNZD 的普通蜡烛图表
注意相对来说,解释 Heikin-Ashi 图表相对容易,因为绿色(多头)蜡烛图会聚集在一起,显示当前趋势为多头,红色(空头)蜡烛图会聚集在一起,显示当前趋势为空头。这是平滑效应的威力。
图 8-2 展示了在 GBPAUD 上两种系统的差异。
图 8-2. 上方是 GBPAUD 的 Heikin-Ashi 图表;下方是 GBPAUD 的普通蜡烛图表
Heikin-Ashi 图表有一些局限性:
-
OHLC 的 Heikin-Ashi 值不是真实价格,因为它们已经被转换过了。
-
在平盘市场中,Heikin-Ashi 蜡烛图会在颜色上交替,这妨碍了它们发出信号的能力。
-
颜色变化有时可能滞后,这可能意味着一部分行情已经发生在检测到之时。
创建 Heikin-Ashi 蜡烛图的方法是使用数组的四列 OHLC,应用转换,并将结果输出到数组的下一个四列。函数如下:
def heikin_ashi(data, open_column, high_column, low_column, close_column,
position):
data = add_column(data, 4)
`# Heikin-Ashi Open`
try:
for i in range(len(data)):
data[i, position] = (data[i - 1, open_column] +
data[i - 1, close_column]) / 2
except:
pass
`# Heikin-Ashi High`
for i in range(len(data)):
data[i, position + 1] = max(data[i, position],
data[i, position + 3],
data[i, high_column])
`# Heikin-Ashi Low `
for i in range(len(data)):
data[i, position + 2] = min(data[i, position],
data[i, position + 3],
data[i, low_column])
`# Heikin-Ashi Close`
for i in range(len(data)):
data[i, position + 3] = (data[i, open_column] +
data[i, high_column] +
data[i, low_column] +
data[i, close_column]) / 4
return data
现在让我们看看如何在 Heikin-Ashi 图表上应用之前看到的一些蜡烛图,这应该产生多样化效果。
检测十字星模式
作为提醒,十字星模式是一种不确定性和反向配置,具有以下特征:
-
如果当前的收盘价高于当前的开盘价,前一个收盘价等于开盘价,并且前一个收盘价低于前一个开盘价,则已经打印出了一个看涨的十字星。
-
如果当前的收盘价低于当前的开盘价,前一个收盘价等于开盘价,并且前一个收盘价高于前一个开盘价,则已经打印出了一个看跌的十字星。
图 8-3 展示了一个信号图表,上面的信号在 Heikin-Ashi 图表(顶部)和正常蜡烛图表(底部)上叠加显示。
图 8-3. 顶部是 Heikin-Ashi 蜡烛图的信号(估计值);底部是真实蜡烛图上的相同信号。货币对是 USDCHF。
注意
图 8-3 的底部面板显示了真实信号相对于真实 OHLC 数据的位置。实际上,可以看到估计信号和真实信号的位置几乎没有差别。
图 8-4 展示了 USDCAD 的信号图表。不要忘记根据分析的资产对数值四舍五入。
图 8-4. 顶部是 Heikin-Ashi 蜡烛图的信号(估计值);底部是真实蜡烛图上的相同信号。资产是 USDCAD。
检查图案表现(见表 8-1)。重要的是使用真实的 OHLC 数据计算性能指标,而不是转换后的数值,以避免偏差系统。
表 8-1. Heikin-Ashi 图表与 Doji 图案:性能总结表
| 资产 | 命中率 | 盈利因子 | 风险-收益比 | 信号数 |
|---|---|---|---|---|
| EURUSD | 49,67% | 1,07 | 1,08 | 2126 |
| USDCHF | 47,30% | 1,07 | 1,19 | 2359 |
| GBPUSD | 48,73% | 1,03 | 1,08 | 1660 |
| USDCAD | 48,18% | 0,97 | 1,04 | 1982 |
| BTCUSD | 46,54% | 0,84 | 0,97 | 434 |
| ETHUSD | 44,91% | 0,81 | 0,99 | 1534 |
| GOLD | 44,93% | 1,05 | 1,29 | 3394 |
| S&P500 | 50,12% | 0,85 | 0,84 | 401 |
| FTSE100 | 52,10% | 1,09 | 1,00 | 261 |
检测 Tasuki 图案
作为提醒,Tasuki 图案是一种趋势跟随配置,其特征条件包括:
-
如果两期前的收盘价高于两期前的开盘价,一期前的开盘价高于两期前的收盘价,一期前的收盘价高于一期前的开盘价,并且当前的收盘价高于两期前的收盘价,则打印出了一个牛市 Tasuki 图案。
-
如果两期前的收盘价低于两期前的开盘价,一期前的开盘价低于两期前的收盘价,一期前的收盘价低于一期前的开盘价,并且当前的收盘价低于两期前的收盘价,则打印出了一个熊市 Tasuki 图案。
图 8-5 展示了 GBPAUD 的信号图表。
图 8-5. 顶部是 Heikin-Ashi 蜡烛图的信号(估计值);底部是真实蜡烛图上的相同信号。货币对是 GBPAUD。
要创建双图信号图表,请使用以下代码:
def candlestick_double_plot(data, buy_column, sell_column, window = 250):
fig, ax = plt.subplots(2, figsize = (10, 5))
sample = data[-window:, ]
for i in range(len(sample)):
ax[0].vlines(x = i, ymin = sample[i, 6], ymax = sample[i, 5],
color = 'black', linewidth = 1)
if sample[i, 7] > sample[i, 4]:
ax[0].vlines(x = i, ymin = sample[i, 4], ymax = sample[i, 7],
color = 'mediumseagreen', linewidth = 3)
if sample[i, 7] < sample[i, 4]:
ax[0].vlines(x = i, ymin = sample[i, 7], ymax = sample[i, 4],
color = 'maroon', linewidth = 3)
if sample[i, 7] == sample[i, 4]:
ax[0].vlines(x = i, ymin = sample[i, 7], ymax = sample[i, 4] +
0.00005, color = 'black', linewidth = 1.00)
if sample[i, buy_column] == 1:
x = i
y = sample[i, 0]
ax[0].annotate(' ', xy = (x, y),
arrowprops = dict(width = 9, headlength = 11,
headwidth = 11, facecolor =
'green', color = 'green'))
elif sample[i, sell_column] == -1:
x = i
y = sample[i, 0]
ax[0].annotate(' ', xy = (x, y),
arrowprops = dict(width = 9, headlength = -11,
headwidth = -11, facecolor =
'red', color = 'red'))
ax[0].grid()
for i in range(len(sample)):
ax[1].vlines(x = i, ymin = sample[i, 2], ymax = sample[i, 1],
color = 'black', linewidth = 1)
if sample[i, 3] > sample[i, 0]:
ax[1].vlines(x = i, ymin = sample[i, 0], ymax = sample[i, 3],
color = 'mediumseagreen', linewidth = 3)
if sample[i, 3] < sample[i, 0]:
ax[1].vlines(x = i, ymin = sample[i, 3], ymax = sample[i, 0],
color = 'maroon', linewidth = 3)
if sample[i, 3] == sample[i, 0]:
ax[1].vlines(x = i, ymin = sample[i, 3], ymax = sample[i, 0] +
0.00005, color = 'black', linewidth = 1.00)
if sample[i, buy_column] == 1:
x = i
y = sample[i, 0]
ax[1].annotate(' ', xy = (x, y),
arrowprops = dict(width = 9, headlength = 11,
headwidth = 11, facecolor =
'green', color = 'green'))
elif sample[i, sell_column] == -1:
x = i
y = sample[i, 0]
ax[1].annotate(' ', xy = (x, y),
arrowprops = dict(width = 9, headlength = -11,
headwidth = -11, facecolor =
'red', color = 'red'))
ax[1].grid()
图 8-6 展示了 EURCHF 的信号图表。
图 8-6. 顶部是平均烛台线估计的信号;底部是真实烛台线的相同信号。货币对为 EURCHF。
表 8-2 总结了一种算法在平均烛台线图上扫描和交易田边模式的性能指标。
表 8-2. 平均烛台线与田边模式:性能摘要表
| 资产 | 命中率 | 盈利因子 | 风险回报比 | 信号 |
|---|---|---|---|---|
| EURUSD | 51.04% | 0.83 | 0.80 | 384 |
| USDCHF | 50.00% | 0.91 | 0.91 | 468 |
| GBPUSD | 50.11% | 0.98 | 0.97 | 441 |
| USDCAD | 50.90% | 0.90 | 0.87 | 442 |
| BTCUSD | 50.00% | 0.94 | 0.93 | 248 |
| ETHUSD | 52.14% | 0.76 | 0.69 | 257 |
| GOLD | 47.04% | 0.92 | 1.04 | 372 |
| S&P500 | 55.76% | 1.12 | 0.88 | 52 |
| FTSE100 | 44.64% | 1.20 | 1.49 | 56 |
检测亢奋模式
作为提醒,亢奋模式是一种反向配置,其特征包括以下条件:
-
如果当前的空头烛台线实际尺寸大于前一个空头烛台线,并且前一个空头烛台线实际尺寸大于上一个空头烛台线,则打印出一个牛市的亢奋点。
-
如果当前的多头烛台线实际尺寸大于前一个多头烛台线,并且前一个多头烛台线实际尺寸大于上一个多头烛台线,则打印出一个牛市的亢奋点。
图 8-7 展示了 AUDNZD 的信号图。
图 8-7. 顶部是平均烛台线估计的信号;底部是真实烛台线的相同信号。货币对为 AUDNZD。
注
使用 rounding() 函数与亢奋模式可以帮助筛选出一些信号,如果你希望减少频率。
图 8-8 展示了 EURGBP 的信号图。保持趋势始终在你这边总是有趣的。这是你会在处理策略的章节中看到的一种技巧。主要思想是,在牛市趋势期间,最好考虑到一个看涨反转模式,而不是在熊市趋势期间。这是因为隐形的趋势手会帮助推动价格朝向总体方向。
图 8-8. 顶部是平均烛台线估计的信号;底部是真实烛台线的相同信号。货币对为 EURGBP。
表 8-3 总结了一种算法在平均烛台线图上扫描和交易亢奋模式的性能指标。
表 8-3. 平均烛台线与亢奋模式:性能摘要表
| 资产 | 命中率 | 盈利因子 | 风险回报比 | 信号 |
|---|---|---|---|---|
| EURUSD | 47.74% | 1.01 | 1.11 | 2572 |
| USDCHF | 45.64% | 0.91 | 1.09 | 2583 |
| GBPUSD | 46.52% | 1.00 | 1.15 | 2990 |
| USDCAD | 48.25% | 1.08 | 1.16 | 2918 |
| BTCUSD | 48.61% | 1.04 | 1.1 | 2055 |
| ETHUSD | 43.83% | 0.8 | 1.02 | 933 |
| 黄金 | 49.17% | 1.06 | 1.09 | 543 |
| 标准普尔 500 指数 | 46.28% | 1.08 | 1.25 | 417 |
| 富时 100 指数 | 44.46% | 0.94 | 1.17 | 497 |
检测“双重麻烦”模式
作为提醒,“双重麻烦”模式是一种趋势跟踪配置,具有以下条件:
-
第二根看涨的蜡烛图必须至少是前一个蜡烛图的 10 周期 ATR 的两倍大小(从高到低)。
-
第二根看跌的蜡烛图必须至少是前一个蜡烛图的 10 周期 ATR 的两倍大小(从高到低)。
图 8-9 展示了 USDCHF 上的信号图。
图 8-9. 顶部展示了平均柱状图(估计)上的信号;底部展示了相同信号在实际蜡烛图上的表现。货币对为 USDCHF。
图 8-10 展示了 USDJPY 上的信号图。
图 8-10. 顶部展示了平均柱状图(估计)上的信号;底部展示了相同信号在实际蜡烛图上的表现。资产为 USDJPY。
表格 8-4 总结了在平均柱状图上扫描和交易“双重麻烦”模式算法的表现指标。
表格 8-4. 带有“双重麻烦”模式的平均柱状图:绩效汇总表
| 资产 | 命中率 | 盈利因子 | 风险-收益比 | 信号数 |
|---|---|---|---|---|
| 欧元美元 | 57.62% | 0.92 | 0.67 | 1135 |
| 美元瑞士法郎 | 56.49% | 1.08 | 0.84 | 110 |
| 英镑美元 | 53.72% | 0.89 | 0.77 | 1167 |
| 美元加元 | 56.14% | 1.02 | 0.80 | 1058 |
| 比特币美元 | 62.84% | 1.19 | 0.71 | 716 |
| 以太坊美元 | 61.00% | 1.04 | 0.67 | 659 |
| 黄金 | 57.00% | 0.96 | 0.73 | 1021 |
| 标准普尔 500 指数 | 57.40% | 1.36 | 1.00 | 162 |
| 富时 100 指数 | 54.13% | 0.95 | 0.80 | 133 |
K 的蜡烛图系统
K 的 蜡烛图旨在进一步平滑 OHLC 值,以更好地理解潜在趋势,同时保留四个基本数据。¹ 因此,K 的蜡烛图系统使用默认的回顾期三来计算 OHLC 数据的简单移动平均值。
注
三期代表小时图中的三小时,日线图中的三天。
要计算 K 的开盘价格,请使用以下公式:
K’s open price i = Openprice i +Openprice i-1 +Openprice i-2 3
要计算 K 的最高价格,请使用以下公式:
K’s high price i = Highprice i +Highprice i-1 +Highprice i-2 3
要计算 K 的最低价格,请使用以下公式:
K’s low price i = Lowprice i +Lowprice i-1 +Lowprice i-2 3
要计算 K 的收盘价格,请使用以下公式:
K’s close price i = Closeprice i +Closeprice i-1 +Closeprice i-2 3
图 8-11 展示了常规蜡烛图与 K 的蜡烛图之间的差异。
图 8-11. 顶部为 EURUSD 的 K 蜡烛图;底部为 EURUSD 的常规蜡烛图
注意,K 的蜡烛图比平均柱状图的走势更加平滑。这是因为 K 的蜡烛图使用的平滑期为 3,而平均柱状图的平滑期为 1。
图 8-12 展示了 AUDNZD 常规蜡烛图与 K 的蜡烛图在同一货币对上的差异。
图 8-12. 顶部为 AUDNZD 的 K 的蜡烛图;底部为 AUDNZD 的常规蜡烛图
K 的蜡烛图的限制如下:
-
OHLC K 的蜡烛图的值不是真实价格,因为它们已经转换过了。
-
在平稳市场中,K 的蜡烛图会交替变色,这会妨碍它们生成信号的能力。
-
滞后效应甚至比 Heikin-Ashi 蜡烛图更大。但是,这并不足以完全抵消视图的好处。
您可以使用的代码 K 的蜡烛图的功能如下:
def k_candlesticks(data, open_column, high_column, low_column,
close_column, lookback, position):
data = add_column(data, 4)
`# Averaging the open price`
data = ma(data, lookback, open_column, position)
`# Averaging the high price`
data = ma(data, lookback, high_column, position + 1)
`# Averaging the low price`
data = ma(data, lookback, low_column, position + 2)
`# Averaging the close price`
data = ma(data, lookback, close_column, position + 3)
return data
现在让我们看看如何在 K 的蜡烛图上应用之前看到的一些蜡烛图。
检测十字星图案
十字星图案可能是使用 K 的蜡烛图最好的模式之一,因为它与许多形式的短期和长期逆转相关。图 8-13 展示了 GBPUSD 上的信号图表。
图 8-13. 顶部为 K 的蜡烛图上的信号(估计值);底部为实际蜡烛图上的相同信号。货币对为 GBPUSD。
图 8-14 展示了 USDCAD 上的信号图表。在震荡市场上,反转模式的效果相对更好。
图 8-14. 顶部为 K 的蜡烛图上的信号(估计值);底部为实际蜡烛图上的相同信号。货币对为 USDCAD。
表 8-5 总结了一个算法在 K 的蜡烛图上扫描和交易十字星图案的绩效指标。记住,提高绩效的关键之一是优化入场和出场技术。
表 8-5. K 的蜡烛图与十字星图案:绩效总结表
| 资产 | 命中率 | 盈利因子 | 风险-收益比 | 信号数 |
|---|---|---|---|---|
| EURUSD | 43.66% | 0.81 | 1.05 | 2352 |
| USDCHF | 43.80% | 0.90 | 1.15 | 2479 |
| GBPUSD | 46.19% | 1.07 | 1.24 | 1840 |
| USDCAD | 45.07% | 1.02 | 1.24 | 2143 |
| BTCUSD | 44.23% | 0.90 | 1.13 | 486 |
| ETHUSD | 45.93% | 1.20 | 1.41 | 1132 |
| GOLD | 45.60% | 0.89 | 1.06 | 2445 |
| S&P500 | 42.70% | 0.89 | 1.19 | 384 |
| FTSE100 | 46.44% | 1.19 | 1.37 | 267 |
检测挂月线图案
图 8-15 展示了 AUDNZD 上的信号图表。
图 8-15. 顶部为 K 的蜡烛图上的信号(估计值);底部为实际蜡烛图上的相同信号。货币对为 AUDNZD。
表 8-6 总结了一个算法在 K 的蜡烛图上扫描和交易挂月线图案的绩效指标。
表 8-6. K 的蜡烛图与挂月线图案:绩效总结表
| 资产 | 命中率 | 盈利因子 | 风险-收益比 | 信号数 |
|---|---|---|---|---|
| EURUSD | 50.00% | 1.11 | 1.11 | 50 |
| USDCHF | 51.68% | 0.83 | 0.78 | 89 |
| GBPUSD | 56.66% | 1.65 | 1.26 | 60 |
| USDCAD | 50.79% | 1.19 | 1.15 | 63 |
| BTCUSD | 43.24% | 0.78 | 1.02 | 74 |
| ETHUSD | 60.38% | 0.81 | 0.53 | 53 |
| GOLD | 55.38% | 1.01 | 0.81 | 130 |
| S&P500 | 47.05% | 0.77 | 0.86 | 17 |
| FTSE100 | 50.00% | 1.80 | 1.8 | 24 |
检测欢愉模式
图 8-16 展示了 AUDNZD 的信号图表。
图 8-16. 在顶部,K 的蜡烛图上的信号(估计值);在底部,实际蜡烛图上相同的信号。货币对为 AUDNZD。
图 8-17 展示了 AUDJPY 的信号图表。
图 8-17. 在顶部,K 的蜡烛图上的信号(估计值);在底部,实际蜡烛图上相同的信号。货币对为 AUDJPY。
表 8-7 总结了一个算法在 K 的蜡烛图上扫描和交易欢愉模式的性能指标。
图 8-7. K 的蜡烛图与欢愉模式:性能摘要表
| 资产 | 命中率 | 盈利因子 | 风险-收益比 | 信号数 |
|---|---|---|---|---|
| EURUSD | 46.29% | 1.02 | 1.18 | 3916 |
| USDCHF | 44.73% | 0.91 | 1.13 | 3798 |
| GBPUSD | 46.15% | 1.00 | 1.16 | 4446 |
| USDCAD | 45.64% | 0.99 | 1.18 | 4296 |
| BTCUSD | 46.71% | 1.01 | 1.15 | 3303 |
| ETHUSD | 45.14% | 0.98 | 1.19 | 1327 |
| GOLD | 47.40% | 1.03 | 1.14 | 597 |
| S&P500 | 48.08% | 1.27 | 1.37 | 522 |
| FTSE100 | 48.13% | 1.11 | 1.2 | 698 |
检测双重麻烦模式
图 8-18 展示了 USDCHF 的信号图表。
图 8-18. 在顶部,K 的蜡烛图上的信号(估计值);在底部,实际蜡烛图上相同的信号。货币对为 USDCHF。
图 8-19 展示了 EURGBP 的信号图表。
图 8-19. 在顶部,K 的蜡烛图上的信号(估计值);在底部,实际蜡烛图上相同的信号。资产为 EURGBP。
表 8-8 总结了一个算法在 K 的蜡烛图上扫描和交易双重麻烦模式的性能指标。
图 8-8. K 的蜡烛图与双重麻烦模式:性能摘要表
| 资产 | 命中率 | 盈利因子 | 风险-收益比 | 信号数 |
|---|---|---|---|---|
| EURUSD | 50.35% | 0.9 | 0.89 | 709 |
| USDCHF | 53.36% | 1.06 | 0.93 | 624 |
| GBPUSD | 52.20% | 0.98 | 0.9 | 793 |
| USDCAD | 50.15% | 0.93 | 0.92 | 664 |
| BTCUSD | 54.67% | 1.49 | 1.24 | 406 |
| ETHUSD | 61.37% | 2.94 | 1.85 | 334 |
| GOLD | 51.68% | 1.09 | 1.02 | 743 |
| S&P500 | 55.35% | 1.07 | 0.86 | 112 |
| FTSE100 | 40.25% | 0.42 | 0.62 | 77 |
总结来说,不同的图表系统在提供价格行动不同视角方面很有用。每个系统都有其优缺点。表 8-9 总结了关于图表系统的一些关键点。
图 8-9. 不同蜡烛图系统的比较
| 图表系统 | 优点 | 缺点 |
|---|---|---|
| 蜡烛图表 | 真实价格和易于解读 | 嘈杂 |
| 平均趋势图 | 由于平滑处理,趋势解释更佳 | 延迟小且价格不真实 |
| K 线图 | 由于额外平滑处理,趋势解释更佳 | 延迟更大且价格不真实 |
¹ OHLC 数据。
第九章:蜡烛图模式退出技术
每当出现蜡烛图模式时,你必须考虑三种技术(事件):
入场技术
该技术控制在验证模式后使用的买入或卖出价格。换句话说,你会在模式出现后的下一个开盘价买入吗,还是会使用其他价格?
目标技术
该技术控制在何处盈利性地清算头寸。它可以被称为模式的潜在目标或其预期反应区间。
止损技术
该技术控制在何处亏损清算头寸。它可以被称为模式的失效点或止损点。
本章讨论了两种退出技术,即目标技术和止损技术。
注意
注意入场技术假设在验证模式的蜡烛图开盘价上进行交易(做多或做空)。
对称退出技术
该技术根据模式内关键蜡烛图的大小设定了任何蜡烛图模式的简易目标。对称退出取决于关键蜡烛图的高低差,并从一个极端点进行投影(取决于是看涨还是看跌模式)。
注意
关键蜡烛图是用来确定对称目标的蜡烛图。一般来说,它是确认或定义模式的蜡烛图。例如,Doji 模式的关键蜡烛图是中间的那根蜡烛图,类似加号,而 Euphoria 模式的关键蜡烛图是第三根(最大的)蜡烛图。
图 9-1 展示了从关键蜡烛图(第一根)计算的看涨目标的例子。该示例展示了一个假设的模式。两个箭头的大小相同。
图 9-1. 使用对称退出技术计算看涨目标
考虑一个具有以下特征的看涨吞没形态模式:
-
蜡烛图吞没形态的开盘价:$100
-
蜡烛图吞没形态的最高价:$105
-
蜡烛图吞没形态的最低价:$95
-
蜡烛图吞没形态的收盘价:$102
你应该瞄准的理论上的看涨目标是 (95) + 115。
图 9-2 展示了使用该技术计算看涨吞没形态潜力的例子。
图 9-2. 使用对称退出技术计算蜡烛图吞没形态看涨目标
图 9-3 展示了从关键蜡烛图计算看跌目标的例子。该示例展示了一个假设的模式。
图 9-3. 使用对称退出技术计算看跌目标
考虑一个带有以下特征的看跌穿透(暗云)模式:
-
穿透蜡烛图的开盘价:$50
-
穿透蜡烛图的最高价:$55
-
吞没蜡烛的最低价:$45
-
吞没蜡烛的收盘价:$52
你应该瞄准的理论熊市目标是55 - 45。
图 9-4 展示了使用这种技术的牛市吞没模式的潜力。
图 9-4. 使用对称退出技术计算吞没模式的熊市目标
对称退出技术的优点在于其易用性和简单直觉,即仅仅通过投影高低点之间的距离,这本身就是一个以波动性加权的目标度量。
注意
记住,吞没和穿透模式是我在第六章中讨论的经典反向模式。
固定持有期退出技术
固定持有期假设,当你遇到另一个模式时,你必须退出一个模式。这是一个相对不灵活的技术,并且假设反应必须在一定的时间内发生。
主要思想是,在验证蜡烛图模式后开仓,一个计时器开始并运行直到退出,无论市场价格相对于进场价格如何。
例如,牛市吊顶模式验证完成,并开仓。在固定的持有期 5 个时期之后,必须在五个时间段后退出该持仓。固定的持有期技术假设了一个时间相关的模式,这对于预定的窗口是有效的。
可变持有期退出技术
可变的持有期假设,当你遇到另一个模式时,你必须退出一个模式。这是一个相对不灵活的技术。
主要思想是,在验证蜡烛图模式后开仓,只有当你遇到另一个模式时,无论是牛市还是熊市,你才会退出。这意味着只要市场向你展示否则,该模式就有效。
例如,验证了熊市孕线模式,并开仓。在变动的持有期之后,仅当遇到另一个模式时才退出该持仓。
对于罕见模式,这种技术可能会很危险,因为持仓可能会保持开放很长时间,从而使交易变得过时和无意义。
注意
此技术假设,只有在遇到相同类型的模式或任何其他类型的模式(牛市或熊市)时,你才会退出。值得一提的是,这是本书中呈现的回测中使用的技术。
混合退出技术
混合退出技术可能是讨论的退出技术中最好的选择,因为它结合了三种退出技术的属性,以限制风险。混合退出技术使用先到先服务的方法来确定蜡烛图模式的退出,使用以下规则:
-
对称投影是计算并赋予特定权重(1%至 99%之间)的。
-
变动持有期会监控每根蜡烛图,并赋予一定的权重,即给定权重的剩余部分。
-
固定持有期用于在最大持续时间场景中框定整个交易。
前述要点的含义是,你将在两个情况下退出模式,以先达到的条件为准(对称投影或出现另一模式)。当你退出一个位置时,例如 50%的权重,这意味着你将在验证对称投影或出现另一模式时退出 50%的仓位。
如果在预定时间窗口到期之前不符合这两个条件,将关闭仓位(进入固定持有期)。
让我们举个例子。假设市场在 EURUSD 上验证了一个看涨的镜像模式,并给出以下交易细节:
-
在$1.0000 处发起买单。
-
对称投影的计算给出目标价位为$1.0100。
-
权重设定为 50%。
-
固定持有期设定为五个周期。
下面是一个假设的时间轴,展示了如果交易者采用混合方法,交易可能的进展:
-
H-1: 市场达到$1.0110 的高点;因模式达到其对称投影,关闭一半仓位。
-
H-2: 市场交易并收盘于$1.0000。
-
H-3: 市场交易并收盘于$0.9995。
-
H-4: 市场交易并收盘于$1.0150。
-
H-5: 市场收盘价为$1.0120,五个周期内未出现任何模式。剩余仓位清算。
每个市场可能有适合它的独特退出策略。总体而言,混合技术试图通过整合多种退出技术来兼顾各方面的利益。表 9-1 展示了所讨论退出技术之间的主要区别。
表 9-1. 退出技术汇总
| 退出技术 | 持续时间 | 依赖性 |
|---|---|---|
| 对称退出技术 | 中长期 | 价格 |
| 固定持有期 | 取决于用户 | 时间 |
| 变动持有期 | 中长期 | 价格 |
| 混合退出技术 | 中长期 | 价格和时间 |
模式作废
总会有这样的时刻,模式未能产生预期的反应,正如您可能从回测结果中看到的那样,这并不少见。在这种情况下,您必须准备好限制损失,通过创建作废规则来实现。这些规则可以是客观的,也可以是主观的,具体取决于交易者。
模式可以通过风险管理技术来作废,例如由交易者自己设定的止损或者像之前在第五章中讨论的 ATR 等波动率措施。
注
注意,模式无效化与退出技术类似,不同之处在于它涉及到损失退出。然而,固定持有期技术既可以视为目标技术,也可以视为无效化技术,因为它是一种风险限制方法(在一定时间后退出),也是一种目标方法(在相信模式可能引起反应的有限时间后退出)。
模式无效化可以是双重的:
固定止损位
此无效化方法通过设定一个固定水平来限制风险,如果市场达到该水平,则清算头寸。随着市场波动性的不断变化,不建议采用此方法。
基于 ATR 的止损位
此无效化方法通过基于 ATR 的值设定限制水平来限制风险。建议根据波动性调整风险权重。
例如,交易者可以始终将 20 个点用作他们 EURUSD 短期交易的止损位。这意味着如果出现模式并且买入订单在0.9980 时,该头寸将自动以亏损清算。相比之下,如果同一交易者使用基于 ATR 的技术来无效化模式,他们将在市场突破初始时的开盘价减去 ATR 读数乘以 2 之类的常数后退出。
更明确地说,假设 ATR 值为 20。那么,止损位将在$0.9960(20 × 2 = 40)。
第十章:基于蜡烛图的趋势跟踪策略
模式识别只是方程式的一部分。当您发现一种模式时,您最有可能将其用于更广泛的交易框架中,因为仅依赖于蜡烛图形态的交易系统不太可能产生一致且稳定的正回报。
本章讨论了一些示例策略,您可以使用这些策略来使用特定技术规则来过滤趋势跟踪时的模式。每个市场都有其特点,必须具有优化的策略参数,这就是为什么我建议您专注于理解主要思想和概念,而不是记住本章中提出的策略的确切参数。
理想情况下,这些策略应该帮助您理解如何将不同的蜡烛图形态(经典和现代)与一些技术指标结合起来。本章还讨论了这些指标,以便您了解它们的机制和局限性。
注意
过滤 是指选择那些可能提供正回报概率更高的信号的概念。
结合 Double Trouble 模式和 RSI
作为提醒,Double Trouble 模式是一种现代趋势跟踪蜡烛图形态,其特征包括波动性(使用 ATR 指标计算)。正如在本书中前面讨论的那样,RSI 是一种指标,重新解释市场动量为 0 到 100 之间的值,以更好地理解当前的动态。
尽管 RSI 是一种反向指标,我将向您展示如何在趋势跟踪框架内使用它的技术。
此策略使用 RSI 作为检测到的 Double Trouble 模式的过滤器。这意味着每当发现一种模式时,都会通过 RSI 过滤器来验证信号。
注意
RSI 也可以作为动量计。因此,高于 50 的值表示看涨动量(上涨趋势),而低于 50 的值表示看跌动量(下跌趋势)。这是使用 RSI 作为趋势跟踪指标的一种方式。
策略的交易条件如下:
-
每当 14 周期 RSI 高于 50 时,出现看涨的 Double Trouble 模式时会生成一个长信号。
-
每当 14 周期 RSI 低于 50 时,出现看跌的 Double Trouble 模式时会生成一个短信号。
因此,过滤器是相对于 50 的 RSI 值。这是用来通过隐形手机制提高交易命中率的。¹ 策略的基本直觉是在牛市中仅采取看涨信号,在熊市中仅采取看跌信号。
下面的代码片段展示了如何编写策略的信号函数:
def signal(data, open_column, high_column, low_column, close_column,
atr_column, rsi_column, buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, close_column] > data[i, open_column] and \ data[i, close_column] > data[i - 1, close_column] and \ data[i - 1, close_column] > data[i - 1, open_column] and \ data[i, high_column] - data[i, low_column] > \ (2 * data[i - 1, atr_column]) and \ data[i, close_column] - data[i, open_column] > \ data[i - 1, close_column] - data[i - 1, open_column] and \ data[i, buy_column] == 0 and \ data[i, rsi_column] > 50:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, close_column] < data[i, open_column] and \ data[i, close_column] < data[i - 1, close_column] and \ data[i - 1, close_column] < data[i - 1, open_column] and \ data[i, high_column] - data[i, low_column] > \ (2 * data[i - 1, atr_column]) and \ data[i, open_column] - data[i, close_column] > \ data[i - 1, open_column] - data[i - 1, close_column] and \ data[i, sell_column] == 0 and \ data[i, rsi_column] < 50:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
注意到通过 RSI 代码行添加过滤器,说明其相对于中性水平 50 的值。图 10-1 显示了 USDCAD 的信号图表。
你始终可以调整策略,使其更适合你的配置和市场特征。然而,你应该记住,RSI 并非预测趋势的神奇工具,因为它是基于价格的,并且是滞后的(即,它不预测未来,只是讲述过去的故事)。此外,RSI 倾向于多次突破和重新整合 50 水平,这可能会产生错误的信号。
图 10-1. 使用双重麻烦图案和相对强弱指数(RSI)策略的信号图表
结合三根蜡烛图案和移动平均线
移动平均线是很好的趋势过滤器,有助于确定是否执行信号。记住,移动平均线是一种使用滚动窗口跟随市场价格的均值。这种策略结合了来自不同领域的两种趋势跟随元素²,以便发出信号。
三根蜡烛图案是由连续的大体积同类蜡烛线组成的趋势跟随配置,确认了底层趋势。一般来说,看涨的三根蜡烛图案被称为三白兵,而看跌的版本被称为三黑鸦。
注意
类似于使用 RSI 作为趋势跟随者,使用移动平均线在确定底层趋势方面非常有用。
当你看到市场价格高于其移动平均线(例如,100 周期移动平均线)时,通常表明牛市正在进行,而当你看到市场价格低于其移动平均线时,则通常表明熊市正在进行,从而指示了应该偏好哪种类型的信号。
该策略的交易条件如下:
-
每当市场价格高于其 100 周期移动平均线时,出现三白兵图案时生成长期信号。
-
每当市场价格低于其 100 周期移动平均线时,出现三黑鸦图案时生成短期信号。
注意
趋势跟随策略使用蜡烛图形态和趋势过滤器的组合,增加了交易的信心。尽管历史回测显示,过滤器并不总是能提高命中率,但对于某些市场来说,这一比率显著提升。
以下代码片段显示了如何编写该策略的信号函数:
def signal(data, open_column, close_column, ma_column, buy_column,
sell_column):
data = add_column(data, 10)
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, close_column] - data[i, open_column] > body and \ data[i - 1, close_column] - data[i - 1, open_column] > \ body and data[i - 2, close_column] - \
data[i - 2, open_column] > body and data[i, close_column] \ > data[i - 1, close_column] and data[i - 1, close_column] \ > data[i - 2, close_column] and data[i - 2, close_column] \ > data[i - 3, close_column] and data[i, close_column] > \ data[i, ma_column] and data[i, buy_column] == 0:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, open_column] - data[i, close_column] > body and \ data[i - 1, open_column] - data[i - 1, close_column] > body \ and data[i - 2, open_column] - data[i - 2, close_column] \ > body and data[i, close_column] < \ data[i - 1, close_column] and data[i - 1, close_column] \ < data[i - 2, close_column] and data[i - 2, close_column] \ < data[i - 3, close_column] and data[i, close_column] < \ data[i, ma_column] and data[i, sell_column] == 0:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
图 10-2 展示了一个使用 100 周期移动平均线(从左上角开始的弯曲线)作为过滤器的信号图表示例。注意,当市场价格高于其移动平均线时,你只会看到看涨信号,而当市场价格低于其移动平均线时,你只会看到看跌信号。
图 10-2. 使用三根蜡烛图案和移动平均线策略的信号图表
该策略最适合与其他趋势跟随策略一起使用。例如,一个基本交易者在 USDJPY 上有一个带息交易,并看到出现了三个白兵模式,同时市场位于其 100 期移动平均线之上。这种观察可以作为信念增强剂或确认以增加头寸。毕竟,交易是数字游戏,而将胜算累积到你这边则增加了获利的概率。
注
基本交易者是依靠经济和金融分析而非技术分析做决策的交易者。
带息交易是一种通过买入利率较高的货币并卖出利率较低的货币来获利于利率差异的货币头寸。
结合瓶形图案与随机振荡器
与 RSI 类似,随机振荡器是一种动量指标,在技术交易中广泛使用,并被零售和专业社区广泛知晓。随机振荡器使用基本的归一化函数将值困在 0 到 100 之间。它比 RSI 更容易计算。在讨论振荡器之前,让我们看一下归一化的概念。
每当你有一个不同未界定值的数组,比如市场价格(或任何其他随机时间序列),你可以将这些值归一化到 0 到 1 之间,其中 0 是特定时间窗口的最低值,1 是特定时间窗口的最高值。看看这个表格:
| 时间步骤 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 数值 | 10 | 40 | 5 | 90 | 25 |
| 标准化值 | 0.06 | 0.41 | 0.00 | 1.00 | 0.24 |
表格显示,当变量从第 1 期到第 5 期移动时,归一化值显示它们可以在 0 到 1 之间,0 指的是特定时间窗口的最低值(5),1 指的是特定时间窗口的最高值(90)。同样,注意到大约在 0 到 1 之间的值具有归一化值 0.41,这意味着它可能是中间值。这是正常的,因为 40 大约是 5 和 90 之间距离的一半。
下面的公式展示了如何在特定时间窗口内将任何值归一化到 0 到 1 之间:
x Normalized = x Original -x Low x High -x Low
让我们通过前面的表格来尝试一个例子。取值为 10,尝试使用公式进行归一化。你应该得到以下计算:
x Normalized = 10-5 90-5 = 0 . 06
随机振荡器以修改的方式将市场价格归一化,通过在公式中结合高点和低点使其变为以下形式:
Stochastic value i = Close i -Low i-n:i High i-n:i -Low i-n:i
公式意味着随机变量的当前值是当前收盘价减去设定的回看期内最低低价之间的差异,再除以相同回看期内最高高价与最低低价之间的差异。
注
简单归一化函数与随机震荡器函数的区别在于后者增加了高价和低价。
随机震荡器可以被描述为前一个公式的平滑版本,并且通常与其值上计算的短期移动平均线一起绘制,称为信号线。要创建默认的随机震荡器,请按照以下步骤进行:
-
使用 14 期滚动窗口归一化随机震荡器函数的值。
-
用三期移动平均线平滑第一步骤的结果。这就是随机震荡器。
-
计算信号线,这是在第二步骤的值上计算的另一个三期移动平均线。这就是信号线。
注意
在随机震荡器上计算的第一个移动平均线称为平滑,而信号线称为放缓。
与 RSI 类似,随机震荡器限于 0 到 100 之间,超卖区在 20 以下,超买区在 80 以上。由于其公式,它比 RSI 更具波动性,并且倾向于更快地从一个极端移动到另一个极端。
随机震荡器有许多技术,但我们感兴趣的是它与信号线的交叉。这被称为交叉技术,在逆向策略中很有名。 (然而,我将其与趋势跟随蜡烛图形模式一起使用,因此将其转变为趋势跟随技术。)
注意
由于归一化函数的性质,你必须小心随机震荡器有时会粘在极端值上,从而产生虚假信号。这种粘性效应表现为振荡器长时间停留在超卖和超买区域。
下面的代码片段展示了如何编写随机震荡器:
def stochastic_oscillator(data,
lookback,
high,
low,
close,
position,
slowing = False,
smoothing = False,
slowing_period = 1,
smoothing_period = 1):
data = add_column(data, 1)
for i in range(len(data)):
try:
data[i, position] = (data[i, close] - min(data[i - lookback \
+ 1:i + 1, low])) / (max(data[i - lookback\
+ 1:i + 1, high]) - min(data[i - lookback \
+ 1:i + 1, low]))
except ValueError:
pass
data[:, position] = data[:, position] * 100
if slowing == True and smoothing == False:
data = ma(data, slowing_period, position, position + 1)
if smoothing == True and slowing == False:
data = ma(data, smoothing_period, position, position + 1)
if smoothing == True and slowing == True:
data = ma(data, slowing_period, position, position + 1)
data = ma(data, smoothing_period, position + 1, position + 2)
data = delete_row(data, lookback)
return data
该策略的交易条件如下:
-
当随机震荡器高于其信号线时出现牛瓶形态时生成长信号。
-
当随机震荡器低于其信号线时出现熊瓶形态时生成短信号。
下面的代码片段展示了如何编写策略的信号函数:
def signal(data, open_column, high_column, low_column, close_column,
stochastic_column, signal_column, buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, close_column] > data[i, open_column] and \ data[i, open_column] == data[i, low_column] and \ data[i - 1, close_column] > data[i - 1, open_column] and \ data[i, open_column] < data[i - 1, close_column] and \ data[i, stochastic_column] > data[i, signal_column] and \ data[i, buy_column] == 0:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, close_column] < data[i, open_column] and \ data[i, open_column] == data[i, high_column] and \ data[i - 1, close_column] < data[i - 1, open_column] and \ data[i, open_column] > data[i - 1, close_column] and \ data[i, stochastic_column] > data[i, signal_column] and \ data[i, sell_column] == 0:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
图 10-3 显示了 USDCHF 的信号图表。
图 10-3. 使用瓶形态和随机震荡器的策略信号图表
结合丸坐模式与 K 的波动带
让我们从本书中涵盖的第一个蜡烛图案重新开始。丸坐模式可以被认为是最强大的蜡烛图案,因为它没有影线,意味着市场直接从一个点到另一个点而没有犹豫。
此策略使用一种称为波动带的概念,这是一种包围市场价格以提供动态支撑和阻力水平的框架技术。
注意
有许多类型的波动率带。最著名的是布林带。不同类型的波动率带的可靠性取决于基础市场及其参数。
在掌握 K 的波动率带之前,您必须了解布林带的基础知识。由约翰·波林格(John Bollinger)开发,这些带子的性质更倾向于统计而非技术。
考虑以下列表:{11, 4, 5, 20}。给定这四个值,您如何描述这些元素?一般来说,描述列表中元素的最佳指标是均值。它也是下一个预期值的最佳估计(如果您按时间顺序添加新元素)。要计算列表的均值,请按照以下公式操作:
χ = 1 n ( ∑ i=1 n x i ) = x 1 +x 2 +...+x n n
因此,根据公式,您必须将它们相加,并将结果除以它们的数量:
χ = 11+4+5+20 4 = 10
因此,列表的均值为 10。在前几章中,记住波动性的概念,您使用 ATR 来近似价格相对于过去时期的波动。带子使用另一种技术来计算波动性,即描述性统计中使用的标准差。
标准差是变量与组均值的平方偏差的平方根。这个概念可能听起来复杂,但让我们简化几个步骤:
-
计算每个变量(收盘价)在同一时间步长内与回溯期均值的距离。
-
对这些距离进行平方,以避免获得负值。
-
计算这些平方距离的均值。结果称为方差。
-
计算方差的平方根。结果称为标准差。
注意
在最后一步中取平方根,使您能够将均值进行苹果与苹果的比较。
从数学角度来说,标准差的公式如下所示:
σ = 1 n ∑ i=1 n (x i -χ) 2
现在您已经知道如何计算移动平均线,您可以简单地应用滚动标准差测量,这与移动平均线相同,只是您在计算滚动波动性。
-
上布林带是当前 20 周期移动平均值与当前标准差乘以 2 的和。
-
下布林带是当前 20 周期移动平均值与当前标准差乘以 2 的差。
注意
常数(默认为 2)乘以标准偏差的值,然后将乘积加或减去当前移动平均值。
图 10-4 显示了应用在 USDCHF 上的布林带示例。一些交易者喜欢保持中线(即 20 周期移动平均线)。然而,对于布林带来说,该线并不像带子本身那样有价值。
图 10-4. 在 USDCHF 上应用布林带的示例
一般来说,当市场达到下布林带时,被认为是超卖的,预期将出现看涨反应。同样,当市场达到上布林带时,被认为是超买的,并且预期将出现看跌反应。
现在让我们看一下 K 的波动带,它受布林带的启发。它遵循以下条件:
-
计算最近 20 个周期内最高高点和最低低点的均值。
-
计算最近 20 个周期的最高标准偏差测量。
-
上波动带是第一步和第二步结果的总和乘以 2。
-
下波动带是第一步和第二步结果的差值乘以 2。
注意
同样,常数(默认为 2)乘以标准偏差的最大值,然后将产品与最大高低点的均值当前值相加或相减。
下面的代码片段显示了编码 K 的波动带函数:
`# Defining the standard deviation function`
def volatility(data, lookback, close, position):
data = add_column(data, 1)
for i in range(len(data)):
try:
data[i, position] = (data[i -lookback + 1:i + 1, close].std())
except IndexError:
pass
data = delete_row(data, lookback)
return data
def k_volatility_band(data, lookback, multiplier, high, low, close,
position):
data = add_column(data, 6)
`# Calculating the median line`
for i in range(len(data)):
try:
data[i, position] = max(data[i - lookback + 1:i + 1, high])
data[i, position + 1] = min(data[i - lookback + 1:i + 1, low])
data[i, position + 2] = (data[i, position] + data[i, position \ + 1]) \/ 2
except ValueError:
pass
data = delete_column(data, position, 2)
`# Calculating maximum volatility`
data = volatility(data, lookback, close, position + 1)
for i in range(len(data)):
try:
data[i, position + 2] = max(data[i - lookback + 1:i + 1, \ position + 1])
except ValueError:
pass
data = delete_column(data, position + 1, 1)
`# Calculating the bands`
data[:, position + 2] = data[:, position] + (multiplier * data[:, \ position + 1])
data[:, position + 3] = data[:, position] - (multiplier * data[:, \ position + 1])
data = delete_column(data, position + 1, 1)
return data
注意
保持中线对于策略至关重要,因为它是主要的过滤器。因此,使用 K 的波动带时,中线出现在图表中。
请注意,词语波动性和标准偏差在本文中是可以互换使用的。图 10-5 展示了应用在 USDCHF 上的 K 的波动带的示例。
图 10-5. K 的波动带应用在 USDCHF 上的示例
现在让我们讨论一下策略。交易条件如下:
-
每当市场价格低于中线时出现看涨光头党图案时,将生成一个长信号。
-
每当市场价格高于中线时出现看跌光头党图案时,就会生成一个短信号。
下面的代码片段显示了如何编写策略的信号函数:
def signal(data, open_column, high_column, low_column, close_column,
middle_band, buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, close_column] > data[i, open_column] and \ data[i, high_column] == data[i, close_column] and \ data[i, low_column] == data[i, open_column] and \ data[i, close_column] < data[i, middle_band] and \ data[i, buy_column] == 0:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, close_column] < data[i, open_column] and \ data[i, high_column] == data[i, open_column] and \ data[i, low_column] == data[i, close_column] and \ data[i, close_column] > data[i, middle_band] and \ data[i, sell_column] == 0:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
图 10-6 显示了 AUDNZD 上的信号图表。
图 10-6. 使用光头党图案和 K 的波动带策略的信号图表
可选地,您可以考虑以下更严格的条件(然而,信号会更少频繁):
-
每当市场价格低于下波动率带时出现看涨光头党图案时,将生成一个长信号。
-
每当市场价格高于上波动带时出现看跌光头党图案时,将生成一个短信号。
总之,该策略可能会有更少的信号,但直观上它具有关于最强大蜡烛图(按振幅计算)和统计极端的坚实基础。
将 H 型模式与趋势强度指数结合起来
趋势强度指数(TII)衡量趋势的强度。它是通过围绕移动平均线和价格偏差的简单计算创建的,以显示趋势的强度。要构建该指标,请按以下步骤操作:
-
在市场价格上计算 20 周期移动平均值。
-
计算市场价格与移动平均线的偏差。这可以通过在两列上完成。如果收盘价高于其移动平均值,则第一列由两者之间的差异填充(上行变量),如果当前市场价格低于其移动平均值,则第二列由两者之间的差异填充(下行变量)。
-
计算市场上移动平均线之上和之下的数值。
注意
使用numpy函数count_nonzero()可以完成具有特定条件的数值计数。
- 按照以下公式找到 TII(默认为 20 期回顾)来应用:
T I I i = ( Numberofup Numberofup+Numberofdown ) x 100
要在 Python 中编码 TII,请使用以下函数:
def trend_intensity_indicator(data, lookback, close_column, position):
data = add_column(data, 5)
`# Calculating the moving average`
data = ma(data, lookback, close_column, position)
`# Deviations`
for i in range(len(data)):
if data[i, close_column] > data[i, position]:
data[i, position + 1] = data[i, close_column] - \ data[i, position]
if data[i, close_column] < data[i, position]:
data[i, position + 2] = data[i, position] - \ data[i, close_column]
`# Trend intensity index`
for i in range(len(data)):
data[i, position + 3] = np.count_nonzero(data[i - lookback + 1:i \ + 1, position + 1])
for i in range(len(data)):
data[i, position + 4] = np.count_nonzero(data[i - lookback + 1:i \ + 1, position + 2])
for i in range(len(data)):
data[i, position + 5] = ((data[i, position + 3]) / (data[i, \ position + 3] + data[i, position + 4])) \ * 100
data = delete_column(data, position, 5)
return data
通常情况下,当 TII 高于 50 时,正在进行强劲的看涨动能,而当 TII 低于 50 时,正在进行强劲的看跌动能。
策略的交易条件如下:
-
每当 20 期 TII 高于 50 时,出现看涨 H 型时产生长信号。
-
每当 20 期 TII 低于 50 时,出现看跌 H 型时产生短信号。
注意
调整 TII 的回顾以找到合适的调整是可取的。H 型模式作为逆转失效模式(因此是趋势确认模式),可能与显示基础趋势强度的指标很好地配合。
下面的代码片段显示了如何编写策略的信号函数:
def signal(data, open_column, high_column, low_column, close_column,
tii_column, buy_column, sell_column):
data = add_column(data, 5)
data = rounding(data, 4) `# Put 0 instead of 4 as of pair 4`
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, close_column] > data[i, open_column] and \ data[i, close_column] > data[i - 1, close_column] and \ data[i, low_column] > data[i - 1, low_column] and \ data[i - 1, close_column] == data[i - 1, open_column] and \ data[i - 2, close_column] > data[i - 2, open_column] and \ data[i - 2, high_column] < data[i - 1, high_column] and \ data[i, tii_column] > 50:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, close_column] < data[i, open_column] and \ data[i, close_column] < data[i - 1, close_column] and \ data[i, low_column] < data[i - 1, low_column] and \ data[i - 1, close_column] == data[i - 1, open_column] and \ data[i - 2, close_column] < data[i - 2, open_column] and \ data[i - 2, low_column] > data[i - 1, low_column] and \ data[i, tii_column] < 50:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
图 10-7 显示了 EURGBP 的信号图表。
图 10-7. 使用 H 型和趋势强度指数策略的信号图表
图表显示,有一个信号与看涨条件重合。
总结本章时,重要的是将正确的模式与正确的指标结合起来,这通过反向测试完成。当然,所提供的组合只是例子,可以通过将其他指标与其他模式融合来创建更强大的组合是非常有趣的。此外,你可以将多种模式包含在你的策略中,而不仅仅是将一个模式与一个指标结合。
¹ 看不见的手机制涉及与趋势同步使用交易,例如,在看涨趋势中仅接受买入信号,而忽略任何卖出信号。
² 三蜡烛模式源自于模式识别领域,而移动平均则来自于统计学和趋势跟随技术指标领域。
第十一章:基于蜡烛图的逆向策略
本章涵盖了蜡烛图案策略的逆向部分。 请记住,单独的蜡烛图案不太可能提供稳定的回报,因为它们必须与更复杂的技术和指标相结合,以将简单的想法和观察转化为可行的交易设置。
您应该认识到本章中使用的一些指标,因为它们已经表明它们在趋势跟踪中是有用的。 值得注意的是,RSI 不仅可以提供当前市场状态(有助于确定趋势),还可以提供可能指向逆转的极端水平(有助于确定逆向交易)。 换句话说,取决于您如何使用它,RSI 可以是趋势跟踪或逆向指标。
确保专注于将模式与指标相结合的直觉,以便您可以创建自己的策略组合。 毕竟,第十章和第十一章的重点是帮助您设计自己的策略。
将十字星图案与 RSI 相结合
此策略可能是最熟悉的将蜡烛图案和技术指标相结合的策略之一。 十字星是最简单的逆向配置,RSI 是最常用和研究的指标,两者都可以很好地确认预期的逆向移动。
注意
RSI 过滤器使得可以将十字星图案转换为一个蜡烛图案,而不是三个。 这是因为十字星图案中的第一个和第三个蜡烛只用于区分牛市十字星图案和熊市十字星图案。 因此,十字星只是一个加号形状的蜡烛。
该策略使用了一种激进的技术,等待 RSI 的读数低于超卖水平或高于超买水平。 超卖和超买水平是可变的,并取决于基础市场和 RSI 的回顾。
通常,使用 14 周期 RSI(默认版本)的交易者倾向于将 30 作为超卖水平,将 70 作为超买水平。 该策略使用 3 周期 RSI,将 20 作为超卖水平,将 80 作为超买水平。 这旨在增加信号的频率,因为这样更有可能在 RSI 上同时出现一个十字星图案和一个信号。
交易条件如下:
-
每当 3 周期 RSI 低于 20 时出现牛市十字星图案时,都会生成一个做多信号。
-
每当 3 周期 RSI 高于 80 时出现熊市十字星图案时,都会生成一个做空信号。
下面的代码片段显示了如何编写策略的信号函数:
lower_barrier = 20
upper_barrier = 80
def signal(data, open_column, close_column, indicator_column,
buy_column, sell_column):
data = add_column(data, 5)
data = rounding(data, 0)
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, close_column] == data[i, open_column] and \ data[i, indicator_column] < lower_barrier:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, close_column] == data[i, open_column] and \ data[i, indicator_column] > upper_barrier:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
图 11-1 显示了 AUDNZD 上的信号图,展示了该策略的运作情况。正如您在前几章中了解到的那样,逆势技术在平稳(横盘)市场中效果更好,因为供求之间存在暗示的平衡,任何一方的过度都有可能恢复正常。逆势工具通过这种过度来衡量。
图 11-1. 使用十字星模式和 RSI 计算策略的信号图
总结一下,十字星模式非常灵活,因其简单而容易与技术指标集成。该策略易于理解,并存在许多其他变体,调整以提高其频率和盈利能力。
将吞噬模式与布林带结合
第十章提到,布林带是一种随市场价格移动的包络线技术,利用统计方法提供动态支撑和阻力水平。此策略将吞噬模式与市场价格相对于下布林带或上布林带的位置结合起来。
策略的交易条件如下:
-
每当市场价格低于下布林带时出现多头吞噬模式时,会生成一个长信号。
-
每当市场价格高于上布林带时出现空头吞噬模式时,会生成一个短信号。
注意
市场价格低于其下布林带意味着统计上超卖事件,并暗示看涨反应,而市场价格高于其上布林带则意味着统计上超买事件,并暗示看跌反应。
以下代码片段显示了如何编写策略的信号函数:
def signal(data, open_column, close_column, upper_band_column,
lower_band_column, buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, close_column] > data[i, open_column] and \ data[i, open_column] < data[i - 1, close_column] and \ data[i, close_column] > data[i - 1, open_column] and \ data[i - 1, close_column] < data[i - 1, open_column] and \ data[i - 2, close_column] < data[i - 2, open_column] and \ data[i, close_column] < data[i, lower_band_column]:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, close_column] < data[i, open_column] and \ data[i, open_column] > data[i - 1, close_column] and \ data[i, close_column] < data[i - 1, open_column] and \ data[i - 1, close_column] > data[i - 1, open_column] and \ data[i - 2, close_column] > data[i - 2, open_column] and \ data[i, close_column] > data[i, upper_band_column]:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
一般来说,布林带使用 20 期的回溯期和 2 的标准差。但让我们再次回顾一下,确保你彻底理解这个伟大的指标设计的含义:
-
20 期回溯期是指在市场价格(收盘价)上计算的 20 期移动平均值。类似地,市场价格(收盘价)上计算了 20 期移动标准差测量。
-
标准差为 2 意味着在加到移动平均值或减去之前,滚动标准差测量将乘以两倍。
以下代码片段显示了计算布林带的函数:
def bollinger_bands(data, lookback, standard_deviation, close, position):
data = add_column(data, 2)
`# Calculating the moving average`
data = ma(data, lookback, close, position)
`# Calculating the standard deviation`
data = volatility(data, lookback, close, position + 1)
data[:, position + 2] = data[:, position] + (standard_deviation *
data[:, position + 1])
data[:, position + 3] = data[:, position] - (standard_deviation *
data[:, position + 1])
data = delete_row(data, lookback)
data = delete_column(data, position + 1, 1)
return data
注意
波动性 和 标准差 这两个词可以互换使用。
策略使用标准差为 1 的 20 期布林带。这是为了增加信号的频率,就像你在前一个策略中看到的那样。图 11-2 显示了 USDCAD 的信号图,你可以看到该策略的实施情况。
注意带更接近市场价格,并经常被突破或超越。从统计学角度来看,如果我们假设金融时间序列遵循正态分布,那么 68%的市场价格应该包含在移动平均线的一个标准偏差内(由上下带表示)。
吞没模式本身不是一个丰富的模式,因此通过添加额外的过滤器(布林带),频率进一步降低,这就是为什么调整参数很重要的原因。
图 11-2. 使用吞没模式和布林带的策略信号图表
将刺穿模式与随机振荡器结合使用
该策略将经典的蜡烛图逆势配置刺穿模式与技术指标随机振荡器结合,后者在第十章讨论过。
注意
请记住,随机振荡器使用归一化函数创建一个在 0 到 100 之间的滚动计算,同时考虑高低价格。它的解释和使用方式类似于 RSI。
策略的交易条件如下:
-
在 14 周期随机振荡器低于 20 时出现看涨的刺穿模式时会生成一个长信号。
-
在 14 周期随机振荡器高于 80 时出现看跌的刺穿模式时会生成一个短信号。
以下代码片段显示了如何编写策略的信号函数:
lower_barrier = 20
upper_barrier = 80
def signal(data, open_column, close_column, indicator_column,
buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, close_column] > data[i, open_column] and \ data[i, close_column] < data[i - 1, open_column] and \ data[i, close_column] > data[i - 1, close_column] and \ data[i, open_column] < data[i - 1, close_column] and \ data[i - 1, close_column] < data[i - 1, open_column] and \ data[i - 2, close_column] < data[i - 2, open_column] and \ data[i, indicator_column] < lower_barrier:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, close_column] < data[i, open_column] and \ data[i, close_column] > data[i - 1, open_column] and \ data[i, close_column] < data[i - 1, close_column] and \ data[i, open_column] > data[i - 1, close_column] and \ data[i - 1, close_column] > data[i - 1, open_column] and \ data[i - 2, close_column] > data[i - 2, open_column] and \ data[i, indicator_column] > upper_barrier:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
图 11-3 显示了 USDCHF 的信号图表,上升箭头代表看涨信号,下降箭头代表看跌信号。
总之,将刺穿模式与随机振荡器结合使用为预期的反转提供了额外的确认因素。随机振荡器可以根据需要进行调整,以校准策略到所需的频率和盈利能力。当然,没有一种策略适用于所有资产,但这就是我们称之为金融市场的半随机环境的本质。
图 11-3. 使用刺穿模式和随机振荡器的策略信号图表
将亢奋模式与 K 的信封结合使用
K 的信封是一对简单的 800 周期移动平均线,其中一个应用于价格的高点,另一个应用于价格的低点,从而形成一个区域。因此,它是一个随市场价格变动的动态支撑和阻力区域。K 的信封的一个重要特征是稳定性,这是由于回顾期显著高,因此相对于短期波动或噪音相对免疫。
该指标非常简单,用于确定当前市场趋势(看涨或看跌),或者在市场进入区域时寻找需求和供给区。以下代码块显示了 K 线信封的功能:
def k_envelopes(data, lookback, high, low, position):
`# Calculating the upper moving average`
data = ma(data, lookback, high, position)
`# Calculating the lower moving average`
data = ma(data, lookback, low, position + 1)
return data
图 11-4 显示了应用了 K 线信封的 USDCHF 图表。注意信封如何提供动态的支撑和阻力区域。
图 11-4. USDCHF 与 K 线信封
现在的想法是将 K 线信封与蜡烛图案结合起来。策略的交易条件如下:
-
每当市场价格在 K 线信封内时出现看涨的 Euphoria 模式时,就会生成一个长信号。
-
每当市场价格在 K 线信封内出现看跌的 Euphoria 模式时,就会生成一个短信号。
注
通过在 K 线信封内,市场价格因此正在期待一个由 Euphoria 模式确定的方向上的反应。换句话说,触发和方向由 Euphoria 模式给出,而确认则由 K 线信封给出。
以下代码片段显示了如何编写策略的信号函数:
def signal(data, open_column, close_column, upper_k_envelope,
lower_k_envelope, buy_column, sell_column):
data = add_column(data, 5)
data = rounding(data, 4) # Put 0 instead of 4 as of pair 4
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, open_column] > data[i, close_column] and \ data[i - 1, open_column] > data[i - 1, close_column] and \ data[i - 2, open_column] > data[i - 2, close_column] and \ data[i, close_column] < data[i - 1, close_column] and \ data[i - 1, close_column] < data[i - 2, close_column] and \ (data[i, open_column] - data[i, close_column]) > (data[i - 1,
open_column] - data[i - 1, close_column]) and \ (data[i - 1, open_column] - data[i - 1, close_column]) >
(data[i - 2, open_column] - data[i - 2, close_column]) and \ data[i, close_column] > data[i, lower_k_envelope] and \ data[i, close_column] < data[i, upper_k_envelope]:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, open_column] < data[i, close_column] and \ data[i - 1, open_column] < data[i - 1, close_column] and \ data[i - 2, open_column] < data[i - 2, close_column] and \ data[i, close_column] > data[i - 1, close_column] and \ data[i - 1, close_column] > data[i - 2, close_column] and \ (data[i, open_column] - data[i, close_column]) > (data[i \ - 1, open_column] - data[i - 1, close_column]) and \ (data[i - 1, open_column] - data[i - 1, close_column]) > \ (data[i - 2, open_column] - data[i - 2, close_column]) and \ data[i, close_column] > data[i, lower_k_envelope] and \ data[i, close_column] < data[i, upper_k_envelope]:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
图 11-5 显示了一个信号图表,其中 K 线信封在图表上可见。信号的生成是由于在信封内出现 Euphoria 模式。
这种策略借鉴了图表分析领域(支撑和阻力水平),并应用了 Euphoria 现代蜡烛图案来确认需求区或供给区。
图 11-5. 使用 K 线信封和 Euphoria 模式的策略信号图表
将障碍模式与 RSI-ATR 结合起来
RSI-ATR 到底是什么?嗯,你已经知道 RSI 是一个动量指标,ATR 是一个波动性指标。你也看过如何编写它们并相应地使用它们。然而,将它们融合成一个指标是你尚未见过的事情。RSI-ATR 是由 RSI 的方向元素和 ATR 的膨胀/缩小特性组成的结构化指标。它的使用方式与 RSI 相同。
注
结构化指标 是由两个或更多指标组成的技术指标。结构化指标的例子包括 RSI-ATR 和随机 RSI(其中包含随机振荡器和 RSI 作为基本组件)。
要计算 RSI-ATR(默认情况下,回溯期为 14),请按照以下步骤进行:
-
在市场价格上计算一个 RSI。
-
使用你已知的公式在市场价格上计算 ATR。
-
将第一步的 RSI 除以第二步的 ATR。
-
在上一步结果的基础上计算一个 RSI。
因此,RSI-ATR 是在 RSI(应用于市场价格)和 ATR 之间比率上计算的 RSI。这就是它是一个以波动性加权的指标的原因。以下代码片段显示了如何在 Python 中创建该指标:
def rsi_atr(data, lookback_rsi, lookback_atr, lookback_rsi_atr, high,
low, close, position):
data = rsi(data, lookback_rsi, close, position)
data = atr(data, lookback_atr, high, low, close, position + 1)
data = add_column(data, 1)
data[:, position + 2] = data[:, position] / data[:, position + 1]
data = rsi(data, lookback_rsi_atr, position + 2, position + 3)
data = delete_column(data, position, 3)
return data
图 11-6 展示了应用于 USDCHF 的 5 周期 RSI-ATR。
图 11-6. USDCHF 的 14 周期 RSI-ATR
注意
您一定注意到,处理 RSI-ATR 时有三个参数,而处理 RSI 时只有一个参数。RSI-ATR 的第一个参数是 RSI 的回溯期,第二个参数是 ATR 的回溯期,第三个参数是最终 RSI 的回溯期。
RSI-ATR 具有比原始 RSI 更高的波动性和变化率,因此对市场波动更为敏感。另一方面,您使用它的方式与使用 RSI 的方式相同。
请记住,Barrier 模式是一种现代配置(见第 7 章),仅仅是支撑和阻力水平概念的体现。
策略的交易条件如下:
-
每当 5 周期 RSI-ATR 低于 20 时,出现牛市 Barrier 模式时会生成长信号。
-
每当 5 周期 RSI-ATR 高于 80 时,出现熊市 Barrier 模式时会生成短信号。
以下代码片段展示了如何编写策略的信号函数:
def signal(data, open_column, close_column, indicator_column,
buy_column, sell_column):
data = add_column(data, 5)
for i in range(len(data)):
try:
`# Bullish setup`
if data[i, close_column] > data[i, open_column] and \ data[i, close_column] < data[i - 1, open_column] and \ data[i, close_column] > data[i - 1, close_column] and \ data[i, open_column] < data[i - 1, close_column] and \ data[i - 1, close_column] < data[i - 1, open_column] and \ data[i - 2, close_column] < data[i - 2, open_column] and \ data[i, indicator_column] < lower_barrier:
data[i + 1, buy_column] = 1
`# Bearish setup`
elif data[i, close_column] < data[i, open_column] and \ data[i, close_column] > data[i - 1, open_column] and \ data[i, close_column] < data[i - 1, close_column] and \ data[i, open_column] > data[i - 1, close_column] and \ data[i - 1, close_column] > data[i - 1, open_column] and \ data[i - 2, close_column] > data[i - 2, open_column] and \ data[i, indicator_column] > upper_barrier:
data[i + 1, sell_column] = -1
except IndexError:
pass
return data
图 11-7 展示了 AUDNZD 的信号图表。
图 11-7. 使用 RSI-ATR 和 Barrier 模式的策略信号图表
总之,RSI-ATR 是一个有趣的指标,提供了基于 RSI 的波动加权信息。将该指标与基于支撑和阻力水平概念的蜡烛图形态结合起来,可能会产生强大的交易配置。
第十二章:风险管理与交易心理
风险管理 是任何交易系统的支柱之一,实际上可能是最重要的支柱之一。找到一种有预测性且有利可图的交易策略将使您赚钱,但一个稳健的风险管理系统将使您能够保留利润。
本章讨论交易过程中的主观部分,并解释在交易中可能遇到的已知偏见。
风险管理基础
风险管理并不需要复杂。您可以通过本节中提供的几个简单规则来建立一个坚实的风险管理系统。
止损和目标
正如本书中先前讨论的那样,止损指令 是在交易发起时设置的自动指令,以确保最小预定损失。例如,如果您在金价 2,000,您可以将止损指令设置在 1,250,您的损失不超过 2,000 时预期出售的行为被称为止盈指令(目标)。
任何交易的最基本风险管理系统是设定适当的止损和目标,以便您能够规划预期并限制风险。
注意
您绝对不能违反的一条规则是:始终设定止损和目标。
移动止损
移动止损 是一种动态止损指令,当市场价格朝预期方向移动时跟随其变化,从而确保较少的损失,并在某一时刻确保无损交易。最好通过一个例子来理解移动止损指令。假设您在 EURUSD 上开多仓,价格为 1.0500。您设定止损指令为 1.0230,您希望确保您的交易永远不会亏钱。解决方案是使用移动止损指令,将止损从 1.0000,以便在最坏的情况下,当市场回落到 1.0100,从而无论如何都确保获利。当然,您将止损指令调整得越接近当前市场价格,您被迫平仓(在这种情况下是盈利的)的可能性就越大。
注意
在跟随趋势策略时,始终使用移动止损是个好主意。
仓位大小
仓位大小 是为每笔交易分配合约或手数的选择。一些交易者对所有交易使用相同的大小,而其他人则根据一个或多个因素对它们进行加权。有许多方法来确定您的仓位大小,有些方法使用历史数据,考虑到您的先前结果以优化大小。以下是一些技术列表:
固定金额
这是最简单的尺寸技术,因为它不需要任何努力。例如,你不需要选择合同数量或分配多少资金给交易。例如,你可以在每笔交易中投资$1,000,而不考虑你的资本或风险。这可能被认为是一种简单化的技术,但一些交易者更倾向于将他们的精力投入到其他地方,保持仓位大小中性。
投资组合百分比
这种技术是固定金额技术的更动态版本,因为交易员采取的仓位会随着它们与投资组合大小挂钩而增长和缩减。例如,你有一个 3%的仓位规则。如果你的投资组合是3,000 的交易。如果投资组合市值变为3,600 的交易。
信念方面
这是一种基于交易员信念程度的仓位尺寸的主观技术。例如,如果你更相信购买 EURUSD 而不是购买微软股票,那么你可能会在 EURUSD 交易中分配更多资金。金额的差异取决于你自己。
凯利准则
这是一个客观的数学公式,通过使用你的历史结果告诉你应该投资多少。由约翰·凯利创建,这个公式主要用于赛马投注,但也用于交易。公式如下:
Kelly weight = W - (1-W) R
这里,凯利权重 是你应该根据你的投资组合总值采取的交易大小的百分比,W 是历史命中率,R 是平均盈利和平均亏损的比率。看下面的例子:
-
过去 100 笔交易的历史命中率 = 56%
-
过去 100 笔交易的历史损失比率 = 44%
-
每笔平均盈利 = $110
-
每笔平均亏损 = $100
-
盈亏比 = 1.1
如果你发现一个机会,推荐的交易分配是多少?
通过使用这个公式,答案是 16%。自然地,凯利准则并非完美的度量方式,因为有时它倾向于给予不利于分散的大权重。用户在使用凯利准则时必须小心谨慎。你也可以使用一个紧缩器来减小公式给出的大小。
命中率技术:这是我有时使用的一种个人技术。它基于绩效聚类,这意味着通常盈利交易和亏损交易会同时发生。这尤其可能是因为某些策略在某些时期表现良好,而在其他时期表现不佳。本质上来说,这就像说交易员有时候有好的时期,有时候会处于输掉的一边,就像最有经验的老手一样。表格 12-1 展示了如何使用命中率技术来确定你的仓位大小。
表格 12-1. 时间命中率测量
| 元素 | t | t+1 | t+2 | t+3 | t+4 | t+5 |
|---|---|---|---|---|---|---|
| 命中率 | 50% | 60% | 40% | 40% | 70% | 60% |
| 头寸大小 | $5,000 | $6,000 | $4,000 | $4,000 | $7,000 | $6,000 |
表格显示了针对每笔交易默认大小为5,000。在表现良好时,系统会奖励交易者更多的分配和规模。
经济日历
经济日历是最简单的风险管理技术,因为它是一种风险回避的形式。经济日历显示了预计会对市场产生影响的重要新闻发布。Table 12-2 展示了某一天的经济日历的假设示例。
Table 12-2. 经济日历
| 时间 | 国家 | 事件 | 影响 | 上一个数值 | 预期数值 | 实际数值 |
|---|---|---|---|---|---|---|
| 9:00 AM | 英国 | 消费者价格指数 | 高 | 1.00% | 1.20% | 1.10% |
| 11:30 AM | 德国 | 核心消费者价格指数 | 高 | 0.50% | 0.75% | 0.75% |
| 4:30 PM | 美国 | 初次申请失业救济人数 | 低 | 232,000 | 215,000 | 229,000 |
| 7:30 PM | 美国 | 利率决定 | 高 | 1.50% | 1.50% | TBA |
一些交易者根据新闻交易,因此他们喜欢在新闻发布前或发布后几秒钟内交易,以从波动中获利。从风险管理的角度来看,这不被推荐,因为波动在新闻事件周围是随机的,有时会给市场带来惊喜。
最好的做法是避免在历史上曾引起极端波动的重要发布时间周围进行交易。例如政治公告、国内生产总值数据和 FOMC 会议。
注意
FOMC 指联邦公开市场委员会。该委员会监督国家的公开市场国库操作,并就利率作出决策。
行为金融:偏见的力量
行为金融,源自行为经济学,试图解释市场异常现象和交易者的行为。通过深入理解行为金融,你将更好地理解市场为何在某些事件和水平周围以特定方式反应。根据行为金融的观点,这些模式具有心理学特性,因此是由行为特征引起的。
金融市场由不同的人类和机器参与者的行动和反应组成,形成了心理和量化的炖菜。这解释了低信号与噪声比率——换句话说,为什么难以在常规基础上准确预测市场。这些行动和反应也被称为偏见,它们是对某些事件的人类反应的缺陷。
偏见是本节的主角,它们分为两类:
认知偏见
这些偏见源自于知识的缺乏。认知偏见通常涉及基于错误的市场假设或糟糕研究的错误结论。
情绪偏见
这些偏见大多是由感觉驱动并具有冲动性质。它们不是由于教育不足引起的,而是由于缺乏自我控制和自我管理所致。
认知偏见
本小节列出了一些最常见的认知偏见及其市场影响,并提供了如何避免它们的建议:
保守主义偏见
当市场参与者对新信息反应迟缓并对基本比率给予过多重视时,就会出现这种情况。这是一种未适应失败类型。应对这种偏见的方法是强迫自己对基本分析持怀疑态度,并始终保持灵活和随时准备变化。市场不总是像过去那样行动,因为它是前瞻性的。
确认偏见
当交易者专注于有利于其持仓的信息类型并忽视不利于其持仓的信息类型时,就会出现这种情况。这是最常见的偏见之一,实际上是一种随时间导致过度自信的正常心态。解决这种问题的最佳方法是保持公正和中立,虽然这样说起来容易做起来难。另一种方法是通过突出显示所分析的基础资产的吸引力(或不吸引力)的评分卡自动化决策过程。总的来说,人类普遍受到这种偏见的影响,而不仅仅是金融领域。
控制错觉偏见
当交易者高估自己控制交易结果的能力时,就会出现这种情况。这种偏见主要是由于一连串的赢利交易,可能会因对投资资产拥有权力感而导致集中的持仓。市场由大量参与者和数万亿美元的投资组成,因此不太可能受到任何单个人的影响(有少数极少的例外涉及小额和非流动资产)。消除控制错觉的方法是保持专注和谦逊,并理解自己面对的是每天都在变化动态和驱动因素的半随机环境。
事后诸葛亮偏见
这种情况发生在交易者高估他们过去的准确性,并可能导致过度冒险。看过去的图表并得出随后的方向显然是明显的结论是很容易的。大多数反向测试都包含一种事后诸葛亮偏见,因为条件是在分析期末创建的。市场技术分析师在看到过去某些技术运行良好时,往往会高估自己的能力,但未考虑到被测试期间的环境。此外,一些配置在发生时与完成时看起来并不相同。事后诸葛亮偏见可能很难治愈,但最佳方法是考虑到在分析期间存在的变量,以更真实地模拟过去环境。
锚定偏见
这种情况发生在交易员的观点被锚定到某个基准点,并且未能根据新信息进行调整。正如我所提到的,分析师或交易员必须保持动态和开放的心态。治疗这种偏见的最佳方法是随时关注新信息和数据。
这种情况发生在交易员因为将资金分配到不同的基金中而给同样金额的钱赋予不同的价值。例如,人们通常会对通过工作赚取的钱和不劳而获得的钱有所不同对待。这是一种认知偏见。治疗这种偏见的最佳方法是在将其分配到不同投资组合时将所有资金视为可互换的。
这种情况发生在交易员根据能够轻易回忆起的位置选择头寸。这意味着熟悉的资产比不熟悉的资产更具吸引力,这是一个错误的假设,因为机会可能来自任何类型的市场。这是一种心理捷径,交易员在研究中不费多少功夫。要治疗这种偏见,您必须在选择可投资资产的宇宙之前进行全面的尽职调查。不要仅仅因为熟悉就交易 EURUSD:要开阔你的视野。
这种情况发生在失去的痛苦大于赢得的喜悦。这是迄今为止最常见的偏见。众所周知,人类更喜欢不亏钱而不是赚钱,正如丹尼尔·卡尼曼和阿莫斯·特瓦斯基在《前景理论:决策风险分析》(1977 年)中所证明的那样。损失厌恶可能导致减少风险承受能力,因此导致预期收益减少。然而,最重要的影响在于止损水平。厌恶损失的人不愿意接受他们正在亏钱,并且会将亏损的头寸视为持续的头寸,因此更愿意等待直到变得盈利。这是非常危险的,因为在没有止损水平的情况下留下头寸可能会导致灾难性的结果。此外,有些人因害怕后悔而过快地退出盈利头寸(一种后悔恐惧)。处理损失厌恶的最佳方式是自动化风险管理流程,并尊重在交易初始时设定的止损和目标订单。
注意
每当有钱可赚时,非理性就会悄然而至。
情绪偏见
本小节列出了一些最常见的情绪偏见及其影响。需要提醒的是,虽然认知偏见与知识缺乏有关,情绪偏见与心理特征相关:
这种情况发生在交易员享受连续获胜并相信这是由于他们卓越的交易能力,从而导致持有集中头寸和过度交易。好的连胜会终结,因此交易员必须始终遵循程序,确保不偏离策略。
后悔规避偏见
这指的是出于恐惧而停留在低风险投资中。这实际上与交易者的风险偏好有关。没有对错答案,但后悔的恐惧可能使交易员错失有趣的机会。你应该冒险赚钱,但只能计算风险。
归属偏见
这发生在交易员认为所拥有的资产比未拥有的更有价值的时候。这可能会阻碍交易者的机会,并导致他们仅限于已经拥有的资产,即使随着时间的推移它们也会衰减。市场无处不在地提供机会,参与者必须时刻保持警惕,以找到下一个大事件。
交易框架
理论交易主题、模拟交易和真实交易各不相同。任何交易员的目标是赚取真实的金钱,而这比看起来要困难。让我们定义这三个概念:
理论交易主题
这是交易员考虑交易策略并在脑海中简化它们的地方。这是偏见形成的地方,特别是事后偏见。
模拟交易
这是交易员使用平台模拟交易的时候。它与真实交易非常相似,但使用的资金并非真实,因此无法模拟真实生活情绪的激动。
真实交易
这时交易员通过实际经纪人使用真实资金买卖资产,以增加财富。
真实交易具有以下时间步骤:
-
构思生成:这是战略想法形成的地方。例如,你考虑将镊子模式与特定市场体制中的技术指标结合起来。你已经形成了一个想法,现在你想进行回测,看看它在过去是否表现良好。
-
回测:在这个阶段,你评估过去的结果并决定是否将策略投入实战。这可能是最重要的一步,因为它涉及许多因素,如适当的回测实践和验证,以及具备风险管理技术的回测。
-
交易前管理:这是你准备交易设置的地方,如止损和止盈订单,并决定是否使用追踪止损。此外,你必须使用本章前讨论的技术之一来确定仓位大小。
-
交易管理:这是你监控利润和损失表以及进行中交易的地方,以评估你的情况。在这一步骤中,纪律至关重要,因为你不能让情绪影响你的判断,导致你过早或过晚地结束交易。
这标志着本章的结束,您学到了如何更好地管理交易的各种信息。交易是一场心理游戏,您有责任通过适当的培训克服情绪和认知障碍,以最大化生存机会。
这也标志着蜡烛图案探险的结束。我要感谢你,并祝贺你完成这本书,并花时间理解我的研究和技术。图案,以其所有的威严和复杂性,必须谨慎使用,并与其他技术工具适当结合。正如你在本章中看到的那样,一个交易系统必须包括构思、回测、风险管理和交易管理。
如果你想深入研究技术模式识别,特别是蜡烛图案,请确保从任何配置的理念开始。为什么和什么一样重要。Python 是一种非常强大和多功能的编程语言,将为你的研究提供便利。因此,我建议掌握它以加快你的研究进程。
¹ 这也被视为一种情绪偏差。