
MQLコーディング初心者のためのスタイルガイド ~スタイラー機能の完全解説~
いつも記事をお読みいただき、ありがとうございます。
今回は、主にMQL(MetaQuotes Language)でのコーディングを始めたばかりの皆様に向けて、コードの見た目や構造を整えるためのツールである、メタエディターの「スタイラー」機能についてご紹介します。
⏬この記事は、次のような方を対象にしています
✔ EA(エキスパートアドバイザー)やカスタムインジケーターの開発に興味がある方
✔ すでにMQLでコーディングしているが、より効率的なコーディング方法を探している方
✔ EAの開発チームのリーダーや管理者
⏬この記事を読むメリット
コーディング効率の向上:メタエディターのスタイラー機能を使いこなすことで、コードの整形などにあてる作業を効率化することができます。
エラー削減:適切なコーディングスタイルを学ぶことで、初歩的なミスを減らし、バグの少ないEAを開発できるようになります。
プロフェッショナルな技能の獲得:業界標準のコーディングプラクティスを身につけ、プロフェッショナルなMQLプログラマーとしてのスキルアップにつながります。
チーム開発の効率化:一貫したコーディングスタイルを採用することで、チーム内のコミュニケーションと協力が円滑になります。
長期的な保守性向上:今後の修正や機能追加が容易になり、長期的な視点でのEA開発が可能になります。
この記事を読むことで、MQLプログラミングの基本的なベストプラクティスを学び、より効率的で品質の高いコードを書けるようになります。メタエディターのスタイラー機能を活用することで、初心者の方でも簡単にプロフェッショナルなコードスタイルを実現できます。
一緒にMQLコーディングのスキルアップを目指しましょう!
それでは、ぜひ最後までお付き合いください!
✅なぜコードのスタイルが重要なの?
プログラミングにおいて、コードの「スタイル」とは単なる見た目の問題ではありません。適切なスタイルを使用することで、以下のような利点があります:
読みやすさの向上
バグの発見しやすさ
コードの保守性の向上
チーム開発での一貫性の確保
✅メタエディターのスタイラー機能とは
MetaTrader 4/5のメタエディターには、MQLコードを自動的に整形してくれる「スタイラー」という機能があります。この機能を使うことで、初心者でも簡単にきれいなコードを書くことができます。
スタイラーの主な機能
インデント(字下げ)の自動調整
空白文字の挿入や削除
括弧の配置の調整
コメントの整列
✅スタイラーの設定
メタエディターを起動します。
メニューから「ツール」→「オプション」の「スタイラー」タブを選択します。
設定画面が表示されるので、好みのスタイルを選択します。

✅スタイラーの使い方
メタエディターで、スタイルを適用したいソースコードファイルを開きます。
スタイルを適用するソースコードの範囲を選択します。
メニューの「ツール」→「スタイラー」、もしくはツールバーの「青いくし」ボタンをクリックします。
オプションで設定されたスタイルで、コードが自動的に整形されます。

