各位量化圈的兄弟们,大家好。我是某量化团队的“填坑人”(CTO)。
今天不聊复杂的算法,不聊高大上的机器学习,就聊一个最基础、但最容易让人翻车的话题:行情数据。
大家有没有遇到过这种情况: 在回测软件上跑策略,资金曲线那是“直上云霄”,感觉明天就能财富自由。结果一上实盘,资金曲线直接“飞流直下三千尺”。 心态崩了有木有?这事儿我们团队刚开始创业的时候也遇到过。
那时候我们甚至怀疑是不是券商针对我们,或者是策略模型过拟合(Overfitting)了。我们把代码翻来覆去改了几十遍,参数调了一万次,实盘还是亏。
后来我们才发现,坑不在策略里,在数据里。
回测是“看录像”,实盘是“甚至直播”
我们做回测用的 K 线,那是历史书,是已经定型的。不管中间怎么波动,那根 K 线的开盘、收盘价是死的。 但实盘交易,咱们面对的是 Tick——也就是行情的“心跳”。
外汇和加密货币市场特别“贼”。有时候行情波动剧烈,一秒钟甚至能跳几十个价位。如果你用的 API 不靠谱,它给你的 K 线可能把中间那个让你止损的“针”给抹平了。 回测里,你没被止损,继续拿着单子赚钱。 实盘里,那个“针”一扎,你止损出局,后面的行情跟你没关系了。 这就是为什么回测赚钱,实盘亏钱。
把 K 线拆碎了看
我们后来做了一个实验,把市面上几个主流 API 的 K 线拿来对比,发现居然长得不一样! 有的 API 按 00 秒对齐,有的按 01 秒对齐。 这就很尴尬了。你的策略依赖 MA20(20日均线),K 线不一样,均线点位就不一样,金叉死叉的位置可能就差了一两根 K 线。在高频交易里,这一两根 K 线就是生死线。
怎么解决?自己动手,丰衣足食
既然别人的 K 线不靠谱,或者是标准不统一,我们就决定:只看 Tick,自己画 K 线。
我们找了像 AllTick API 这种能给原始 Tick 数据的服务商,把最原本的报价拿回来。不管是回测还是实盘,我们都用同一套代码,把这些 Tick 捏成 K 线。
这样做最大的好处就是:真实。 我们在回测里能看到所有的“毛刺”,如果回测能抗住这些毛刺赚钱,那实盘大概率也能赚钱。
给交易员的建议
兄弟们,如果你是做日内或者高频的,千万别迷信现成的 K 线数据。哪怕麻烦一点,也要去搞 Tick 数据。 这就好比做菜,预制菜(K线)虽然方便,但你不知道里面加了什么科技与狠活;只有买新鲜食材(Tick)自己做,才能保证味道(策略)是正宗的。
最后,给想自己折腾的朋友留个简单的 Python 脚本,就是教你怎么把 Tick 变成 K 线的,拿走不谢:
import requests
import pandas as pd
url = "//apis.alltick.co/v1/forex/tick"
params = {"symbol": "EURUSD", "limit": 1000}
resp = requests.get(url, params=params).json()
df = pd.DataFrame(resp['data'])
df['time'] = pd.to_datetime(df['time'], unit='ms')
kline = df.resample('1T', on='time').agg({'price':['first','max','min','last']})
print(kline.tail())
数据是量化的子弹,子弹不准,枪法再好也白搭。祝大家实盘长红!

