MQL4入門者です。
インジ作成の練習をしています。
練習として、以下のコードをチャートで実行したところエラーになりました。
●GetLastError()関数で取得したエラー内容は、「4200」で ERR_OBJECT_ALREADY_EXISTS(オブジェクトが既に存在しています)というものです。
エラーの意味を知る参考にしたページhttps://yukifx.web.fc2.com/sub/reference/02_stdconstans/error/error_runtime.html
●質問
すでにオブジェクトが表示されている(たとえば現在から20分前の足に矢印が一つ)けれども、さらにオブジェクトを表示する(たとえば、現在から10分前の足に矢印をさらにもう一つ)方法をお教えください。
※例えば20分前に(Close[2]>Close[1])が起きたらその場所に。10分前に同じく(Close[2]>Close[1])が起きたらその場所に表示してほしいだけです。まったく同じ場所に表示しようとしているのであれば「オブジェクトが既に存在しています」というエラーもわかるのですが、そうではないのにこういうエラーが起きるのはなぜだろう・・。
※追記
調べていると、インジケーターバッファ?というものが関係していそうな気がしてきました。
※追記 6/29
オブジェクトの名前が同じだから、2つ目以降が「すでにある」と認識されるのかなと思い
オブジェクト名にTimeLocal()を入れて試しました。(string型に変換)
datetime now = TimeLocal();
Print(TimeToString(now, TIME_DATE));
{ObjectCreate(ChartID(), now, OBJ_ARROW_BUY, 0, x1, y1);}
が、結果は変わりません(オブジェクトが初めの1つしか表示されない)でした。
#property copyright "" #property link "" #property version "1.00" #property strict #property indicator_chart_window // 1本前のローソク足 datetime x1 = Time[1]; // 1本前の終値 double y1 = Close[1]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(Close[2]>Close[1]) // 2本前の終値<1本前の終値ならば {ObjectCreate(ChartID(), "BUY", OBJ_ARROW_BUY, 0, x1, y1);} // 1本前のローソク足に矢印を表示 return(rates_total); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。