<?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>アンイニシャル定数 アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/%e3%82%a2%e3%83%b3%e3%82%a4%e3%83%8b%e3%82%b7%e3%83%a3%e3%83%ab%e5%ae%9a%e6%95%b0/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/アンイニシャル定数/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Tue, 31 Mar 2026 11:39:34 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>アンイニシャル定数 アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/アンイニシャル定数/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4関数】OnDeinit関数とは？アンイニシャルコード発生時に実行されるイベント関数</title>
		<link>https://mql-programing.com/archives/2930/ondeinit/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sun, 15 May 2022 05:28:14 +0000</pubDate>
				<category><![CDATA[関数]]></category>
		<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[その他]]></category>
		<category><![CDATA[イベント関数]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[reason_]]></category>
		<category><![CDATA[OnDeinit]]></category>
		<category><![CDATA[アンイニシャル定数]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=2930</guid>

					<description><![CDATA[<p>OnDeinit関数とは？ OnDeinit関数は、Expert Advisor（EA）やカスタムインジケーターがチャートから削除されるとき、またはアンイニシャライズ（非初期化）イベントが発生したときに自動的に呼び出され [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/2930/ondeinit/">【MQL4関数】OnDeinit関数とは？アンイニシャルコード発生時に実行されるイベント関数</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<h2><span id="toc1">OnDeinit関数とは？</span></h2>
<p>OnDeinit関数は、Expert Advisor（EA）やカスタムインジケーターがチャートから削除されるとき、またはアンイニシャライズ（非初期化）イベントが発生したときに自動的に呼び出されるイベント関数です。</p>
<p>プログラムの「後片付け」を行うための関数であり、リソースの解放やファイルのクローズ、オブジェクトの削除など、プログラム終了時に必要な処理を記述します。</p>
<h2><span id="toc2">基本的な書式</span></h2>
<pre><code class="language-mql4">void OnDeinit(const int reason)
{
   // 終了時の処理をここに記述
}
</code></pre>
<h3><span id="toc3">引数</span></h3>
<table>
<thead>
<tr>
<th>引数名</th>
<th>型</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>reason</td>
<td>const int</td>
<td>アンイニシャライズの理由コード（なぜOnDeinitが呼ばれたかを示す）</td>
</tr>
</tbody>
</table>
<h3><span id="toc4">戻り値</span></h3>
<p>戻り値はありません（void型）。</p>
<h2><span id="toc5">アンイニシャライズ理由コード（reason）一覧</span></h2>
<p>OnDeinit関数の引数<code>reason</code>には、以下の定数が渡されます。これにより、なぜプログラムが終了するのかを判別できます。</p>
<table>
<thead>
<tr>
<th>定数名</th>
<th>値</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>REASON_PROGRAM</td>
<td>0</td>
<td>ExpertRemove()関数による終了</td>
</tr>
<tr>
<td>REASON_REMOVE</td>
<td>1</td>
<td>チャートからプログラムが削除された</td>
</tr>
<tr>
<td>REASON_RECOMPILE</td>
<td>2</td>
<td>プログラムが再コンパイルされた</td>
</tr>
<tr>
<td>REASON_CHARTCHANGE</td>
<td>3</td>
<td>通貨ペアまたは時間足が変更された</td>
</tr>
<tr>
<td>REASON_CHARTCLOSE</td>
<td>4</td>
<td>チャートが閉じられた</td>
</tr>
<tr>
<td>REASON_PARAMETERS</td>
<td>5</td>
<td>入力パラメータが変更された</td>
</tr>
<tr>
<td>REASON_ACCOUNT</td>
<td>6</td>
<td>別のアカウントが有効化された</td>
</tr>
<tr>
<td>REASON_TEMPLATE</td>
<td>7</td>
<td>別のテンプレートが適用された</td>
</tr>
<tr>
<td>REASON_INITFAILED</td>
<td>8</td>
<td>OnInit()がゼロ以外の値を返した（初期化失敗）</td>
</tr>
<tr>
<td>REASON_CLOSE</td>
<td>9</td>
<td>ターミナルが閉じられた</td>
</tr>
</tbody>
</table>
<h2><span id="toc6">プログラム例1：基本的なOnDeinit関数の使い方</span></h2>
<p>最もシンプルな例として、OnDeinitが呼ばれた理由をログに出力する基本パターンです。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| Expert Advisor - OnDeinit基本例                                    |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| 初期化関数                                                         |
//+------------------------------------------------------------------+
int OnInit()
{
   Print("EAが初期化されました");
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティック処理関数                                                    |
//+------------------------------------------------------------------+
void OnTick()
{
   // メイン処理（ここでは省略）
}

//+------------------------------------------------------------------+
//| 終了処理関数                                                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 終了理由をログに出力する
   Print("EAが終了しました。理由コード: ", reason);
   
   // 理由コードに応じたメッセージを表示
   switch(reason)
   {
      case REASON_PROGRAM:
         Print("→ ExpertRemove()による終了");
         break;
      case REASON_REMOVE:
         Print("→ チャートからEAが削除されました");
         break;
      case REASON_RECOMPILE:
         Print("→ プログラムが再コンパイルされました");
         break;
      case REASON_CHARTCHANGE:
         Print("→ 通貨ペアまたは時間足が変更されました");
         break;
      case REASON_CHARTCLOSE:
         Print("→ チャートが閉じられました");
         break;
      case REASON_PARAMETERS:
         Print("→ パラメータが変更されました");
         break;
      case REASON_ACCOUNT:
         Print("→ アカウントが変更されました");
         break;
      case REASON_TEMPLATE:
         Print("→ テンプレートが適用されました");
         break;
      case REASON_INITFAILED:
         Print("→ 初期化に失敗しました");
         break;
      case REASON_CLOSE:
         Print("→ ターミナルが閉じられました");
         break;
      default:
         Print("→ 不明な理由コード");
         break;
   }
}
</code></pre>
<p>このコードでは、switch文を使ってすべてのアンイニシャライズ理由を判別し、それぞれに対応するメッセージをエキスパートログに出力しています。デバッグ時に非常に役立つ基本パターンです。</p>
<h2><span id="toc7">プログラム例2：チャートオブジェクトの後片付け</span></h2>
<p>EAやインジケーターがチャート上にライン・ラベル・矢印などのオブジェクトを描画した場合、OnDeinitで確実に削除しないとチャートにゴミが残ってしまいます。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| Expert Advisor - オブジェクト削除の例                                |
//+------------------------------------------------------------------+
#define PREFIX "MyEA_"  // オブジェクト名のプレフィックス

//+------------------------------------------------------------------+
//| 初期化関数                                                         |
//+------------------------------------------------------------------+
int OnInit()
{
   // 水平ラインを作成
   string lineName = PREFIX + "HLine";
   ObjectCreate(0, lineName, OBJ_HLINE, 0, 0, Ask);
   ObjectSetInteger(0, lineName, OBJPROP_COLOR, clrRed);
   ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 2);
   
   // テキストラベルを作成
   string labelName = PREFIX + "Label";
   ObjectCreate(0, labelName, OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, labelName, OBJPROP_XDISTANCE, 20);
   ObjectSetInteger(0, labelName, OBJPROP_YDISTANCE, 30);
   ObjectSetString(0, labelName, OBJPROP_TEXT, "EA稼働中");
   ObjectSetInteger(0, labelName, OBJPROP_COLOR, clrWhite);
   ObjectSetInteger(0, labelName, OBJPROP_FONTSIZE, 12);
   
   // 矢印オブジェクトを作成
   string arrowName = PREFIX + "Arrow";
   ObjectCreate(0, arrowName, OBJ_ARROW, 0, TimeCurrent(), Bid);
   ObjectSetInteger(0, arrowName, OBJPROP_ARROWCODE, 233);
   ObjectSetInteger(0, arrowName, OBJPROP_COLOR, clrLime);
   
   Print("オブジェクトを3個作成しました");
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティック処理関数                                                    |
//+------------------------------------------------------------------+
void OnTick()
{
   // メイン処理（ここでは省略）
}

//+------------------------------------------------------------------+
//| 終了処理関数 - オブジェクトの後片付け                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // プレフィックスが一致するオブジェクトをすべて検索して削除
   int totalObjects = ObjectsTotal(0);
   int deletedCount = 0;
   
   // 後ろから順にループする（削除時のインデックスずれを防ぐ）
   for(int i = totalObjects - 1; i >= 0; i--)
   {
      string objName = ObjectName(0, i);
      
      // プレフィックスが一致するオブジェクトのみ削除
      if(StringFind(objName, PREFIX) == 0)
      {
         ObjectDelete(0, objName);
         deletedCount++;
      }
   }
   
   Print("OnDeinit: ", deletedCount, "個のオブジェクトを削除しました");
   
   // チャートを再描画して反映
   ChartRedraw(0);
}
</code></pre>
<p>ポイントは、オブジェクト名に共通の<strong>プレフィックス</strong>をつけておくことです。OnDeinitではプレフィックスが一致するオブジェクトだけを削除するため、他のEAやインジケーターが作成したオブジェクトを誤って消してしまう心配がありません。また、オブジェクトをループで削除する際は、インデックスがずれないよう<strong>後ろから前に向かってループ</strong>する点も重要です。</p>
<h2><span id="toc8">プログラム例3：ファイルハンドルの安全なクローズ</span></h2>
<p>EAでログファイルやCSVファイルに書き込んでいる場合、OnDeinitでファイルを確実に閉じる必要があります。ファイルを閉じないまま終了すると、データが破損する可能性があります。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| Expert Advisor - ファイルクローズの例                                |
//+------------------------------------------------------------------+
int gFileHandle = INVALID_HANDLE;  // グローバル変数でファイルハンドルを保持

//+------------------------------------------------------------------+
//| 初期化関数                                                         |
//+------------------------------------------------------------------+
int OnInit()
{
   // ログファイルを開く（追記モード）
   string fileName = "TradeLog_" + Symbol() + ".csv";
   gFileHandle = FileOpen(fileName, FILE_WRITE | FILE_CSV | FILE_COMMON, ',');
   
   if(gFileHandle == INVALID_HANDLE)
   {
      Print("エラー: ファイルを開けませんでした。エラーコード: ", GetLastError());
      return(INIT_FAILED);  // 初期化失敗 → OnDeinitがREASON_INITFAILEDで呼ばれる
   }
   
   // ヘッダー行を書き込む
   FileWrite(gFileHandle, "日時", "種別", "通貨ペア", "ロット", "価格", "備考");
   Print("ログファイルを開きました: ", fileName);
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティック処理関数                                                    |
//+------------------------------------------------------------------+
void OnTick()
{
   // 例：何らかの条件でトレード情報をファイルに書き込む
   static datetime lastWriteTime = 0;
   
   // 1分に1回だけ書き込む例
   if(TimeCurrent() - lastWriteTime >= 60)
   {
      if(gFileHandle != INVALID_HANDLE)
      {
         FileWrite(gFileHandle,
                   TimeToString(TimeCurrent(), TIME_DATE | TIME_SECONDS),
                   "INFO",
                   Symbol(),
                   "0.00",
                   DoubleToString(Bid, Digits),
                   "定期記録");
      }
      lastWriteTime = TimeCurrent();
   }
}

//+------------------------------------------------------------------+
//| 終了処理関数 - ファイルの安全なクローズ                               |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // ファイルハンドルが有効な場合のみクローズする
   if(gFileHandle != INVALID_HANDLE)
   {
      // 最終行として終了情報を書き込む
      FileWrite(gFileHandle,
                TimeToString(TimeCurrent(), TIME_DATE | TIME_SECONDS),
                "DEINIT",
                Symbol(),
                "",
                "",
                "終了理由: " + IntegerToString(reason));
      
      // ファイルをフラッシュ（バッファの内容をディスクに書き出す）
      FileFlush(gFileHandle);
      
      // ファイルを閉じる
      FileClose(gFileHandle);
      gFileHandle = INVALID_HANDLE;  // ハンドルを無効値に戻す
      
      Print("ログファイルを正常にクローズしました");
   }
   else
   {
      Print("ファイルハンドルは無効でした（クローズ不要）");
   }
}
</code></pre>
<p>ファイル操作で重要なのは、<code>FileClose()</code>の前に<code>FileFlush()</code>を呼んでバッファの内容を確実にディスクに書き出すことと、クローズ後にハンドル変数を<code>INVALID_HANDLE</code>にリセットすることです。これにより、万が一OnDeinitが複数回呼ばれるような状況でも安全に動作します。</p>
<h2><span id="toc9">プログラム例4：理由コードに応じた条件分岐処理</span></h2>
<p>実践的なEAでは、終了理由によって処理を分けたいケースがあります。例えば、パラメータ変更時はポジション情報を保持し、完全な終了時のみグローバル変数をクリアする、といった使い分けです。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| Expert Advisor - 理由コードに応じた条件分岐                          |
//+------------------------------------------------------------------+
#define EA_NAME   "MyTradingEA"
#define PREFIX    EA_NAME + "_"

input double Lots         = 0.1;   // ロット数
input int    MagicNumber  = 12345; // マジックナンバー

//+------------------------------------------------------------------+
//| 初期化関数                                                         |
//+------------------------------------------------------------------+
int OnInit()
{
   // グローバル変数から前回の状態を復元（パラメータ変更・再コンパイル時）
   string gvName = PREFIX + "LastTicket";
   if(GlobalVariableCheck(gvName))
   {
      int lastTicket = (int)GlobalVariableGet(gvName);
      Print("前回のチケット番号を復元: ", lastTicket);
   }
   
   // タイマーを設定（1秒間隔）
   EventSetTimer(1);
   
   Print(EA_NAME, " が初期化されました");
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティック処理関数                                                    |
//+------------------------------------------------------------------+
void OnTick()
{
   // メインのトレードロジック（ここでは省略）
}

//+------------------------------------------------------------------+
//| タイマーイベント関数                                                 |
//+------------------------------------------------------------------+
void OnTimer()
{
   // 定期処理（ここでは省略）
}

//+------------------------------------------------------------------+
//| 終了処理関数 - 理由コードに応じた条件分岐                             |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // ------------------------------------
   // 1. すべての終了理由で共通の処理
   // ------------------------------------
   
   // タイマーを停止
   EventKillTimer();
   Print("タイマーを停止しました");
   
   // ------------------------------------
   // 2. 一時的な終了の場合（状態を保持）
   // ------------------------------------
   if(reason == REASON_PARAMETERS  ||   // パラメータ変更
      reason == REASON_RECOMPILE   ||   // 再コンパイル
      reason == REASON_CHARTCHANGE ||   // 通貨ペア・時間足変更
      reason == REASON_TEMPLATE)        // テンプレート変更
   {
      Print("一時的な終了です。状態情報を保持します。");
      
      // 現在のポジション情報をグローバル変数に保存
      SaveCurrentState();
      
      // チャートオブジェクトは削除しない（再起動後にそのまま使うため）
      return;
   }
   
   // ------------------------------------
   // 3. 完全な終了の場合（クリーンアップ）
   // ------------------------------------
   if(reason == REASON_REMOVE     ||   // EA削除
      reason == REASON_CHARTCLOSE ||   // チャート閉じ
      reason == REASON_CLOSE      ||   // ターミナル閉じ
      reason == REASON_PROGRAM    ||   // ExpertRemove()
      reason == REASON_ACCOUNT)        // アカウント変更
   {
      Print("完全な終了です。フルクリーンアップを実行します。");
      
      // チャート上のすべての自作オブジェクトを削除
      DeleteAllObjects();
      
      // グローバル変数を削除
      CleanupGlobalVariables();
      
      // チャートのコメントをクリア
      Comment("");
      
      Print(EA_NAME, " のクリーンアップが完了しました");
      return;
   }
   
   // ------------------------------------
   // 4. 初期化失敗の場合
   // ------------------------------------
   if(reason == REASON_INITFAILED)
   {
      Print("初期化に失敗したため終了します");
      // 最小限のクリーンアップのみ実行
      DeleteAllObjects();
      Comment("");
      return;
   }
}

//+------------------------------------------------------------------+
//| 現在の状態をグローバル変数に保存する関数                               |
//+------------------------------------------------------------------+
void SaveCurrentState()
{
   // 保有ポジションのチケット番号を保存
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
         {
            string gvName = PREFIX + "LastTicket";
            GlobalVariableSet(gvName, OrderTicket());
            Print("チケット番号 ", OrderTicket(), " をグローバル変数に保存しました");
            break;
         }
      }
   }
}

//+------------------------------------------------------------------+
//| 自作オブジェクトをすべて削除する関数                                   |
//+------------------------------------------------------------------+
void DeleteAllObjects()
{
   int count = 0;
   for(int i = ObjectsTotal(0) - 1; i >= 0; i--)
   {
      string objName = ObjectName(0, i);
      if(StringFind(objName, PREFIX) == 0)
      {
         ObjectDelete(0, objName);
         count++;
      }
   }
   if(count > 0)
   {
      Print(count, "個のオブジェクトを削除しました");
      ChartRedraw(0);
   }
}

//+------------------------------------------------------------------+
//| グローバル変数をクリーンアップする関数                                 |
//+------------------------------------------------------------------+
void CleanupGlobalVariables()
{
   int count = 0;
   int total = GlobalVariablesTotal();
   
   // 後ろからループして削除
   for(int i = total - 1; i >= 0; i--)
   {
      string gvName = GlobalVariableName(i);
      if(StringFind(gvName, PREFIX) == 0)
      {
         GlobalVariableDel(gvName);
         count++;
      }
   }
   
   if(count > 0)
      Print(count, "個のグローバル変数を削除しました");
}
</code></pre>
<p>この例では、終了理由を3つのカテゴリ（一時的な終了・完全な終了・初期化失敗）に分類し、それぞれ異なる処理を行っています。パラメータ変更や再コンパイル時にはオブジェクトやグローバル変数を保持し、EA削除やチャートクローズ時には完全なクリーンアップを実行します。</p>
<h2><span id="toc10">よくある使い方のポイント・注意事項</span></h2>
<h3><span id="toc11">1. OnDeinitの実行時間には制限がある</span></h3>
<p>OnDeinit関数の実行には<strong>約2.5秒のタイムリミット</strong>があります。時間のかかる処理（大量のファイル操作やネットワーク通信など）をOnDeinitに入れると、処理が途中で打ち切られる可能性があります。</p>
<h3><span id="toc12">2. パラメータ変更時にもOnDeinitは呼ばれる</span></h3>
<p>EAのプロパティ画面でパラメータを変更して「OK」を押すと、OnDeinit → OnInit の順で呼ばれます。このとき理由コードは<code>REASON_PARAMETERS</code>(5)です。パラメータ変更のたびにオブジェクトが消えてしまう問題を防ぐために、理由コードによる条件分岐が有効です。</p>
<h3><span id="toc13">3. 再コンパイル時にも呼ばれる</span></h3>
<p>MetaEditorでコードを修正してコンパイルすると、稼働中のEAに対してOnDeinit（<code>REASON_RECOMPILE</code>）→ OnInitの順で自動的に呼ばれます。開発中にファイルハンドルのリークなどが起きないよう、OnDeinitでの後片付けは確実に行いましょう。</p>
<h3><span id="toc14">4. グローバル変数のハンドルは必ずリセットする</span></h3>
<p>ファイルハンドルやその他のリソースハンドルをグローバル変数で保持している場合、OnDeinitでクローズした後は必ず<code>INVALID_HANDLE</code>などの無効値に戻してください。これにより、二重解放の問題を防止できます。</p>
<h3><span id="toc15">5. Comment(&#8220;&#8221;)でチャート表示をクリアする</span></h3>
<p><code>Comment()</code>関数でチャート上に情報を表示している場合、OnDeinitで<code>Comment("")</code>を呼んでクリアしないと、EA削除後もテキストがチャートに残り続けます。</p>
<h3><span id="toc16">6. EventKillTimer()を忘れない</span></h3>
<p>OnInitで<code>EventSetTimer()</code>を呼んでタイマーを設定している場合は、OnDeinitで必ず<code>EventKillTimer()</code>を呼んでタイマーを停止しましょう。</p>
<pre><code class="language-mql4">void OnDeinit(const int reason)
{
   // タイマー停止（OnInitでEventSetTimerを使用した場合は必須）
   EventKillTimer();
   
   // チャートコメントのクリア
   Comment("");
   
   // 自作オブジェクトの削除
   ObjectsDeleteAll(0, "MyPrefix_");
   
   // ファイルハンドルのクローズ
   if(fileHandle != INVALID_HANDLE)
   {
      FileClose(fileHandle);
      fileHandle = INVALID_HANDLE;
   }
   
   Print("すべてのクリーンアップが完了しました");
}
</code></pre>
<h3><span id="toc17">まとめ</span></h3>
<p>OnDeinit関数は、プログラムの「品質」を決める重要な関数です。適切な後片付けを行うことで、メモリリークやファイル破損を防ぎ、チャートをきれいな状態に保てます。特に<strong>理由コードによる条件分岐</strong>を活用することで、パラメータ変更時と完全な終了時で異なるクリーンアップ処理を実装でき、より使いやすいEAやインジケーターを作成できます。</p>
<p>投稿 <a href="https://mql-programing.com/archives/2930/ondeinit/">【MQL4関数】OnDeinit関数とは？アンイニシャルコード発生時に実行されるイベント関数</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
