CopyTickVolume

この関数は、指定した数量の選択したシンボルと期間のペアのティックボリュームの履歴データをvolume_arrayに取得します。要素の順序は現在から過去への順序であることに注意してください。つまり、開始位置0は現在のバーを意味します。

CopyTickVolume

要求されたデータ数がターゲット配列の長さより少ない(または多い)場合、関数はメモリを再割り当てしようとするため、まだ未知の量のデータをコピーするとき動的配列をターゲット配列として使用することをお勧めします要求されたデータは完全に適合します。

コピーする必要のあるデータの量がわかっている場合、過剰なメモリの割り当てを防ぐために、静的に割り当てられたバッファに行う方が良いでしょう。

ターゲット配列のプロパティに関係なく-as_series = trueまたはas_series = false。データはコピーされ、最も古い要素がアレイに割り当てられた物理メモリの先頭に配置されます。関数呼び出しには3つのバリアントがあります。

最初の位置と必要な要素の数で呼び出す

int  CopyTickVolume(
   string           symbol_name,      // symbol name
   ENUM_TIMEFRAMES  timeframe,        // period
   int              start_pos,        // start position
   int              count,            // data count to copy
   long             volume_array[]    // target array for tick volumes
   );

開始日と必要な要素の数までに呼び出します

int  CopyTickVolume(
   string           symbol_name,      // symbol name
   ENUM_TIMEFRAMES  timeframe,        // period
   datetime         start_time,       // start date and time
   int              count,            // data count to copy
   long             volume_array[]    // target array for tick volumes
   );

必要な時間間隔の開始日と終了日までに呼び出します

int  CopyTickVolume(
   string           symbol_name,      // symbol name
   ENUM_TIMEFRAMES  timeframe,        // period
   datetime         start_time,       // start date and time
   datetime         stop_time,        // stop date and time
   long             volume_array[]    // target array for tick volumes
   );

パラメーター

symbol_name

[in]シンボル名。

時間枠

[in]期間。

start_pos

[入力]コピーする最初の要素の開始位置。

カウント

[in]コピーするデータ数。

始まる時間

[入力]コピーする最初の要素の開始時間。

停止時間

[in]コピーする最後の要素に対応するバータイム。

volume_array []

[out] long型の配列 。

戻り値

コピーされたデータ数を返します。エラーの場合は-1を返します。

注意

要求されたデータの間隔全体がサーバー上の使用可能なデータを超えている場合、関数は-1を返します。TERMINAL_MAXBARS(チャート上のバーの最大数)外のデータが要求された場合、関数は-1を返します。

要求された時系列がまだ構築されていない場合、またはサーバーからダウンロードする必要がある場合、関数はすぐに-1を返します。

開始日と必要な要素の数でデータを要求する場合、指定された日付よりも小さい(早い)または等しい日付のデータのみが返されます。つまり、値が返されるバーのオープン時間(ボリューム、スプレッド、インディケーターバッファーの値、オープン、ハイ、ロー、クローズまたはオープンタイムの価格)は常に指定された時間以下です。

指定された日付範囲のデータを要求すると、この間隔のデータのみが返されます。間隔が設定され、数秒までカウントされます。つまり、値が返されるバーのオープン時間(ボリューム、スプレッド、インディケーターバッファーの値、オープン、ハイ、ロー、クローズ、またはオープンタイムの価格)は常に要求された間隔内にあります。

このように、現在の日は土曜日は、指定週間のタイムフレームにデータをコピーしようとする試みである場合に=がLast_Tuesdayのstart_time STOP_TIME = Last_Friday 週間の時間枠のオープン時間は、常に日曜日であるため、関数は、0を返しますが、1週間バーはありません指定された間隔に該当しません。

現在の未完了のバーに対応する値を返す必要がある場合は、start_pos = 0およびcount = 1を指定する最初の形式の呼び出しを使用できます

例:

#property strict
#property indicator_separate_window
#property indicator_buffers 1
//—- plot TickVolume
#property indicator_label1  “TickVolume”
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  C’143,188,139′
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//— input parameters
input int      bars=3000;
//— indicator buffers
double         TickVolumeBuffer[];
//+——————————————————————+
//| Custom indicator initialization function                         |
//+——————————————————————+
void OnInit()
  {
//— indicator buffers mapping
   SetIndexBuffer(0,TickVolumeBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//—
  }
//+——————————————————————+
//| 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(prev_calculated==0)
     {
      long timeseries[];
      ArraySetAsSeries(timeseries,true);
      int copied=CopyTickVolume(Symbol(),0,0,bars,timeseries);
      for(int i=rates_total-copied-1;i>copied-1;i–) TickVolumeBuffer[i]=0.0;
      for(int i=0;i<copied;i++) TickVolumeBuffer[i]=(double)timeseries[i];
      Print(“We have received the following number of TickVolume values: “+(string)copied);
     }
   else
     {
      long timeseries[];
      int copied=CopyTickVolume(Symbol(),0,0,1,timeseries);
      TickVolumeBuffer[0]=(double)timeseries[0];
     }
//— return value of prev_calculated for next call
   return(rates_total);
  }

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">