<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GlobalVariableSet アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/globalvariableset/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/globalvariableset/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 04:34:18 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>GlobalVariableSet アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/globalvariableset/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】グローバル変数関数の使い方を徹底解説！GlobalVariableSet / Get / Check / Del</title>
		<link>https://mql-programing.com/archives/13068/%e3%80%90mql4%e3%80%91%e3%82%b0%e3%83%ad%e3%83%bc%e3%83%90%e3%83%ab%e5%a4%89%e6%95%b0%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81globalv/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Fri, 24 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[変数]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[グローバル変数]]></category>
		<category><![CDATA[GlobalVariableSet]]></category>
		<category><![CDATA[MetaTrader4]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13068</guid>

					<description><![CDATA[<p>MQL4でEA（自動売買プログラム）やインジケーターを開発していると、「MT4を再起動しても値を保持しておきたい」「複数のEA間でデータを共有したい」という場面に遭遇します。そんなときに活躍するのが、クライアントターミナ [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13068/%e3%80%90mql4%e3%80%91%e3%82%b0%e3%83%ad%e3%83%bc%e3%83%90%e3%83%ab%e5%a4%89%e6%95%b0%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81globalv/">【MQL4】グローバル変数関数の使い方を徹底解説！GlobalVariableSet / Get / Check / Del</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>MQL4でEA（自動売買プログラム）やインジケーターを開発していると、「MT4を再起動しても値を保持しておきたい」「複数のEA間でデータを共有したい」という場面に遭遇します。そんなときに活躍するのが、<strong>クライアントターミナルのグローバル変数</strong>（以下「ターミナルグローバル変数」）です。</p>
<p>この記事では、ターミナルグローバル変数を操作するための主要関数 ── <code>GlobalVariableSet</code>、<code>GlobalVariableGet</code>、<code>GlobalVariableCheck</code>、<code>GlobalVariableDel</code> を中心に、使い方と注意点をわかりやすく解説します。</p>
<h2><span id="toc1">ターミナルグローバル変数とは？── 2種類の「グローバル変数」に注意</span></h2>
<p>MQL4には「グローバル変数」と呼ばれるものが<strong>2種類</strong>あります。ここを混同すると大きな混乱のもとになるので、最初にしっかり区別しましょう。</p>
<h3><span id="toc2">① MQL4プログラム内のグローバル変数</span></h3>
<p>関数の外（<code>OnInit()</code>や<code>OnTick()</code>の外側）で宣言する変数のことです。プログラム全体からアクセスできますが、<strong>EAをチャートから外したりMT4を終了すると値は消えます</strong>。</p>
<pre><code class="language-mql5">// プログラム内グローバル変数の例
int g_tickCount = 0;  // プログラム内のどの関数からもアクセス可能

void OnTick()
{
    g_tickCount++;
    Print("ティック回数: ", g_tickCount);
}
</code></pre>
<h3><span id="toc3">② クライアントターミナルのグローバル変数（本記事の主役）</span></h3>
<p>MT4のメニュー「ツール → グローバル変数」（ショートカット：F3キー）で確認できる変数です。こちらは<strong>MT4を終了してもデータが保持</strong>されます。さらに、同じMT4上で動作している<strong>すべてのEA・インジケーターからアクセス可能</strong>なので、プログラム間のデータ共有にも使えます。</p>
<p>ターミナルグローバル変数の特徴をまとめると、次のとおりです。</p>
<ul>
<li><strong>データ型は double 型のみ</strong>（文字列や整数を直接格納することはできません）</li>
<li><strong>最後のアクセスから4週間</strong>保持され、その後は自動的に削除される</li>
<li>同一MT4上の全MQL4プログラムからアクセス可能</li>
<li><code>GlobalVariable</code>系の専用関数を使って操作する</li>
</ul>
<h2><span id="toc4">主要なグローバル変数関数一覧</span></h2>
<p>以下が、ターミナルグローバル変数を操作するための主要関数です。</p>
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse; width: 100%;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>関数名</th>
<th>機能</th>
<th>戻り値</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>GlobalVariableSet()</code></td>
<td>値を設定（存在しなければ新規作成）</td>
<td>datetime（最終アクセス時刻）/ 0（失敗）</td>
</tr>
<tr>
<td><code>GlobalVariableGet()</code></td>
<td>値を取得</td>
<td>double（格納されている値）</td>
</tr>
<tr>
<td><code>GlobalVariableCheck()</code></td>
<td>変数の存在を確認</td>
<td>true（存在する）/ false（存在しない）</td>
</tr>
<tr>
<td><code>GlobalVariableDel()</code></td>
<td>変数を削除</td>
<td>true（成功）/ false（失敗）</td>
</tr>
<tr>
<td><code>GlobalVariablesTotal()</code></td>
<td>変数の総数を取得</td>
<td>int（変数の数）</td>
</tr>
<tr>
<td><code>GlobalVariablesDeleteAll()</code></td>
<td>変数を一括削除</td>
<td>int（削除された数）</td>
</tr>
<tr>
<td><code>GlobalVariableName()</code></td>
<td>インデックスから変数名を取得</td>
<td>string（変数名）</td>
</tr>
</tbody>
</table>
<p>この中でも特に使用頻度の高い4つの関数を、コード例とともに詳しく見ていきましょう。</p>
<h2><span id="toc5">GlobalVariableSet() ── 値の設定・新規作成</span></h2>
<p>ターミナルグローバル変数に値を設定する関数です。指定した名前の変数が存在しない場合は、<strong>自動的に新しい変数が作成</strong>されます。</p>
<pre><code class="language-mql5">// 構文
datetime GlobalVariableSet(
    string name,   // グローバル変数名
    double value   // 設定する値
);
</code></pre>
<p>戻り値は、成功した場合に<strong>最終アクセス時刻（datetime型）</strong>、失敗した場合に<strong>0</strong>が返ります。</p>
<pre><code class="language-mql5">void OnInit()
{
    // グローバル変数 "MyEA_BuyPrice" に値を設定
    datetime dt = GlobalVariableSet("MyEA_BuyPrice", 150.250);
    
    if(dt != 0)
        Print("設定成功！ アクセス時刻: ", TimeToString(dt));
    else
        Print("設定失敗。エラー: ", GetLastError());
}
</code></pre>
<h2><span id="toc6">GlobalVariableGet() ── 値の取得</span></h2>
<p>ターミナルグローバル変数から値を読み取る関数です。戻り値は<strong>double型</strong>です。</p>
<pre><code class="language-mql5">// 構文
double GlobalVariableGet(
    string name   // グローバル変数名
);
</code></pre>
<p>指定した名前の変数が存在しない場合は<strong>0が返り</strong>、エラーコードがセットされます。</p>
<pre><code class="language-mql5">void OnTick()
{
    double buyPrice = GlobalVariableGet("MyEA_BuyPrice");
    
    if(GetLastError() == 0)
        Print("保存されていた買値: ", buyPrice);
    else
        Print("グローバル変数が見つかりません");
}
</code></pre>
<p><strong>&#x1f4a1; ポイント：</strong>戻り値が0なのか、それとも「本当に0が格納されている」のか区別がつかない場合があります。確実に存在を確認したい場合は、次に紹介する <code>GlobalVariableCheck()</code> と組み合わせましょう。</p>
<h2><span id="toc7">GlobalVariableCheck() ── 存在の確認</span></h2>
<p>指定した名前のターミナルグローバル変数が存在するかどうかを確認する関数です。</p>
<pre><code class="language-mql5">// 構文
bool GlobalVariableCheck(
    string name   // グローバル変数名
);
</code></pre>
<p>変数が存在する場合は <code>true</code>、存在しない場合は <code>false</code> を返します。</p>
<pre><code class="language-mql5">void OnInit()
{
    string gvName = "MyEA_BuyPrice";
    
    // 変数が存在するか先に確認してから値を取得する
    if(GlobalVariableCheck(gvName))
    {
        double val = GlobalVariableGet(gvName);
        Print(gvName, " の値: ", val);
    }
    else
    {
        Print(gvName, " は存在しません。初期値を設定します。");
        GlobalVariableSet(gvName, 0.0);
    }
}
</code></pre>
<p>このように、<code>GlobalVariableCheck()</code> → <code>GlobalVariableGet()</code> の順で呼び出すのが安全なパターンです。</p>
<h2><span id="toc8">GlobalVariableDel() ── 変数の削除</span></h2>
<p>不要になったターミナルグローバル変数を削除する関数です。</p>
<pre><code class="language-mql5">// 構文
bool GlobalVariableDel(
    string name   // グローバル変数名
);
</code></pre>
<p>削除に成功した場合は <code>true</code>、失敗した場合は <code>false</code> を返します。</p>
<pre><code class="language-mql5">void OnDeinit(const int reason)
{
    // EA終了時にグローバル変数をクリーンアップ
    if(GlobalVariableDel("MyEA_BuyPrice"))
        Print("グローバル変数を削除しました");
    else
        Print("削除失敗。エラー: ", GetLastError());
}
</code></pre>
<h2><span id="toc9">実践例：EA再起動後もポジション情報を保持する</span></h2>
<p>ここまでの関数を組み合わせた実践的なサンプルを見てみましょう。EAがポジションを持ったときにチケット番号をターミナルグローバル変数に保存し、MT4再起動後でも管理を継続できるようにします。</p>
<pre><code class="language-mql5">#property strict

// EA固有のプレフィックスをつけて名前衝突を防ぐ
string gvPrefix = "SampleEA_";

//+------------------------------------------------------------------+
//| 初期化処理                                                        |
//+------------------------------------------------------------------+
void OnInit()
{
    string gvTicket = gvPrefix + Symbol() + "_Ticket";
    
    // 前回保存したチケット番号があるか確認
    if(GlobalVariableCheck(gvTicket))
    {
        int ticket = (int)GlobalVariableGet(gvTicket);
        if(ticket > 0)
        {
            Print("前回のチケット番号を復元: ", ticket);
            // 必要に応じてポジション情報を再取得する処理を追加
        }
    }
    else
    {
        Print("保存済みチケットなし。新規稼働を開始します。");
    }
}

//+------------------------------------------------------------------+
//| ティック処理                                                      |
//+------------------------------------------------------------------+
void OnTick()
{
    string gvTicket = gvPrefix + Symbol() + "_Ticket";
    
    // 新規注文を出す処理（簡略化）
    int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, 0, 0, "SampleEA", 12345, 0, clrBlue);
    
    if(ticket > 0)
    {
        // チケット番号をグローバル変数に保存
        GlobalVariableSet(gvTicket, (double)ticket);
        Print("チケット ", ticket, " をグローバル変数に保存しました");
    }
}

//+------------------------------------------------------------------+
//| 終了処理                                                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    // パラメータ変更やチャート切替時はデータを保持
    // 手動削除(REASON_REMOVE)の場合のみクリーンアップ
    if(reason == REASON_REMOVE)
    {
        string gvTicket = gvPrefix + Symbol() + "_Ticket";
        GlobalVariableDel(gvTicket);
        Print("EA削除のため、グローバル変数をクリーンアップしました");
    }
}
</code></pre>
<h2><span id="toc10">グローバル変数を使うときの注意点</span></h2>
<h3><span id="toc11">1. 名前の衝突に注意 ── プレフィックスをつけよう</span></h3>
<p>ターミナルグローバル変数は同じMT4上の<strong>全プログラムで共有</strong>されます。異なるEAが同じ名前の変数を使うと、互いに値を上書きしてしまい不具合の原因になります。上のサンプルのように、<strong>EA名＋通貨ペア名をプレフィックスとしてつける</strong>のがベストプラクティスです。</p>
<h3><span id="toc12">2. 格納できるのは double 型のみ</span></h3>
<p>ターミナルグローバル変数に格納できるのは<strong>double型の値だけ</strong>です。整数（int）を保存したい場合はキャストが必要です。また、<strong>long型の大きな値</strong>（例：チャートIDなど）を格納すると、doubleの精度の問題で値が正確に復元できないことがあるので注意が必要です。</p>
<h3><span id="toc13">3. 4週間でデータが消える</span></h3>
<p>クライアントターミナルのグローバル変数は、最後のアクセスから4週間クライアントターミナルに保持され、その後自動的に削除されます。長期間EAを停止する場合は、この点を意識しておきましょう。定期的にアクセス（読み書き）すればタイマーはリセットされます。</p>
<h3><span id="toc14">4. 不要な変数は削除する</span></h3>
<p>使わなくなったグローバル変数を放置すると、F3キーで確認したときに一覧が煩雑になります。EA終了時に適切に <code>GlobalVariableDel()</code> で削除するか、<code>GlobalVariablesDeleteAll()</code> でプレフィックス指定の一括削除を行いましょう。</p>
<pre><code class="language-mql5">// プレフィックスを指定して一括削除
int deleted = GlobalVariablesDeleteAll("SampleEA_");
Print(deleted, " 個のグローバル変数を削除しました");
</code></pre>
<h2><span id="toc15">補足：その他の便利な関数</span></h2>
<p>主要4関数以外にも、覚えておくと便利な関数を紹介します。</p>
<ul>
<li><strong><code>GlobalVariablesTotal()</code></strong> ── 現在のターミナルグローバル変数の総数を取得</li>
<li><strong><code>GlobalVariableName(index)</code></strong> ── インデックス番号から変数名を取得（ループで全変数を列挙する際に便利）</li>
<li><strong><code>GlobalVariableSetOnCondition()</code></strong> ── 現在値が指定値と一致する場合のみ更新する（排他制御に利用可能）</li>
<li><strong><code>GlobalVariableTemp()</code></strong> ── MT4終了時に自動削除される一時的なグローバル変数を作成</li>
<li><strong><code>GlobalVariablesFlush()</code></strong> ── メモリ上のグローバル変数をディスクに強制保存</li>
</ul>
<h2><span id="toc16">まとめ</span></h2>
<p>ターミナルグローバル変数は、MQL4プログラミングにおいて<strong>データの永続化やプログラム間のデータ共有</strong>を実現するための重要な仕組みです。今回紹介した4つの基本関数を押さえておけば、多くの場面で活用できます。</p>
<ul>
<li><code>GlobalVariableSet()</code> で値を保存</li>
<li><code>GlobalVariableGet()</code> で値を取得</li>
<li><code>GlobalVariableCheck()</code> で存在を確認</li>
<li><code>GlobalVariableDel()</code> で不要な変数を削除</li>
</ul>
<p>名前の衝突を避けるためにプレフィックスをつけること、double型しか格納できないこと、4週間の有効期限があることを忘れずに、安全で堅牢なEA開発に役立ててください！</p>
<p>**記事のポイント：**</p>
<p>| 項目 | 内容 |</p>
<p>|&#8212;|&#8212;|</p>
<p>| **タイトル** | 【MQL4】グローバル変数関数の使い方を徹底解説！GlobalVariableSet / Get / Check / Del |</p>
<p>| **タグ** | MQL4, グローバル変数, GlobalVariableSet, EA開発, MetaTrader4 |</p>
<p>| **文字数** | 約8,900文字（HTML含む） / 本文テキスト約3,000文字相当 |</p>
<p>| **構成** | 導入 → 2種類のグローバル変数の区別 → 関数一覧表 → 4関数の詳細解説（構文＋コード例） → 実践サンプル → 注意点4つ → 補足関数 → まとめ |</p>
<p>記事の特徴：</p>
<p>&#8211; **初心者が最も混同しやすい「2種類のグローバル変数」の違い**を冒頭で明確に解説</p>
<p>&#8211; 各関数に**構文・戻り値・実用コードサンプル**を掲載</p>
<p>&#8211; **実践例**として「EA再起動後もチケット番号を保持する」リアルなユースケースを提示</p>
<p>&#8211; **注意点**では名前衝突・double型制限・4週間有効期限・long型精度問題など、実開発で陥りやすい落とし穴をカバー</p>
<p>&#8211; 補足として `GlobalVariableSetOnCondition` や `GlobalVariableTemp` など発展的な関数も紹介</p>
<p>投稿 <a href="https://mql-programing.com/archives/13068/%e3%80%90mql4%e3%80%91%e3%82%b0%e3%83%ad%e3%83%bc%e3%83%90%e3%83%ab%e5%a4%89%e6%95%b0%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81globalv/">【MQL4】グローバル変数関数の使い方を徹底解説！GlobalVariableSet / Get / Check / Del</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
