昨天,做了MT5的一次28年倒退回测验证。随后有人来问具体怎么平移数据时间,今天就统一发下教程。大家都知道,MT4要实现28年历史数据回测很容易,因为集成的TDS本身就内置了这个功能。而MT5也不复杂,就是利用PowerShell命令直接改日期

1,准备第三方数据:可以从TDS导出CSV文件,或使用其他渠道获取历史数据。

2,存放数据文件:将CSV文件放到任意一个文件夹中。

3,打开PowerShell:进入该文件夹,按住键盘上的 Shift 键,同时在空白处右键点击,选择“在此处打开 PowerShell 窗口”。(PowerShell是Windows 7及以上系统自带的命令行工具,无需额外安装。),

4,执行平移脚本:在打开的PowerShell窗口中,把下面那段“平移28年”的代码修改好对应文件名,复制粘贴进去,按回车执行,等待运行完成即可。

5,导入MT5:处理后的数据直接导入MT5就能使用了。

 

TDS官方已明确表示不支持与MT5集成,目前也没有相关计划。所以,如果非要用MT5找“圣杯策略”的造假证据,目前通过这种手工平移数据的方式最简单。要是还是觉得麻烦,其实更直接的办法是——遇到看起来完美得像“圣杯”的资金曲线,直接删除,反而省心。

$inputFile = “你的原始文件名.csv”
$outputFile = “平移28年_你的原始文件名.csv”
$daysToShift = -10227 # 28年 ≈ 10227天(负号向前)

Get-Content $inputFile | ForEach-Object {
$fields = $_ -split ‘,’
if ($fields.Count -ge 3) {
$dateTimeStr = $fields[0]
# 尝试解析日期时间(格式:yyyy.MM.dd HH:mm:ss.fff)
try {
$dt = [datetime]::ParseExact($dateTimeStr, “yyyy.MM.dd HH:mm:ss.fff”, $null)
} catch {
# 如果只有日期,尝试另一种格式
$dt = [datetime]::ParseExact($dateTimeStr, “yyyy.MM.dd”, $null)
}
$newDt = $dt.AddDays($daysToShift)
$newDateTimeStr = $newDt.ToString(“yyyy.MM.dd HH:mm:ss.fff”)
# 重新拼接,保留其他列不变
“{0},{1},{2}” -f $newDateTimeStr, $fields[1], $fields[2]
} else {
$_ # 保留异常行(如标题)
}
} | Out-File $outputFile -Encoding UTF8

 

以下是为什么倒退28年验证造假的原理、mt4集成tds倒退28年的按钮位置、mt5不再集成的官方说明。