インディケータ: ID Lite Info MA

 

ID Lite Info MA:

この指標は移動平均(MA)の値、MAの間の差と値の間の差を示します。

3桁のチャートでの、指標線、高値と安値のマーク、及び高値と安値の差が四捨五入された小数点以下2桁の数字

作者: Dina Paches

 

このインジケーターが機能しない場合このインジケーターを含むファイルをコンパイルする際、お使いの取引ターミナルのMetaEditorに このようなエラーメッセージが表示されます(例えば、MetaTrader 5の1150番目の ビルド用にコンパイルする場合など):



このインディケータをコンパイルして実行するには

1. この関数をコピーし、インジケーターコードの最後に追加します:

//+------------------------------------------------------------------+
//| オブジェクト名の共通接頭辞によるオブジェクトの削除||」。
||(必要であれば、オブジェクトのタイプも):|
//| 2014年(最終更新:2015.07.14), ディナ・パチェス||Dina Paches|ディナ・パチェス
//|https://login.mql5.com/ru/users/dipach |
//+------------------------------------------------------------------+
//| string prefix_obj = オブジェクト名に共通する接頭辞。
//| long chart_ID = チャート識別子 
//| int sub_window=-1 = ウィンドウ・インデックス|
//| int type=-1 = オブジェクト型(または、intの代わりにオブジェクト型) |.
|列挙 ENUM_OBJECT)|
//| int start_pos=-1 = 共通プレフィックス部分文字列の開始位置。
//| オブジェクトの名前|
//+------------------------------------------------------------------+
void ObDeleteN(string prefix_obj,int chart_ID=0,int sub_window=-1,
               int type=-1,int start_pos=0)
  {
   int quantObj=ObjectsTotal(chart_ID,sub_window,type);
   if(quantObj>0)
     {
      int count=0;
      int prefixLen=StringLen(prefix_obj);
      string name[];
      ArrayResize(name,quantObj,quantObj+1);
      ArraySetAsSeries(name,true);

      for(int i=quantObj;i>=0;i--)
        {
         string objNameX=ObjectName(chart_ID,i,sub_window,type);
         string findValue=StringSubstr(objNameX,start_pos,prefixLen);

         if(StringCompare(findValue,prefix_obj,true)==0)
           {
            count=count+1;
            name[count-1]=objNameX;
           }
        }
      if(count>0)
        {
         ArrayResize(name,count,count+1);
         for(int i=count-1;i>=0; i--)
           {
            ObjectDelete(chart_ID,name[i]);
           }
        }
     }
     else return;
  }
//+------------------------------------------------------------------+


2. コードのOnDeinit()OnChartEvent() セクションで、この行の直前にダブルスラッシュ "//" を入れます:

 ObjectsDeleteAll(0,prefixObj,0,-1);


3. 3. この行をコピーして、インジケータのコードに追加する(上の行の下に追加し、上の行はコード内で 2 回出現するので、この行を 2 箇所に追加する):

ObDeleteN(prefixObj,0,0);


4. その結果、例えばビルド 1150 では、関数バリアントが機能しないコードセクションは、コード上では次のようになります:


   //ObjectsDeleteAll(0,prefixObj,0,-1);
   ObDeleteN(prefixObj,0,0);


5. その後、コードをコンパイルしてください。エラーメッセージは消え、インジケータはMetaTrader5のビルド1150のチャートで動作するようになります。


P./S.: ご不明な点がございましたら、こちらのディスカッションまたはプライベート・メッセージにお書きください。

 
P./S: 上の投稿にあるオブジェクトの削除機能を、もう少し多機能で、もう少し手間を省くオプションに置き換えた。
 

うう...魂から石が落ちたみたいだ。今回は幸いなことに、"He who seek will always find" (c)が効いた。

結局、上の関数バリアントのプロトタイプを見つけた。

教科書の 著者であるコヴァリョフ、アルチョム、そして7777877という 私の知らない名前に、詳細なスキームをありがとうと 言いたい。


追伸: 一時期、この関数のプロトタイプを自分で解析し、その意味を理解し、実験を行っていたとき、MQL4からそのソースを保存していなかった(わざとではない!)。私はこれまで、この関数(あるいはそのほかの亜種)のコードを公開したことはない。

非常に不運な偶然が重なって、サイト上の作品に出くわしたり、検索がうまくいかなかったり(あるいは、今になって気がついたことだが、私の検索が間違っていたのかもしれない)した。特に、このスキームに関する情報をフォーラムで見たことを思い出しながら、教科書のことは思い出さなかった。従って、「後で」と後回しにした。

だから、他の人の仕事に敬意を払い、可能であれば、どこから、誰から、何を得たのか、すぐに情報をコピーするようにしている。

だから、外部からのヒントや注意喚起なしに、この機能の一次資料=プロトタイプを自分で見つけられたことを心から喜んでいる。

 
私にとっては暗い森ですが、とても必要なのです!自分では手に入りません。もし難しくなければ、mt5用にコンパイルされたファイルをお願いします!
 
Siarhei Pekar:
私にとっては暗い森ですが、とても必要なのです!自分では手に入りません。もし難しくなければ、mt5用にコンパイルされたファイルをお願いします!

Kodobaseのインジケータのバージョンは、すでに行われた変更とともにバージョン1.01に変更され、現在はこのインジケータのページから直接ダウンロードできるようになっています。

 
Siarhei Pekar:

コードを置き換えることを考えている間に、何とか説明を削除することができた:

ObjectsDeleteAll() 関数は、バージョン1.01で名前の接頭辞でオブジェクトを削除する別の関数に置き換えられましたが、その方が動作が速く、コードのパフォーマンス向上に貢献します。

したがって、1150番目のビルド(ObjectsDeleteAll()関数の名前の接頭辞でオブジェクトを削除する機能がまだドキュメントで修正されていない時にリリースされた)から別のビルドに正式に移行した後は、インジケータコードのバージョンをObjectsDeleteAll()を 使用するものに変更する方が良いでしょう:


 

このインジケータのコードを更新しました。チャート上のインジケータの ライン表示のオン/オフの切り替えのエラーを修正しました。

現在のバージョン:1.39

 

MT5(バージョン1.39)用のこのインジケーターのコードに、MT4用のこのインジケーターのコードにあるような、prev_calculated=0における値の再計算を追加していないことがわかりました。つまり、バージョン1.39で 動作する場合、prev_calculated=0においてゼロ値がインジケータテーブルに表示される状況が発生する可能性があります。

申し訳ありません。

新しいバージョン(1.42)を公開しました。

CodeBaseのモデレーターは多忙で、アップデートがすぐに公開されないかもしれませんので、とりあえず修正版をここに添付しておきます。

 

CodeBaseのモデレーターに感謝します。

今日の午後、コードをバージョン1.42に 更新しました。

追記:添付ファイルを削除しました。

 

昨日、バージョン1.45への アップデートがリリースされました。

主な内容:チャートからインディケータを削除する機能を入れ替えました。