迁移至 MQL5 Algo Forge(第 2 部分):使用多个存储库·进阶篇
「编译报错先别改代码,先开个 Git 分支」
打开 SimpleCandles.mq5 直接编译,会像预期一样弹出错误。原因不复杂:库和项目文件的相对路径变了。之前我们按第 28 部分的约定,把库仓库放在项目仓库的 Include 子文件夹里,这次改用 MQL5/Shared Projects 文件夹,编译器在老位置找不到头文件,于是前两个错误都是 include 失败。 改代码前先按开发习惯开个独立分支隔离这次修复。当前仓库实际有 4 个分支:main 是主分支,存稳定版;develop 是开发分支;article-17608-close-manager 是基于盈亏阈值平仓的功能分支,已合并回 develop 再进 main;article-17607 是自动优化增强分支,还在进行中未合并。Git 本身不强制分支规则,选顺手的就行。 在 MetaEditor 里看分支,仓库名旁显示 main 即当前分支,点开能列可用分支并建新分支;也能走 Web 界面的「分支」页或用 VS Code 等外部 Git 工具。注意前缀 origin/(MetaEditor 显示 refs/remotes/origin/)代表该分支在远程而非仅本地。MetaEditor 里 Commit 会自动 Push,外部提交可只留本地,同名分支本地远程可能不一致,靠前缀区分。 外汇与贵金属自动化编译改动涉及实盘逻辑,属高风险操作,分支合并前务必在策略测试器跑通。
◍ 从 develop 拉一条 article 分支出来
MQL5 Algo Forge 的编辑器只保证库目录内的代码改动能正常编译,所以动手改之前,最好从 origin/develop 切出独立分支,避免污染主线的功能。 先在客户端切到 origin/develop,它会以本地 develop 分支的形式出现在列表里;随后新建分支并命名。按仓库惯例,文章相关分支前缀是 article- 加文章唯一 ID,再跟一个短后缀描述主题,例如本次落地的分支名就是 article-17698-forge2。 除了图形界面,命令行也能一步到位。在仓库根目录执行下面这句,就是基于 develop 开出新分支并直接切过去: git checkout -b article-17698-forge2 develop 分支创建位置决定了同步方向:本地建的,不推就不会出现在远程;Web 界面建的,不拉就不会出现在本地。 首次推送新分支必须带 --set-upstream,否则 Git 会拒绝在远端建分支: git push --set-upstream origin article-17698-forge2 推完之后,本地和 MQL5 Algo Forge 托管的远程就都有了这条分支,接下来随便改库内逻辑,都不会波及其他分支。外汇与贵金属算法交易本身高风险,分支隔离只是工程纪律,不降低策略实盘亏损概率。
git checkout -b article-class="num">17698-forge2 develop git push --set-upstream origin article-class="num">17698-forge2
把包含路径改对就能重新编译
把 Simple Candles 和 Adwizard 两个仓库根目录放到 Shared Projects 下同一级后,原来的相对包含路径就断了。SimpleCandles.mq5 里那行指向 Include/Adwizard/Experts/Expert.mqh 的 include 得先退一级再进库目录,改成 ../Adwizard/Experts/Expert.mqh。 Strategies/SimpleCandlesStrategy.mqh 同理,原 ../Include/Adwizard/Virtual/VirtualStrategy.mqh 要改成 ../../Adwizard/Virtual/VirtualStrategy.mqh,否则 MetaEditor 找不到虚拟策略头文件。 改完直接重新编译,编译通过就说明路径对齐了。接下来提交变更:用 MetaEditor 界面提交会自动触发 Push 到远程;走控制台则先 git add .(点或具体文件名)把新文件入索引,再 git commit -m "Fix relative paths to include files from Adwizard" 然后 git push。 article-17698-forge2 分支的改动到此就绪,可以合并进 develop 并关闭。外汇与贵金属 EA 开发涉及实盘逻辑,回测通过不代表实盘无风险,路径修好仅是工程前提。
class="macro">#include "Include/Adwizard/Experts/Expert.mqh" class="macro">#include "../Adwizard/Experts/Expert.mqh" class="macro">#include "../Include/Adwizard/Virtual/VirtualStrategy.mqh" class="macro">#include "../../Adwizard/Virtual/VirtualStrategy.mqh"
「MetaEditor 没有合并分支功能时的两条出路」
MetaEditor 目前的硬伤是:只能建分支,不能把某一分支的改动合并进另一分支。想做合并,只能离开 MetaEditor 去找别的工具。 第一条路是用 Visual Studio Code 的合并界面,或者直接用控制台命令。对单开发者场景,下面这组命令就够用: git checkout develop 先切到 develop 分支;git pull 顺手把远端最新改动拉下来,防止本地落后;git merge --no-ff article-17698-forge2 才真正执行合并。 冲突概率方面,单人开发基本碰不到;哪怕在多台机器上写,只要每次开工前都 pull 到最新,冲突也很少发生。 另一条路是走 MQL5 Algo Forge 的 web 界面来做合并,这部分我们接着看。
git checkout develop
git pull
git merge --no-ff article-class="num">17698-forge2