無料でロボットをダウンロードする方法を見る
Telegram上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ライブラリ

オブジェクトエミュレータ - MetaTrader 5のためのライブラリ

ビュー:
881
評価:
(38)
パブリッシュ済み:
2016.09.29 11:14
\MQL5\Indicators\ \MQL5\Scripts\ \MQL5\Include\
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

説明

MetaTrader 4 では検証中にエキスパートアドバイザーでオブジェクトを使用することが可能です。オブジェクトを持つチャートは検証の終了時に開かれます。矢印は、エキスパートアドバイザーの操作が便利に実行されることができたが条件がそれを許さなかった場所を観察します。多数の使用例があります。

MetaTrader 4 版と比べ、MetaTrader 5で はオブジェクトの検証での使用が不可能です。この状況は私に合いません。解決してみましょう。

注意事項:

現在、エキスパートアドバイザーは MetaTrader 5 内ではオブジェクトを使用せずに作成されます。 オブジェクトエミュレータはオブジェクトからのデータ取得を可能にしますがそれは推奨されていません。なぜなら、検証プロセスは遅いこともあり、公式の機能からいくつかの違いがあるからです。

検証後のチャート内でのオブジェクト表示のためにのみオブジェクトエミュレータをご使用ください。

設定:

tester.tplテスターテンプレートにObjectEmul_indicator指標を追加します。

行う方法を知らない方のために:

  • 任意の通貨ペアでチャートを開きます。
  • ObjectEmul_indicator指標を付けます。
  • チャートを右クリックします。
  • Templates => Save a template でファイル名として「tester」を指定します。

使用:

「設定」タブの「チャートを開く」ボタンは MetaTrader 5 ストラテジーテスタでは削除されました。検証されているエキスパートアドバイザーが取引操作を実行しなかった場合、チャートh自動的には表示されません。「Back-testing(バックテスト)」への切り替えが必要なので、右クリックして「Open chart(チャートを開く)」を選択します。

使用前には、空のチャート上にObjectEmul_UnitTest_scriptを取り付けて「エキスパート」タブのログで、オブジェクト操作においた公式の機能との違いをお読みください。

エキスパートアドバイザーのメインファイルに下記を追加します。

#include <ObjectEmul.mqh>
CObjectEmul _objs;

標準関数のObject to _objs.Objctの変更は下記のとおりです。

エディタのオブジェクト関数でヘルプを実行するには「Object」の「e」を加えてF1を押します。


EURUSD、H1、MetaQuotes Software Corp.、MetaTrader 5、デモ

//+------------------------------------------------------------------+
//|    オブジェクトエミュレータの使用例                         |
//+------------------------------------------------------------------+
#include <ObjectEmul.mqh>
CObjectEmul _objs;

int ZigZag;
datetime lastbar=0;

double trianglePrice[3];
datetime triangleTime[3];
int triangleIndex=0;

int OnInit()
  {
   ZigZag=iCustom(_Symbol,_Period,"Examples\\ZigZag",5,5,3);
   MathSrand(GetTickCount());
   return(0);
  }

void OnTick()
  {
   datetime time[];
   CopyTime(_Symbol,_Period,0,15,time);
   if(lastbar==time[0]) return;
   lastbar=time[0];

   double zgbuffer[];
   if(CopyBuffer(ZigZag,0,0,15,zgbuffer)==0) {Print("CopyBuffer(ZigZag) Error"); return;}

   bool first=true;
   for(int x=0,count=ArraySize(zgbuffer);x<count && triangleIndex<3;x++)
     {
      // Here is something wrong, but I like the result :)
      if(zgbuffer[x]>0 && first) {first=false; x+=3;}
      else if(zgbuffer[x]>0 && (triangleIndex==0 || trianglePrice[triangleIndex-1]!=zgbuffer[x]))
        {
         trianglePrice[triangleIndex]=zgbuffer[x];
         triangleTime[triangleIndex]=time[x];
         triangleIndex++;
         break;
        }
      else if(zgbuffer[x]>0) break;
     }

   if(triangleIndex<3) return;

   string objname="ObjectEmul_Demo_"+(string)(int)lastbar;

//////////////////////////
// オブジェクトエミュレータ

// 標準Object*() 
   if(_objs.ObjctCreate(0,objname,OBJ_TRIANGLE,0,
      triangleTime[0],trianglePrice[0],triangleTime[1],trianglePrice[1]))
     {
      _objs.ObjctSetInteger(0,objname,OBJPROP_TIME,2,triangleTime[2]);
      _objs.ObjctSetDouble(0,objname,OBJPROP_PRICE,2,trianglePrice[2]);
      _objs.ObjctSetInteger(0,objname,OBJPROP_COLOR,(MathRand()%255)*(MathRand()%255)*(MathRand()%255));

      // インデックスの使用例
      int index=_objs.ObjctFindIndex(0,objname);
      if(index>-1) _objs.ObjctSetIntegerIndex(index,OBJPROP_FILL,0,true);
     }
   else Print("ObjctCreate Error");

// オブジェクトエミュレータ
//////////////////////////

   trianglePrice[0]=trianglePrice[1];
   triangleTime[0]=triangleTime[1];
   trianglePrice[1]=trianglePrice[2];
   triangleTime[1]=triangleTime[2];
   triangleIndex=2;
  }

変数

  • string FileName - ファイル名。デフォルトですが、変更可能です。
  • bool SaveAuto = false - クラスオブジェクトの削除時にオブジェクトをファイルに保存すべきかどうか。デフォルトの「true」値は簡単なテストのためだけです。

関数

グラフィックオブジェクトのすべて Object*() は実装されていてObjct*() と名付けられています。しかしTextSetFont()TextOut()TextGetSize()に類似したものはありません。

  • int Count() - オブジェクト数
  • void ReleaseAll() - すべてのオブジェクトを削除する(ObjctDeleteAllより高速)
  • bool LoadFile(string fname = "", bool print_error = false) - オブジェクトをファイルからダウンロードする
  • bool SaveFile(string fname = "", bool print_error = false) - オブジェクトをファイルに保存する
  • void DrawAll() - すべてのオブジェクトをチャートに描画する

操作の高速化のための Objct*Index() 関数も存在します。

  • int ObjctFindIndex(long chart_id, string name) - ObjctFind() と比べてオブジェクトのシリアル番号を戻す。

オーバーロードのあいまいさを避けるためには、インデックスのためには別々の関数を選択する必要がありました。これらの関数は検索のためにObjctFindIndex()を呼ばないのでオブジェクトは使用のために制御されなければなりません。

ObjctSetInteger(0,"objname",OBJPROP_STYLE,STYLE_DASH) == ObjctSetIntegerIndex(ObjctFindIndex(0,"objname"),OBJPROP_STYLE,STYLE_DASH);

LoadFile()関数はこれらの関数を使用し、Count()関数はすべてのオブジェクトの数を表示します。

確かに実装では解決されなければならない問題がありますが、決心しなければなりません。もちろん、このライブラリの更新にはコミュニティの助けを期待しています。

MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/1583

MinPriceChange MinPriceChange

もみ合い相場の後または潜在的な任意の方向でのブレイクスルーの前にシグナルを形成する価格変化の最小和の指標

RSIOMA RSIOMA

平滑化された価格シリーズに基づいて描かれ追加的なシグナルラインを持つRSI指標

TrendStrength TrendStrength

グローバルな動向を定義する指標。

SmPriceBend-T01 SmPriceBend-T01

最初の価格変更のデリバティブまたは単なる動向速度やサインの指標。