23 10月 2015
23 10月 2015
2015.10.14 14:48:18.486 Data Folder: C:\Program Files\MetaTrader 5 2015.10.14 14:48:18.486 Windows 7 Professional (x64 based PC), IE 11.00, UAC, 8 x Intel Core i7 920 @ 2.67GHz, RAM: 8116 / 12277 Mb, HDD: 534262 / 753865 Mb, GMT+03:00 2015.10.14 14:48:18.486 MetaTrader 5 build 1190 started (MetaQuotes Software Corp.)
struct MqlTick { datetime time; // 価格の最終更新時間 double bid; // 現在のBid価格 double ask; // 現在のAsk価格 double last; // 最終取引の現在価格(Last) ulong volume; // 現在のLast価格の為の容量 long time_msc; // ミリ秒単位での最終価格更新時間 uint flags; // ティックフラッグ };全てのフラッグは、前回のティックと比べデータが変わったかどうかに関わらず、いつも全てのパラメータで埋められます。ティックヒストリーごとに前回の数 値を検索することなく、あらゆる瞬間の現在の価格状態をいつも見ることができます。例えば、ティックと共にBid価格だけ変わることができましたが、構造 体の中では新しい価格の他に、前回のAsk価格、容量など、他のパラメータも表示されます。現在のティックのデータとどう変わったかを知るためには、その フラッグを分析してください。
//+------------------------------------------------------------------+ //| TemplTest.mq5 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| クラステンプレートを指定 | //+------------------------------------------------------------------+ template<typename T> class TArray { protected: T m_data[]; public: bool Append(T item) { int new_size=ArraySize(m_data)+1; int reserve =(new_size/2+15)&~15; //--- if(ArrayResize(m_data,new_size,reserve)!=new_size) return(false); //--- m_data[new_size-1]=item; return(true); } T operator[](int index) { static T invalid_index; //--- if(index<0 || index>=ArraySize(m_data)) return(invalid_index); //--- return(m_data[index]); } }; //+------------------------------------------------------------------+ //| ポインター配列は | //| デストラクタで保存されたオブジェクト、ポインターを削除します。 | //| | //| クラステンプレートのTArrayからの継承にご注意ください。 | //+------------------------------------------------------------------+ template<typename T> class TArrayPtr : public TArray<T *> { public: void ~TArrayPtr() { for(int n=0,count=ArraySize(m_data);n<count;n++) if(CheckPointer(m_data[n])==POINTER_DYNAMIC) delete m_data[n]; } }; //+------------------------------------------------------------------+ //| クラスを指示し、そのオブジェクトへのポインターは配列に保管されます。 | //+------------------------------------------------------------------+ class CFoo { int m_x; public: CFoo(int x):m_x(x) { } int X(void) const { return(m_x); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ TArray<int> ExtIntArray; // TArrayテンプレートをインスタンス化 (int型によってTArrayテンプレートを専門化する) TArray<double> ExtDblArray; // TArrayテンプレートをインスタンス化 (double型によってTArrayテンプレートを専門化する) TArrayPtr<CFoo> ExtPtrArray; // TArrayPtrテンプレートをインスタンス化 (CFoo型によってTArrayPtrテンプレートを専門化する) //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- 配列にデータを入れる for(int i=0;i<10;i++) { int integer=i+10; ExtIntArray.Append(integer); double dbl=i+20.0; ExtDblArray.Append(dbl); CFoo *ptr=new CFoo(i+30); ExtPtrArray.Append(ptr); } //--- 配列の内容を出力 string str="Int:"; for(int i=0;i<10;i++) str+=" "+(string)ExtIntArray[i]; Print(str); str="Dbl:"; for(int i=0;i<10;i++) str+=" "+DoubleToString(ExtDblArray[i],1); Print(str); str="Ptr:"; for(int i=0;i<10;i++) str+=" "+(string)ExtPtrArray[i].X(); Print(str); //--- TArrayPtr<CFoo>のオブジェクトのデストラクタで削除されるので、newを通して作成されたCFooのオブジェクトは削除しなくても良い。 }実行結果:
int ObjectsDeleteAll( long chart_id, // チャートID const string prefix, // オブジェクト名の接頭辞 int sub_window=-1, // ウィンドウインデックス int object_type=-1 // 削除の為のオブジェクトタイプ );
ドキュメントが更新されました。
更新はLiveUpdateシステムを介して利用することができるようになります。