做量化策略研究过程中,慢慢发现一个问题:很多时候策略本身并不是最难的部分,数据处理反而会占掉不少时间。 刚开始做一些简单策略时,用日线数据跑一下趋势、均线、轮动之类的逻辑,感觉问题并不明显。但当开始尝试更细一点的策略,比如加入成交量变化、短周期信号或者多个市场的数据后,才发现数据质量对结果影响挺大。
比如同一个策略,如果历史数据存在缺失、时间戳没有处理好,或者复权方式不一致,最后回测出来的结果可能会有比较大的偏差。 之前自己测试策略的时候,也遇到过类似的问题。一个模型回测表现不错,但换数据重新验证后效果明显下降,后来排查发现,并不是策略逻辑的问题,而是部分行情数据处理方式不同导致的。
所以现在自己的习惯是,把数据处理单独放在策略之前。大概流程是: 行情获取 → 数据清洗 → 时间统一 → 指标计算 → 策略回测
比如简单测试行情读取:
import requests
import pandas pd
def get_history_data(symbol):
url = "https://alltick.co/api/history"
params = {
"symbol": symbol,
"period": "daily",
"start_date": "20260101",
"end_date": "20260701"
}
response = requests.get(
url,
params=params,
timeout=10
)
response.raise_for_status()
data = response.json()
return pd.DataFrame(data)
df = get_history_data("AAPL")
print(df.head())
拿到数据之后,一般还需要继续处理,比如检查日期是否连续、价格是否异常、成交量是否存在明显缺失等。 以前觉得回测主要就是验证策略逻辑,现在感觉数据部分其实也是策略的一部分。如果输入的数据不可靠,后面的收益曲线再漂亮也没有太大参考价值。
想请教一下各位做量化研究的朋友: 大家在做策略回测时,数据这一块通常是怎么处理的? 是直接使用已有数据进行研究,还是会自己建立数据库,把历史行情重新整理一遍? 另外,对于个人量化研究来说,大家觉得保存Tick级数据的价值大吗?还是日线、分钟线已经能够覆盖大部分策略需求?
比如同一个策略,如果历史数据存在缺失、时间戳没有处理好,或者复权方式不一致,最后回测出来的结果可能会有比较大的偏差。 之前自己测试策略的时候,也遇到过类似的问题。一个模型回测表现不错,但换数据重新验证后效果明显下降,后来排查发现,并不是策略逻辑的问题,而是部分行情数据处理方式不同导致的。
所以现在自己的习惯是,把数据处理单独放在策略之前。大概流程是: 行情获取 → 数据清洗 → 时间统一 → 指标计算 → 策略回测
比如简单测试行情读取:
import requests
import pandas pd
def get_history_data(symbol):
url = "https://alltick.co/api/history"
params = {
"symbol": symbol,
"period": "daily",
"start_date": "20260101",
"end_date": "20260701"
}
response = requests.get(
url,
params=params,
timeout=10
)
response.raise_for_status()
data = response.json()
return pd.DataFrame(data)
df = get_history_data("AAPL")
print(df.head())
拿到数据之后,一般还需要继续处理,比如检查日期是否连续、价格是否异常、成交量是否存在明显缺失等。 以前觉得回测主要就是验证策略逻辑,现在感觉数据部分其实也是策略的一部分。如果输入的数据不可靠,后面的收益曲线再漂亮也没有太大参考价值。
想请教一下各位做量化研究的朋友: 大家在做策略回测时,数据这一块通常是怎么处理的? 是直接使用已有数据进行研究,还是会自己建立数据库,把历史行情重新整理一遍? 另外,对于个人量化研究来说,大家觉得保存Tick级数据的价值大吗?还是日线、分钟线已经能够覆盖大部分策略需求?
Edge
Chrome
Firefox

京公网安备 11010802031449号