MT5 MT5 実行時エラー
4806
- 定数名
ERR_INDICATOR_DATA_NOT_FOUND- 意味
- インジケーターのデータがまだない
MT5エラー4806とは
CopyBuffer() でインジケーターの値を取得しようとしたが、まだ計算が終わっていないときのエラーです。ハンドルを作った直後(OnInit の直後など)によく起こり、少し待てば解消します。
ログの表示例
CopyBuffer failed, error 4806
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT5エラー4806の主な原因
- ハンドル作成直後で、インジケーターの計算がまだ終わっていない
- 参照する銘柄・時間足のデータがまだ読み込まれていない
- バッファ番号がインジケーターのバッファ数を超えている
MT5エラー4806の対処法
- CopyBuffer() の前に BarsCalculated(ハンドル) を確認し、必要な本数に満たなければ次のティックで取り直す
- OnInit() では CopyBuffer() せず、OnTick() / OnCalculate() で取得する
- バッファ番号がインジケーターの #property indicator_buffers 以内か確認する
コード例(MQL5)
// インジケーターのハンドルは OnInit で1回だけ作る(4802・4806・4807 対策)(MQL5)
input string InpIndicator = "Examples\\MACD"; // MQL5\Indicators からの相対パス(拡張子なし)
int hMA = INVALID_HANDLE;
int hInd = INVALID_HANDLE;
int OnInit()
{
hMA = iMA(_Symbol, _Period, 20, 0, MODE_SMA, PRICE_CLOSE);
hInd = iCustom(_Symbol, _Period, InpIndicator);
if(hMA == INVALID_HANDLE || hInd == INVALID_HANDLE)
{
Print("インジケーターを作成できません error=", GetLastError()); // 4802 など
return INIT_FAILED;
}
return INIT_SUCCEEDED;
}
bool GetMA(int shift, double &value)
{
if(BarsCalculated(hMA) < shift + 1) return false; // まだ計算中(4806 を防ぐ)
double buf[];
if(CopyBuffer(hMA, 0, shift, 1, buf) != 1)
{
Print("CopyBuffer error ", GetLastError());
return false;
}
value = buf[0];
return true;
}
void OnDeinit(const int reason)
{
if(hMA != INVALID_HANDLE) IndicatorRelease(hMA);
if(hInd != INVALID_HANDLE) IndicatorRelease(hInd);
}MetaEditor(MT5)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。
このエラーが出やすい関数
このエラーを避けるコードの書き方(逆引きレシピ)
- ゴールデンクロス・デッドクロスで売買したい短期 MA と長期 MA の値を「2本前」と「1本前」で比べ、上下が入れ替わったらクロスと判定します。
- チャートに売買サイン(矢印)を出したいインジケーターのバッファを2本(買い・売り)用意し、描画を DRAW_ARROW にして、サインの足だけ価格を入れます。
- RSI の買われすぎ・売られすぎでサインを出したいRSI を2本分取得し、30 を下から上に戻ったら買いサイン、70 を上から下に戻ったら売りサインと判定します。
- MACD とシグナルのクロスを判定したいMACD のメインライン(バッファ 0)とシグナルライン(バッファ 1)を2本分取得し、上下の入れ替わりを比べます。
- 上位足のトレンド方向を判定したいiMA() などの時間足の引数に PERIOD_H4・PERIOD_D1 などを指定し、上位足の移動平均と価格を比べます。
- 手持ちのインジケーターのサインで売買したいiCustom() でインジケーターを読み込み、矢印が出るバッファの値が 0・EMPTY_VALUE 以外ならサインと判定します。
関連するエラー
MT5 実行時エラーの解説一覧
- 4003
- 4005
- 4006
- 4007
- 4014
- 4022
- 4103
- 4105
- 4106
- 4108
- 4110
- 4112
- 4113
- 4201
- 4202
- 4203
- 4204
- 4205
- 4301
- 4302
- 4303
- 4304
- 4305
- 4401
- 4402
- 4403
- 4404
- 4407
- 4501
- 4502
- 4515
- 4516
- 4517
- 4518
- 4601
- 4602
- 4603
- 4701
- 4751
- 4752
- 4753
- 4754
- 4755
- 4756
- 4758
- 4801
- 4802
- 4804
- 4805
- 4806
- 4807
- 4808
- 4809
- 4810
- 4811
- 4812
- 5001
- 5002
- 5004
- 5007
- 5009
- 5010
- 5019
- 5020
- 5027
- 5035
- 5037
- 5038
- 5039
- 5050
- 5052
- 5053
- 5056
- 5200
- 5201
- 5202
- 5203












