プロのプログラマーからのヒント(第I部): コードの保存、デバッグ、コンパイルプロジェクトとログの操作
内容
- はじめに
- コードを別々のサブディレクトリに保存する
- 複数のターミナルで1つのコードを使用する
- バージョン管理システムを使用する
- 別のターミナルとデモ口座を使用してコードをデバッグする
- すべてのコードファイルを一度にコンパイルする
- プロジェクトおよびタスク管理システムを使用する
- ログ選択
- ログの強調表示
- コンテキスト検索
- 終わりに
はじめに
コードを別々のサブディレクトリに保存する
ターミナルプログラムファイルはMQL5ディレクトリの下にあります。このカタログは、いわゆる「サンドボックス」で、外部からのデータアクセスはできません。これは良い決断ですが、DLLを使用すると、おそらくどこにでもアクセスできるようになります。
たとえば、Caymanプロジェクトの構造は次のとおりです。
- /Experts/Cayman/ - エキスパートアドバイザー
- /Files/Cayman/ - データファイル(設定、パラメータ)
- /Include/Cayman/ - クラス(関数)のライブラリ
- /Scripts/Cayman/ - 主な操作スクリプト
- /Scripts/CaymanDev/ - 開発者向けスクリプト(デバッグに使用)
この配置の主な利点は次のとおりです。
- TotalCommanderを介したプロジェクトファイルのみのコンテキスト検索
- Gitによるバージョン管理(制御はプロジェクトファイルに対してのみ有効になり、他のすべてのファイルは無視される)
- 別のターミナルに簡単にコピー(デモ->リアル-リリース)
複数のターミナルで1つのコードを使用する
プログラミングのベストプラクティスの1つは、コードの重複を避けることです。同じコードが複数の異なる場所にある場合は、これらの行を関数で「ラップ」することをお勧めします。同じことがMQL5ファイルにも当てはまります。プログラムファイルのテキストは1つだけである必要があります。これは、MQL5ディレクトリへのシンボリックリンクを使用して実装できます。
プロジェクトカテゴリがD:\Projectにあり、ターミナルデータディレクトリがC:\Users\Pro\AppData\Roaming\MetaQuotes\Terminal\9EB2973C469D24060397BB5158EA73A5だとします。
- ターミナルを閉じます
- データディレクトリに移動します
- MQL5ディレクトリをプロジェクトディレクトリに移動します
- データディレクトリにいる間に、cmdを実行し、次のコマンドを入力します
mklink /D MQL5 D:\Project\MQL5 - ターミナルを起動します
ターミナルは、「サンドボックス」(プログラムファイル)がD:\Project\MQL5に移動したことに気付くことさえありません。
この配置の主な利点は、すべての個人プロジェクトが同じディレクトリ(D:\Project)に集められることです。
バージョン管理システムを使用する
プロのプログラマーは、そのようなシステムを使用する必要性を疑うことはありません。これは、特にプログラマーのチームが同じプロジェクトに取り組んでいる場合に不可欠なツールです。問題は、どのシステムを使用するかです。これは事実上Gitです。
Gitの主な利点は次のとおりです。
- ローカルリポジトリ。ブランチを使用する機能。ワンクリックでの任意のブランチ(バージョン)への切り替え
- 便利なグラフィカルインターフェイス(TortoiseGit)。マウスによる制御
- 個人プロジェクト用の無料のクラウドリポジトリ(Bitbucket)。PCのハードディスクが故障する心配はありません
- 古いバージョンを復元または表示する機能を備えたファイル変更履歴(Bitbucketで便利に表示)
ここでは、詳細なインストールと構成の手順については説明せずに、いくつかの特定の機能について説明します。Git(コマンドライン操作用)とTortoiseGit(マウスを使用するため)をインストールします。D:\Project\MQL5ディレクトリに、次の内容の.gitignoreファイルを作成します。
# exclude files *.ex4 *.ex5 *.dat log.txt # exclude directories completely Images Indicators Libraries Logs Presets Profiles Services "Shared Projects" Levels Params # exclude directory contents Experts/* Files/* Include/* Scripts/* # except for directories !Experts/Cayman !Files/Cayman !Include/Cayman !Scripts/Cayman !Scripts/CaymanDev
このファイルにより、プロジェクトの(* .mq?)プログラムファイルのバージョン追跡が可能になります。MQL5ディレクトリにローカルリポジトリを作成します。ファイルを追加し、最初のコミットを行います(バージョンをコミットします)。ローカルリポジトリの準備ができました。コードを操作し、変更の簡単な説明を付けて頻繁にコミットすることを忘れないでください。コメントを使用すると、後で履歴を簡単に参照および検索できます。
クラウドリポジトリに接続するには、最初にBitbucketアカウントとリポジトリを作成する必要があります。論理的には、リポジトリ名はプロジェクト名と一致する必要があります。私の場合はCaymanMQL5ですが、CaymanMQL4もあります。ローカルリポジトリをクラウドリポジトリにインポートします。これで、クラウドリポジトリの準備が整いました。以下は、TortoiseGit(TG)を介した基本的なアクションです。
- コードを操作する(1つのタスク-1つのコミット)
- 変更を確認する(TG /変更の確認…)
- 新しいファイルを追加する(追加)
- 不要な(欠落している)ファイルを削除する(削除)
- ローカルリポジトリにコミットする(コミット)
- クラウドリポジトリにプッシュする(プッシュ)
別のターミナルとデモ口座を使用してコードをデバッグする
リアル口座には、最新の動作バージョンのコードが必要です(*.ex?ファイルのみで、*.mq?を除く)。デバッグプロセスのコードは、デモ口座にある必要があります。デモから実際にコピーするには、次のバッチファイルを使用できます。
@echo off setlocal set PROJECT=Cayman set SOURCE=d:\Project\MQL5 set TARGET=c:\Users\Pro\AppData\Roaming\MetaQuotes\Terminal\2E8DC23981084565FA3E19C061F586B2\MQL5 set PARAMS=/MIR /NJH /NJS rem MIR - MIRror a directory tree and delete dest files/folders that no longer exist in source rem NJH - No Job Header rem NJS - No Job Summary echo Copy *.ex? // Source to Production echo Source = %SOURCE% echo Production = %TARGET% robocopy %SOURCE%\Experts\%PROJECT% %TARGET%\Experts\%PROJECT% *.ex? %PARAMS% robocopy %SOURCE%\Scripts\%PROJECT% %TARGET%\Scripts\%PROJECT% *.ex? %PARAMS% rem Copy all files except AppSettings.txt, [Levels], [Params] robocopy %SOURCE%\Files\%PROJECT% %TARGET%\Files\%PROJECT% *.* %PARAMS% /XF AppSettings.txt /XD Levels Params robocopy %SOURCE%\Scripts\Cayman %TARGET%\Scripts\Cayman *.ex? /NJH /NJS robocopy %SOURCE%\Scripts\CaymanDev %TARGET%\Scripts\CaymanDev *.ex? /NJH /NJS echo. endlocal pause
すべてのコードファイルを一度にコンパイルする
目標は、コードの一貫性を維持することです。たとえば、関数パラメータの変更は避ける必要があります。エキスパートアドバイザーは適切にコンパイルできますが、古いバージョンの関数を使用するスクリプトも存在する可能性があります。スクリプト(以前にコンパイルされた)は正常に実行できますが、必要な機能を実行しません。バッチコンパイルには、次のファイルを使用できます。
@echo off setlocal set METAEDITOR="C:\Program Files\RoboForex - MetaTrader 5\metaeditor64.exe" set CAYMAN=d:\Project\MQL5\Scripts\Cayman set CAYMAN_DEV=d:\Project\MQL5\Scripts\CaymanDev echo METAEDITOR=%METAEDITOR% echo CAYMAN=%CAYMAN% echo CAYMAN_DEV=%CAYMAN_DEV% echo. echo Wait compile... D: cd %CAYMAN% echo %CAYMAN% for %%F in (*.mq?) do ( %METAEDITOR% /compile:%%F /log type %%~dpnF.log ) del *.log cd %CAYMAN_DEV% echo %CAYMAN_DEV% for %%F in (*.mq?) do ( %METAEDITOR% /compile:%%F /log type %%~dpnF.log ) del *.log endlocal echo. pause
プロジェクトおよびタスク管理システムを使用する
このようなシステムは、開発チームにとって必須です。また、個人的なプロジェクトにも役立ちます。さまざまなプロジェクト管理システムと方法論が多数あります。私が個人的に使用するのはZenKitです。少人数のチーム用は無料で、とても便利な「看板」を備えています。
以前は、複数の「看板」がありましたが、複数の「看板」を使用することの欠点は、全体像が見えないことです。次に、プロジェクトを開発段階として追加することにしました。このようにして、タスクの管理がはるかに簡単になります。たとえば、私の「看板」には5つの開発段階があります。
- 凡例 - プロジェクトの説明、リンク、および手順。エントリは他のステージに移動されません。ボードの一般的な目的をいつでも表示でき、役立つリソースへのリンクに簡単にアクセスできます。
- Cayman – MQL5およびMQL4プロジェクト
- Webサイト – 私の個人的なWebサイトプロジェクト
- 承認済み - 進行中のタスク
- 完了 - 完了タスク
ボード使用プロセスは非常にシンプルで直感的です。面白いアイデア、解決策、またはプログラムエラーを見つけました。次に、それを簡単に定式化し、ボード、対応するプロジェクトに追加します。ここで画像やファイルを追加することもできます。次に、タスクを選択して「承認済み」段階に移動します。タスクを処理し、テストして、「完了」段階に移動します。
プロジェクト内のタスクの数を分析することで、問題やボトルネックを簡単に特定できます。「オーバーロードされた」プロジェクトからタスクを取得しようとします。私の目標は、同じ数のタスクを持つようにプロジェクトを調整することです。チーム開発には「テスト」段階という別の段階がありますが、私は独りで作業しているため、私には関係ありません。
ログ選択
ご存知のように、印刷関数のすべての出力は、ターミナルログMQL5\Logs\yyyyMMdd.logに書き込まれます。このファイルにはすべての銘柄(取引商品)が混在しています。次のバッチファイルを使用して、必要な銘柄のログを選択します。
echo off if "%2"=="" goto Help find /I "%2" < %1 > "%~n1-%2.log" goto Exit :Help echo. echo Filter log-file echo findLog.cmd logFile text echo Example echo findLog.cmd 20200515.log gbpjpy echo Result echo 20200515-gbpjpy.log echo. pause :Exit
ログの強調表示
デバッグを実行すると、ログに多くの情報が書き込まれ、実行中のターミナルで分析するのは非常に難しい場合があります。このプロセスを簡素化するためにできることは次のとおりです。
- [ツールボックス/エキスパート]タブでログをクリアする
- ログに印刷を刺激する
- すべての行をlog.txtファイルにコピーする
- 強調表示を使用して、Notepad++(NPP)でこのファイルを分析する
NPPは、さまざまなテキスト強調表示バリアントをサポートしています
- 単語をダブルクリックすると、テキスト全体でこの単語が強調表示されます
- 検索/マーク/スタイルの使用 - これにより、選択したスタイルがドキュメント全体の必要なテキストに適用されます
- 特定のトークンを強調表示するカスタム構文
コンテキスト検索
特定のテキストを見つけるには、TotalCommanderファイルマネージャーを使用します。この方法の主な利点は次のとおりです。
- 検索はプロジェクトファイルでのみ実行されます(他のすべてのファイルは検索結果に表示されません)
- 検索で正規表現を使用する機能
終わりに
これは私の最初の記事です。連載を継続する予定です。次回は、いくつかの成功したソリューションを共有し、関連する説明と説明を提供します。みんなでプログラミングの経験を共有し、他の役立つヒントや解決策について話し合いましょう。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/9266
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索