✅スタイラーのオプション
インデントごとのスペース:コードブロックの字下げ幅(スペース数)を指定します。デフォルトは「3」です。
タブをスペースに変換:有効にすると、タブ文字をスペースに置き換えます。デフォルトは「有効」です。
空行を削除:有効にすると、なにも記述されていない「空行」が削除されます。デフォルトは「無効」です。
コンマとセミコロンの後にスペースを挿入:有効にすると、コンマ「,」およびセミコロン「;」のあとにスペースを挿入します。デフォルトは「無効」です。
ステートメント演算子の周りにスペースを挿入:有効にすると、文(ステートメント)中の演算子(下記サイト参照)の前後にスペースを挿入します。デフォルトは「無効」です。
✅メタエディターのデフォルト設定(MetaQuotes)
メタエディターのデフォルト設定(MetaQuotes)は、主に以下のような特徴を有しています:
インデントサイズ:3スペース
タブサイズ:3スペース
関数の開き括弧「(」:関数名の直後
制御文の開き波括弧「{」:新しい行
括弧内のスペース:挿入しない
空の括弧:「()」
演算子の前後にスペース:挿入しない(設定で変更可能)
コンマ「,」の後にスペース:挿入しない(設定で変更可能)
セミコロン「;」の後にスペース:挿入しない(設定で変更可能)
行の最大長:制限なし
関数呼び出しの開き括弧「(」の位置:関数名の直後
関数宣言の開き括弧「(」の位置:関数名の直後
関数またはメソッド定義の最初のレベルのコメント:左 (インデントなし) に整列
宣言内の最初のレベルのコメント:行の3列目(インデントあり)に整列
それ以下のレベルのコメント:対応する演算子から3列目(インデントあり)に整列
ファイルヘッダのブロックコメント:挿入しない(※公式サイトの説明と違うので要注意!)
関数、クラス、構造体のブロックコメント:自動挿入
ファイル末尾の一行切り取りコメント:自動挿入
✅スタイラーの適用前・適用後
適用前
void myFunction() {
//--- 1st level comment
int k[10],t=0;
for(int i=0;i<10;i++){
k[i]=i;
t+=i;}
if (button==name) {
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
//--- 2nd level comment
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
else {
ObjectSetInteger(0,name,OBJPROP_STATE,false);}
}
適用後
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void myFunction()
{
//--- 1st level comment
int k[10],t=0;
for(int i=0;i<10;i++)
{
k[i]=i;
t+=i;
}
if(button==name)
{
bool state=ObjectGetInteger(0,name,OBJPROP_STATE);
//--- 2nd level comment
if(!state)
ObjectSetInteger(0,name,OBJPROP_STATE,false);
}
else
{
ObjectSetInteger(0,name,OBJPROP_STATE,false);
}
}
//+------------------------------------------------------------------+
オプション設定により、コンマ「,」の後、セミコロン「;」の後、演算子の前後にスペースを挿入することも可能です。
✅スタイラーを使用するメリット
メタエディターのスタイラー機能を使用することで、以下のような多くのメリットを享受できます:
コードの可読性向上
一貫したフォーマットにより、コードが読みやすくなります。
インデントや括弧の配置が統一され、コードの構造が明確になります。
エラーの早期発見
整形されたコードでは、構文エラーや論理エラーが見つけやすくなります。
括弧の対応関係が明確になり、閉じ忘れなどのミスを防ぎます。
開発時間の短縮
手動でコードを整形する時間を節約できます。
チーム内でのコードレビューが効率化されます。
保守性の向上
一貫したスタイルのコードは、後からの修正や機能追加が容易になります。
他の開発者が書いたコードでも、同じスタイルであれば理解しやすくなります。
チーム開発の効率化
チーム全体で同じコーディングスタイルを採用することで、コードの一貫性が保たれます。
新しいメンバーがチームに加わった際の学習コストを低減できます。
プロフェッショナリズムの向上
きれいに整形されたコードは、プロフェッショナルな印象を与えます。
コードの品質が向上し、信頼性の高いEAやインジケーターの開発につながります。
バージョン管理の効率化
一貫したフォーマットにより、バージョン管理システムでの差分確認が容易になります。
不要な空白や改行の変更がなくなり、本質的な変更点に集中できます。
コードの移植性向上
標準化されたスタイルを使用することで、異なるプロジェクトや環境への移植が容易になります。
学習効果の向上
初心者にとって、整形されたコードは学習しやすく、良いプログラミング習慣を身につけるのに役立ちます。
自動化によるストレス軽減
コードの整形を自動化することで、細かなフォーマットの調整に悩む必要がなくなります。
プログラミングの本質的な部分に集中できるようになります。
これらのメリットにより、スタイラーを使用することは単なる見た目の問題ではなく、開発プロセス全体の質と効率を向上させる重要なツールであることがわかります。特にMQLのような金融市場向けのプログラミングでは、コードの正確性と信頼性が極めて重要であり、スタイラーの使用はこれらの向上に大きく貢献します。
✅スタイルの種類
スタイルには様々な種類があります。
以下に、メタエディターで選択可能な主要なスタイルとその特徴、そしてMQL4に適用したコード例を示します。順序は「スタイラー」設定画面のドロップダウンのスタイル一覧に従っています:
MetaQuotes(デフォルト設定):Whitesmithsスタイルに近い。
void OnTick()
{
if(OrdersTotal() == 0)
{
if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0))
{
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Allman:開き波括弧を独立した行に置く。
void OnTick()
{
if(OrdersTotal() == 0)
{
if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0))
{
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Java:Sunのコーディング規約に基づくスタイル。K&Rに近い。
void OnTick() {
if (OrdersTotal() == 0) {
if (Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0)) {
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
K&R:開き波括弧を制御文と同じ行に置く。
void OnTick() {
if(OrdersTotal() == 0) {
if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0)) {
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Stroustrup:関数の開き波括弧を独立した行に置く。K&Rスタイルの変形。
void OnTick()
{
if (OrdersTotal() == 0) {
if (Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0)) {
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Whitesmith:波括弧とステートメントを同じ列に揃える。
void OnTick()
{
if(OrdersTotal() == 0)
{
if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0))
{
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
VTK:Visualization Toolkitで使用されるスタイル。
void OnTick()
{
if(OrdersTotal() == 0)
{
if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0))
{
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Ratliff:関数の開き波括弧を同じ行に、他の開き波括弧を新しい行に置く
void OnTick() {
if(OrdersTotal() == 0)
{
if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0))
{
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
GNU:K&Rスタイルの変形。関数定義の開き波括弧は独立した行に置く。
void OnTick()
{
if(OrdersTotal() == 0)
{
if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0))
{
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Linux:Linuxカーネルで使用されるスタイル。タブを使用し、8文字幅。
void OnTick()
{
if (OrdersTotal() == 0) {
if (Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0)) {
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Horstmann:Allmanスタイルの変形。開き波括弧の後のコードを同じ行に置く。
void OnTick()
{ if(OrdersTotal() == 0)
{ if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0))
{ double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
One True Brace:K&Rスタイルの変形。全ての制御構造で波括弧を使用。
void OnTick() {
if (OrdersTotal() == 0) {
if (Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0)) {
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Google:Googleのオープンソースプロジェクトで使用されるスタイル。
void OnTick() {
if (OrdersTotal() == 0) {
if (Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0)) {
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Mozilla:Mozillaプロジェクトで使用されるスタイル。
void OnTick()
{
if (OrdersTotal() == 0) {
if (Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0)) {
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Pico:最小限のインデントを使用するスタイル。
void OnTick()
{
if(OrdersTotal() == 0)
{
if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0))
{
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen);
}
}
}
Lisp:Lispプログラミング言語で一般的に使用されるスタイル。
void OnTick() {
if(OrdersTotal() == 0) {
if(Ask > iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0)) {
double lotSize = 0.01;
double stopLoss = Bid - 100 * Point;
double takeProfit = Ask + 200 * Point;
int ticket = OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, stopLoss, takeProfit, "My order", 0, 0, clrGreen); } } }
✅MQLでのおすすめスタイル
MQLのコミュニティなどやウィザードが生成するコードでは、メタエディターのデフォルト設定(MetaQuotes)が一般的に使用されています。
ただし、個人やチームの好みに応じて他のスタイルを選択することも可能です。オプション設定で好みのスタイルに変更することできます。
重要なのは、選択したスタイルを一貫して使用することです。
✅初心者へのアドバイス
一貫性を保つ:選んだスタイルを全てのコードで統一して使用しましょう。
チームの規約に従う:チームで開発する場合は、チームで決められたスタイルガイドラインに従いましょう。
読みやすさを重視:どのスタイルを選んでも、最終的には読みやすさが最も重要です。
コメントを盛り込む:コメントも自動的に整形されるので、積極的にコメントを入れましょう。
スタイラーを活用:手動で整形するのは大変なので、積極的にスタイラー機能を使いましょう。
カスタマイズを恐れない:必要に応じて、スタイラーの設定をカスタマイズし、自分やチームのニーズに合わせましょう。
定期的に適用:コーディング中は適宜スタイラーを適用し、コードの一貫性を保ちましょう。
✅まとめ
コーディングスタイルを意識し、スタイラー機能を効果的に活用することで、より質の高いMQLプログラムを効率的に開発することができます。
一貫したコーディングスタイルは、コードの可読性を高め、バグの発見や修正を容易にし、チーム開発をスムーズにします。
スタイラー機能を上手に活用して、効率的なEA開発を目指しましょう!
最後までお読みいただき、ありがとうございました。
スキ・コメント・フォローなどいただけけましたら嬉しいです。
✅作者ホームページ
#メタエディター #MQL #プログラミング #コーディング #スタイラー #FX #EA #MT4 #MT5 #メタトレーダー #EA開発 #FX自動売買 #EA開発者