口座番号認証を使用する上での注意点

MQLのAccountInfoInteger(ACCOUNT_LOGIN)で得られる口座番号は、MT4サーバにログインしてからでないと0を返します。

MT4を起動した直後は、MT4サーバにログインする前なのでAccountInfoInteger(ACCOUNT_LOGIN)は必ず0を返します。

チャートにインジケーターを挿入している状態でMT4を起動したとき、MT4サーバにログインする前にインジケーターの初期化(OnInit())が終了してしまいます。

そのため、AccountInfoInteger(ACCOUNT_LOGIN)を利用する口座番号認証では、OnInit()内に認証用コードを書くと、MT4サーバにログインする前に認証が行われてしまうため、必ず認証に失敗します。

この問題を解決するため、口座番号認証を利用する場合は、OnTimer()内に認証用コードを書きます。

サンプル

				
					void OnTimer() {
   if(AccountNumber() != 0) { ・・・①
      EventSetTimer(86400); ・・・②
      if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
         Print("[口座番号: " + (string)AccountNumber() + "] 認証に成功しました。");
      } else {
         Print("[口座番号: " + (string)AccountNumber() + "] 認証に失敗しました。"
         + "利用期限が過ぎているか、この口座番号では利用できません。");
      }
   }
}				
			

① MT4サーバにログインする前はAccountInfoInteger(ACCOUNT_LOGIN)は0を返すので、その場合は認証を行いません。

② MT4サーバにログインした後はAccountInfoInteger(ACCOUNT_LOGIN)が口座番号を返すようになります。その後は繰り返し認証をする必要がないため、タイマー時間を延ばします。なお、OnTimer()で認証を繰り返し行ったとしても、デフォルトのMQLAuth.mqhではキャッシュの値を読み込むだけなので、2回目以降の認証ではサーバへのアクセスは行われません。

On this page