第一章:外汇市场基础
各位同学好,我是你们这门课的主讲。做了十几年外汇量化交易,我见过太多人一上来就研究各种复杂策略,结果连市场什么时候开盘、哪个货币对流动性最好都搞不清楚。说实话,这就像你还没学会走路就想跑马拉松——不摔跟头才怪。
今天这一章,咱们先把地基打牢。我会带你看看全球外汇市场的真实面貌,搞清楚那些天天在屏幕上跳动的数字到底代表什么。
1.1 全球外汇市场格局
外汇市场有多大?我给你们一个直观的数字:全球外汇市场一天的交易量,大约是6.6万亿美元。什么概念?纽约证券交易所一天的交易量,连它的零头都不到。说白了,这是全世界最大的金融市场,没有之一。
这个市场有个特点——它没有中央交易所。不像股票有纽交所、上交所,外汇交易是分散在全球各地的银行、经纪商、基金之间进行的。我们管这叫「场外交易」,英文叫OTC。
市场的参与者主要分这么几层:
- 顶层:各国央行和大型商业银行。比如摩根大通、德意志银行、花旗银行,它们才是真正的「做市商」,负责给市场提供流动性。
- 中间层:对冲基金、大型企业、资产管理公司。它们通过银行进行大额交易。
- 底层:零售交易者,也就是我们这些散户。通过经纪商接入市场。
核心要点:外汇市场是一个多层级的金字塔结构。你看到的报价,其实是经过好几层「加价」之后的。我刚开始做交易时总纳闷为什么点差这么大,后来才明白——每一层都要赚钱嘛。
这里有个重要的概念叫「流动性」。说白了,就是你想买的时候有人卖,想卖的时候有人买。流动性越好的货币对,交易成本越低,滑点也越小。嗯,这个后面还会反复提到。
1.2 主要货币对与报价机制
外汇市场里交易的货币,不是随便两个国家就能配对的。真正活跃的,其实就那么几个。
我把它们分成三类:
| 类别 | 货币对 | 特点 |
|---|---|---|
| 主要货币对 | EUR/USD, USD/JPY, GBP/USD, USD/CHF | 流动性最好,点差最低,我90%的交易都在这些上面 |
| 交叉盘 | EUR/GBP, EUR/JPY, GBP/JPY | 不含美元,波动性更大,适合做套利 |
| 新兴市场 | USD/TRY, USD/ZAR, USD/MXN | 流动性差,点差高,但有时候波动惊人 |
说到报价机制,这里有个坑。你看屏幕上的报价,比如EUR/USD = 1.1050/1.1052。左边1.1050是「买价」,右边1.1052是「卖价」。你想想看,如果你同时买入再卖出,一进一出就亏了2个点——这就是点差,经纪商赚的就是这个。
个人经验:我建议新手先从EUR/USD做起。为什么?因为它的点差最低,流动性最好。我曾经见过有人一上来就做USD/TRY,结果一个新闻出来,价格跳了200点,直接爆仓。嗯,血的教训。
还有一个概念叫「pip」,也就是点。大多数货币对报价到小数点后4位,最后一位变动1个单位就是1个点。比如EUR/USD从1.1050涨到1.1051,就是涨了1个点。但USD/JPY是个例外,它只报价到小数点后2位。
1.3 交易时间与流动性分析
外汇市场是24小时交易的,但并不是每个时间段都适合交易。我给你们画个图,一看就明白。
从图上你能看到,流动性最好的时间段,是伦敦和纽约市场重叠的时候——也就是北京时间晚上8点到12点。这时候欧美两大市场同时交易,资金量最大,波动也最活跃。
我个人习惯把一天分成三个时段:
- 亚洲盘(北京时间6:00-15:00):流动性最低,波动小。适合做趋势跟踪,不适合做突破策略。我记得有一次在亚洲盘做EUR/USD突破,结果假突破把我止损打了三次,气得我直接关电脑睡觉。
- 欧洲盘(北京时间15:00-24:00):流动性开始增加,波动加大。很多重要数据都在这个时段公布。
- 美洲盘(北京时间20:00-次日5:00):流动性最高,波动最大。非农数据、美联储决议都在这个时段。
避坑指南:我曾经在周五晚上做单,结果遇到流动性枯竭——点差从1个点瞬间扩大到10个点,止损根本打不出去。后来我学乖了:周五晚上尽量不做单,尤其是重大数据公布前后。你想想看,这时候市场流动性最差,随便一个大单就能把价格打飞。
1.4 实战:如何获取实时汇率数据
说了这么多理论,咱们来点实际的。作为一个量化交易者,你首先得能拿到数据。下面是我常用的一个Python代码片段,用来获取实时汇率:
import requests
import json
def get_forex_rate(pair="EURUSD"):
"""
获取实时汇率
pair: 货币对,如 "EURUSD", "GBPJPY"
"""
# 这里用了一个免费API做演示
url = f"https://api.exchangerate-api.com/v4/latest/USD"
try:
response = requests.get(url)
data = response.json()
# 解析汇率
if pair == "EURUSD":
rate = 1 / data['rates']['EUR']
else:
rate = data['rates'].get(pair[3:], 0)
return rate
except Exception as e:
print(f"获取数据失败: {e}")
return None
# 使用示例
rate = get_forex_rate("EURUSD")
print(f"当前 EUR/USD 汇率: {rate}")
小提示:实际生产中,我建议你用WebSocket连接,而不是HTTP轮询。为什么?因为汇率变化太快了,HTTP请求的延迟可能让你错过最佳入场点。我早期做高频交易时就吃过这个亏,后来改用WebSocket,延迟从500ms降到了50ms。
好了,这一章的内容就到这里。记住:外汇市场是一个24小时运转的巨兽,但真正适合交易的时间窗口其实很有限。搞清楚这些基础,你后面的路会好走很多。