恥は/dev/nullへ by 初心者

~ PC初心者による右往左往の記録 ~

フォントが原因でMT5がフリーズした

問題発生(2026年2月2日)

2026年2月2日にMT5を起動したところ、アップデートが配信されていたのでアップデートを実行しました。すると、そのままMT5がフリーズしました。

フォントが原因

Winodws上にないフォントをコードの中で指定している場合、そのプログラム(Expert, Indicator, Script)をチャートに挿入するとPCがフリーズしていました。

ここでいう「Windows上にないフォント」とは、MT5を動かしているPCにインストールされていないフォントを指します。

自分の場合、あるインディケーターの.mq5ファイルにおいて「Arial Rounded MT Bold」というフォントを指定していました。このインディケーターを入れると必ずフリーズしていました。「Arial Rounded MT Bold」という部分を「Arial」に書き換えてからコンパイルして、インディケーターをチャートに挿入するとMT5はフリーズしませんでした。

その他の問題

PCにインストールされているフォントでも、
・指定したサイズにならない
・書体(太字や斜字など)が反映しない
というケースがありました。

例1:
通貨ペア名を表示させているインディケーターにおいて、通貨ペア名が異様に小さな文字になっていました。そこで、フォントサイズを大きい値にしてみましたが、フォントサイズが大きくなりませんでした。

この問題は、通貨ペア名の表示に使っているフォントを別のフォントに変更したら解決しました。PCにインストールされているフォントでも、MT5上でフォントサイズの変更ができる場合とできない場合があるようです。

例2:
ノーマル(Regular)書体以外でよく使われるのは太字と斜字(BoldとItalic)だと思いますが、フォントによって太字や斜字になる場合とならない場合がありました。なお、UnderlineとStrikeoutに関しては、どちらもMT5上ではスタイルが反映しませんでした。


調べたこと

自分のPCにインストールされているフォント(の一部)をラベルオブジェクトに使って様子を見ました。

実験に使ったフォント名は、下表の「コード内で指定したフォント名」です。
ラベルオブジェクト内に表示する文字が「英数字」か「日本語(ひらがなや漢字)」かで列を分けています。

主に以下の2点を調べました。
・フォントサイズが指定した値に応じて変化するか
・書体が反映するか(太字として表示されるか、斜字として表示されるか等)


回避策

次のようにしておけば予期せぬ結果を回避できそうです。

  • PCにインストールされているフォントを指定する。
  • ノーマルな書体を使う(Bold, Italic, Underline, Strikeoutを使わない)。
  • 英数字にしか使えないフォント、日本語に使えるフォントを適切に使い分ける。


PCにインストールされているフォントを調べる

PCにインストールされているフォントはWindowsの「フォント設定」で見ることができますが、一覧表で出力しておくと見やすいです。

以下のコードをPowerShell画面に貼り付けてEnterを叩くと、デスクトップにファイルが出力されます(コードはGoogle Geminiさんに作成してもらいました)。

Add-Type -AssemblyName System.Drawing

$fontFamilies = [System.Drawing.Text.InstalledFontCollection]::new().Families

$results = foreach ($family in $fontFamilies) {
    foreach ($style in [System.Drawing.FontStyle]::GetValues([System.Drawing.FontStyle])) {
        if ($family.IsStyleAvailable($style)) {
            # フルネームを作成
            $fullName = "$($family.Name) $($style.ToString())"
            
            # 「 Regular」が含まれる場合は削除、そうでなければそのまま
            # ※前後の余白も整理するために -replace を使用
            $cleanedName = $fullName -replace " Regular", ""
            
            $cleanedName
        }
    }
}

# テキストファイルとして出力(ヘッダーなし)
$outputPath = "$HOME\Desktop\FullFontNames.csv"
# 重複を排除(Regularを消したことで同じ名前が並ぶのを防ぐ)し、ファイルへ保存
$results | Select-Object -Unique | Out-File -FilePath $outputPath -Encoding UTF8

Write-Host "完了!リストが作成されました: $outputPath" -ForegroundColor Cyan