macOSでのMQLの開発環境について
作成日:2025.01.29
はじめに
本記事では、私が利用しているMQLの開発環境の以下の点について紹介します。MQLとは「MetaQuotes Language」の略で、MetaTraderのプログラミング言語です。(「MetaTrader」を「MT」と記載することがあります。「MT4」「MT5」のようにバージョンを付けることもあります。)
開発用PC
取引口座
使っているエディタ
フォント
ソースコード管理
ソースコード整形
シェルの設定
Vimの設定
その他
参考までに、どんな風に開発しているのかについて、記事の最後に紹介しました。興味のある方はご覧ください。
1.開発用PC
開発に使用しているPCは、Intel版MacBook Airの2020年モデルです。スペックは以下の通りです。キーボードはUS配列です。
CPU :1.2 GHz クアッドコアIntel Core i7
メモリ:16GB
SSD :512GB
OS :macOS Sonoma 14.7.2
このMacBookの技術仕様については、こちらを参照してください。CPU、メモリ、SSD、キーボードはカスタマイズしています。今どきのPCと比較すると、CPUはかなりロースペックです。
2.取引口座
使用する取引口座を選ぶ場合、期間に縛りのないデモ環境、スプレッド、1週間が日足5本、プラットフォームの安定性、証券会社の安全性などを考慮する必要があります。また、サーバー時間は海外で一般的なGMT+2またはGMT+3であれば、海外と同じチャートの見え方になります。
私の使用している取引口座は以下の通りです。
本番用口座:楽天MT4
開発用口座:楽天MT4のデモ口座、XMTrading MT5のデモ口座
楽天MT4は上記の条件を満たしていますが、EAから複数ポジションを連続で約定させる場合には、1つの約定(OrderSendやOrderClose)に2秒程度かかってしまうようなので注意が必要です。
そろそろ楽天証券もMT5をサポートしてくれないでしょうかね…
3.使っているエディタ
コーディング用
コーディングには、MicrosoftのVisual Studio Code(VSCode)を使用しています。最初はCotEditorでコーディングしていましたが、現在はVSCodeを使用しています。VSCodeは無料とは思えない優秀なエディタだと思います。CotEditorもシンプルで優れたエディタです。
VSCodde には、以下の拡張機能をインストールしています。
Bookmarks
行をマークして、その行にジャンプできる。Git Graph
リポジトリのGitグラフを表示し、グラフから簡単にGitアクションを実行できる。GitLens — Git supercharged
Gitの各種操作をしやすくする。リポジトリの状態、ブランチ管理を視覚的に行える。indent-rainbow
インデントを読みやすくする。IntelliCode
TypeScript/JavaScriptおよびPythonが対象。機械学習に基づいてコード補する。IntelliCode API Usage Examples
TypeScript/JavaScriptおよびPythonが対象。ワンクリックで10万以上のAPIの使用例にアクセスできる。Japanese Language Pack for Visual Studio Code
VSCodeのUIを日本語化する。MQL4 Syntax Highlight
MQL4と5の構文をハイライトする。Pine Script Syntax Highlighter
Pine Scriptの構文をハイライトする。Print
印刷機能を提供する。Rainbow CSV
CSVファイルをデータ項目の色付けなどで見やすくする。vscode-pdf
PDFを表示する。zenkaku
全角スペースを視覚化する。
印刷&メモ帳用
VSCodeは優秀ですが、印刷は拡張機能を使ってもショボいため、CotEditorを使っています。またVSCodeの起動は少し遅いので、メモ帳的な使い方にもCotEditorを使っています。
4.フォント
VSCode、CotEditorおよびMetaEditorのフォントには、日本語等幅フォントのPlemolJPを使用しています。
VSCodeでは、フォントファミリーに「PlemolJP HS Text」 を指定して少し太めに、CotEditorは標準の「PlemolJP HS Regular」を指定しています。
MetaTraderのEAやインジケーターで等幅フォントが必要な場合は、Moralerspaceを使っています。指定しているフォント名は「Moralerspace Xenon HWJPDOC」です。
これらのフォントは、macOSに登録するだけでOKです。つまり「/System/Library/Fonts」フォルダ配下、あるいは「~/Library/Fonts」フォルダ配下に展開済みのフォントファイルを置くだけです。MetaTraderやMetaEditorでも使えます。
5.ソースコード管理
ソースコード管理はGitで行っています。個人で履歴を保存するだけで、複数人で共有することはありません。つまり、プッシュもプルも不要ですが、GitHubと連携しています。実のところ、ノンベアディレクトリだけでも十分です。
大体の操作は、VSCodeの拡張機能のGit GraphやGit Lensで行っています。
6.ソースコード整形
ソースコードの整形は、ClangFormatを使用しています。HomeBrewを使ってインストールします。
brew install clang-format
主にC++を対象としたソースコード整形ツールですが、MQL4やMQL5はC++と似た文法なので、大体うまく行きます。
私が使っている範囲では、日付指定を「D」から始まりシングルクォーテーションで囲む日付時刻定数がNGでした。例えば「D'31.12.3000 23:59:59'」という記述です。整形すると「D」とシングルクォーテーションの間にスペースが入ってしまい、コンパイルエラーになります。これ以外は大丈夫でした。
対処する方法は、日付時刻定数の部分を「// clang-format off」と「// clang-format on」で挟み込んで、整形対象から外します。以下のように記述します。
// clang-format off
// 囲まれた部分は整形しない。以下のケースは整形しては駄目。
#define END_TIME D'31.12.3000 23:59:59'
// clang-format on
ClangFormatをMQL4やMQL5のソースコードに対して実行するときは、以下のシェルスクリプトを使っています。VSCodeの拡張機能のClang-Formatは使っていません。
#!/bin/bash
/usr/local/bin/clang-format -i -style="{BasedOnStyle: Google, ColumnLimit: 220, AlignConsecutiveAssignments: true, AlignTrailingComments: true, AllowShortFunctionsOnASingleLine: false, SortIncludes: false}" $*
スタイルの指定方法については、こちらを参考してください。なお、列数が220と結構長いです。理由としては、input変数がコメントまで含めると長くなることが多く、これを折り返してしまうとプロパティ表示に影響するからです。
7.シェルの設定
シェルはzshを使っているので、その設定を紹介します。
.zprofileの設定は、個人用のbinフォルダへのパス追加と、最小限のaliasを指定しています。
# add my exec path
export PATH=~/bin:$PATH
# aliases
alias ls='ls -F'
alias ll='ls -alF'
alias pu='pushd'
alias po='popd'
alias so='source'
alias rm='rm -i'
.zshrcの設定では、プロンプトは2行表示、時刻はコマンド実行すると開始時刻に書き換わるようにしています。余分な履歴は不要なので、重複は保存しない、そしてエラーも残さないようにしています。また、長くて面倒なコマンドはaliasに追加しています。具体的には以下の設定です。
# prompt
re-prompt() {
zle .reset-prompt
zle .accept-line
}
zle -N accept-line re-prompt
# black background
#PROMPT='%F{white}%L%f %F{yellow}%D{%H:%M:%S}%f %F{green}%n@%m%f %F{cyan}%~%f
# white background
PROMPT='%F{black}%L%f %F{magenta}%D{%H:%M:%S}%f %F{green}%n@%m%f %F{blue}%~%f
$ '
# history
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt hist_ignore_all_dups
setopt hist_ignore_dups
setopt share_history
setopt inc_append_history
setopt hist_no_store
setopt hist_reduce_blanks
setopt hist_ignore_space
#setopt auto_pushd
#setopt pushd_ignore_dups
# remove error history if not needed
autoload -Uz add-zsh-hook
remove_last_history_if_not_needed () {
local last_status="$?"
local HISTFILE=~/.zsh_history
if [[ ${last_status} -ne 0 ]]; then
fc -W
ed -s ${HISTFILE} <<EOF >/dev/null
d
w
q
EOF
fc -R
fi
}
add-zsh-hook precmd remove_last_history_if_not_needed
# aliases for development
alias ced='open $1 -a "/Applications/CotEditor.app"'
alias go-mt='cd ~/MySpace/FX/MT/SourceCode/Master'
alias dev-mt='go-mt;code .;'
alias pine='cd ~/MySpace/FX/TradingView/PineScript;code .'
以下が実際の画面です。
これらは、以下のサイトを参考にして作成しました。
8.Vimの設定
Vimの設定も紹介しておきます。.vimrcの内容は以下の通りです。
" Configuration file for vim
"文字コードをUFT-8に設定
set fenc=utf-8
" バックアップファイルを作らない
set nobackup
" スワップファイルを作らない
set noswapfile
" 編集中のファイルが変更されたら自動で読み直す
set autoread
" バッファが編集中でもその他のファイルを開けるように
set hidden
" 入力中のコマンドをステータスに表示する
set showcmd
" 見た目系
" 行番号を表示
set number
" 現在の行を強調表示
set cursorline
" 現在の行を強調表示(縦)
"set cursorcolumn
" 行末の1文字先までカーソルを移動できるように
set virtualedit=onemore
" インデントはスマートインデント
set smartindent
" ビープ音を可視化
set visualbell
" 括弧入力時の対応する括弧を表示
set showmatch
" ステータスラインを常に表示
set laststatus=2
" コマンドラインの補完
set wildmode=list:longest
" 折り返し時に表示行単位での移動できるようにする
nnoremap j gj
nnoremap k gk
" シンタックスハイライトの有効化
syntax enable
" 暗い背景によく合う色を使う
" set background=dark
" Tab系
" 不可視文字を可視化(タブが「▸-」と表示される)
set list listchars=tab:\▸\-
" Tab文字を半角スペースにする
set expandtab
" 行頭以外のTab文字の表示幅(スペースいくつ分)
set tabstop=4
" 行頭でのTab文字の表示幅
set shiftwidth=2
" 検索系
" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase
" 検索文字列入力時に順次対象文字列にヒットさせる
set incsearch
" 検索時に最後まで行ったら最初に戻る
set wrapscan
" 検索語をハイライト表示
set hlsearch
" ESC連打でハイライト解除
nmap <Esc><Esc> :nohlsearch<CR><Esc>
この設定は以下のサイトを参考にして、ほぼそのままで使用しています。
9.その他
その他にMac上で使っている開発関連のアプリケーションを洗い出してみました。
ブラウザ → Safari、Chrome
オフィスソフト → LibreOffice
付箋 → スティッキーズ
ウィルス対策 → BitDefender 、VirusBarrier
VPN → ProtonVPN
FTPクライント → FileZilla
クリーナーソフト → AppCleaner
メッセージングアプリ → LINE、Discord
⋮ ⋮
最後に
MetaTraderの開発環境の紹介は以上になります。全部を書ききれていませんが、少しでも役立つことがあれば幸いです。
MacBookを購入した約半年後にM1 MacBook Airが登場したので、結構ショックでした。でも、M1 MacBook Airは、各種アプリケーションがApple Silicon対応するのに時間がかかりました。
なので「まだまだ実用にはIntel版でしょ!」と、しばらくは自分を納得させてきました。まるでイソップ寓話の「狐と葡萄」ですね。
しかし、あっという間にApple Siliconの時代になりました……(T_T)
1kg以下のMacBookを待っていますが、出ないのかぁ…
諦めてApple Siliconに買い替えるかなぁ…
それでは、また。
参考:どんな風に開発しているのか?
Mac上の開発ではMT5をメインに使っています。バックテストの処理速度が圧倒的に高いからです。本番およびフォワードテストは安定稼働を確保したいので、Windows PC上のMT4で行っています。つまり開発環境はMacで、運用はWindows PCというクロス環境です。
Mac上のMetaTraderはWineskinで動かしています。詳細は以下の記事を参考にしてください。
MacとWindows PC間の運用で困りそうな点については、以下の記事で紹介しています。参考になるかもしれません。
それで開発の流れはどうなっているかというと、以下のような感じで行っています。
Mac上のソースコード管理フォルダ配下でコード作成
↓
Mac上のMT4とMT5のデータフォルダにファイルをコピー
↓
Mac上のMT4のデモ口座でコンパイル&簡単な動作確認
↓
Mac上のMT5のデモ口座でコンパイル&動作確認
↓
Mac上のMT5のデモ口座でバックテスト
↓
Windows上のMT4のデータフォルダにMac上のファイルをアップロード
↓
Windows上のMT4のデモ口座でコンパイル&フォワードテスト
↓
Windows上のMT4のリアル口座で本番運用
MT4とMT5でのクロス開発となるため、ソースコードは可能な限り、MQL4とMQL5で共通のコードを記述するようにしています。
MetaTraderは統合開発環境の機能を持っているので、MetaTraderだけで開発を完結することができます。しかし私の場合、MT4とMT5でのクロス開発ということもあり、本記事で紹介したMetaTrader以外のツールも使って開発しています。