您现在的位置: 比特财富网 >> 财经 >  >> 外匯
EA編程教程大全之數組函數
歡迎訪問 外 匯 邦 WWW.WaiHuiBang.com

使用數組的一組函數。www.emoneybtc.com 
數組的最大維數為四維。

每個維數被索引編為從0 至維度-1。

事實上,第一維數組的50 個,在調用時第一個數組顯示為[0], 最後一個數組顯示為[49]。

使用這些函數(除那些改變定量和定性的數組外)

能夠預定義時間系列

Time[], Open[], High[], Low[], Close[], Volume[]
 
ArrayBsearch  
ArrayCopy  
ArrayCopyRates  
ArrayCopySeries  
ArrayDimension  
ArrayGetAsSeries  
ArrayInitialize  
ArrayIsSeries  
ArrayMaximum  
ArrayMinimum  
ArrayRange  
ArrayResize  
ArraySetAsSeries  
ArraySize  
ArraySort 

 

int ArrayBsearch( double array[], double value, void count, void start, void direction)

如果沒有發現事件,值會返回到第一個維度的數組或者最近的一個數組。

此函數不能用在字符型或連續數字的數組上(除打開柱的連續數組)。

注解: 雙元查找只能夠存儲數。存儲數字數組使用ArraySort() 函數。

參量:

array[]  -  需要搜索的數組.  
value  -  將要搜索的值  
count  -  搜索的數量,默認搜索所有的數組.  
start  -  搜索的開始點,默認從頭開始.  
direction  -  搜索的方向: 
MODE_ASCEND 順序搜索, 
MODE_DESCEND 倒序搜索.  
 
示例:

  datetime daytimes[]; 
  int      shift=10,dayshift; 
  // 全部 Time[] 數組被排列在後面的形式 
  ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1); 
  if(Time[shift]>=daytimes[0]) dayshift=0; 
  else 
    { 
      dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND); 
      if(Period()<PERIOD_D1) dayshift++; 
    } 
  Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ", 
        TimeToStr(daytimes[dayshift])); 
 
 
ArrayCopy  
int ArrayCopy( void dest[], object source[], void start_dest, void start_source, void count)

復制一個數組到另外一個數組。 只有double[], int[], datetime[], color[], 和 bool[] 這些類型的數組可以被復制。

返回復制元素總量。

參量:

dest[]  -  目標數組 。  
source[]  -  源數組 。  
start_dest  -  從目標數組的第幾位開始寫入,默認為0 。  
start_source  -  從源數組的第幾位開始讀取,默認為0 。  
count  -  讀取多少位的數組 。默認值為WHOLE_ARRAY常數。  
 
示例:

  double array1[][6]; 
  double array2[10][6]; 
  // 數組2 被相同數據添滿 
  ArrayCopyRates(array1); 
  ArrayCopy(array2,array1,0,0,60); 
  // 現在數組2 的前10個柱來自歷史(前10個柱包括索引[Bars-1]) 
  ArrayCopy(array2,array1,0,Bars*6-60,60); 
  // 現在數組2 的後10個柱來自歷史(後10個柱包括索引[0]) 
 
 
 
ArrayCopyRates
int ArrayCopyRates( void dest_array[], void symbol, void timeframe)

復制一段走勢圖上的數據到一個二維數組,並返回復制柱總量,如果是-1表示失敗。數組的第二維只有6個項目分別是:

0 - 時間,  
1 - 開盤價格,  
2 - 最低價格,  
3 - 最高價格,  
4 - 收盤價格,  
5 - 成交量.  
 
如果數據(貨幣對名稱/不同於當前的時間周期) 拒絕其他圖表,這種情況下相應的圖表不能夠在客戶端內打開,數據自然會拒絕服務器。這種情況, 錯誤 ERR_HISTORY_WILL_UPDATED (4066 - 拒絕刷新歷史數據) 將被放置到 last_error 變量中,並且將再次拒絕(查看范例ArrayCopySeries()). 
 
注解:此數組通常用於到DLL函數的通過數據。

對於數據數組內存沒有真正的分配,沒有真正地執行復制。當數組訪問時,將會改變方向。

參量:

dest_array[]  -  在二維數組上的雙重目標數組。  
symbol  -  貨幣對名稱  
timeframe  -  時間周期. 可以是列出時間周期的任意值。  
 
示例:

  double array1[][6]; 
  ArrayCopyRates(array1,"EURUSD", PERIOD_H1); 
  Print("當前柱 ",TimeToStr(array1[0][0]),"開盤價格", array1[0][1]);

 

ArrayCopySeries 
int ArrayCopySeries( void array[], int series_index, void symbol, void timeframe)

復制一個系列的走勢圖數據到數組上.

 
對於數據數組內存沒有真正的分配,沒有真正地執行復制。當數組訪問時,將會改變方向。在客戶指標內禁止數組作為 數組下標分配。這種情況下,數組被真正復制。
 
如果數據從不同貨幣對/時間周期圖表復制,數據可能缺乏。這種情況下, 錯誤 ERR_HISTORY_WILL_UPDATED (4066 - 拒絕刷新歷史數據)將被放置到 last_error 變量中,並且在確定的時間周期內將重新嘗試復制。
 
注解: 如果series_index是MODE_TIME, 那麼第一個參量必須是日期型的數組

參量:

array[]  -  目標第一維數字數組。  
series_index  -  連續數組識別符。必須是連續數組列表識別符其中的值。  
symbol  -  當前貨幣對名稱  
timeframe  -  圖表時間周期。可以是 列出時間周期的任意值。  
 
示例:

datetime daytimes[]; 
int      shift=10,dayshift,error; 
//---- 此Time[] 數組被排列在後面的命令 
ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1); 
error=GetLastError(); 
if(error==4066) 
  { 
  //---- 使兩個以上接受只讀 
  for(int i=0;i<2; i++) 
    { 
      Sleep(5000); 
      ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1); 
      //---- 檢查但前每日柱時間 
      datetime last_day=daytimes[0]; 
      if(Year()==TimeYear(last_day) && Month()==TimeMonth(last_day) && Day()==TimeDay(last_day)) break; 
    } 
  } 
if(Time[shift]>=daytimes[0]) dayshift=0; 
else 
  { 
  dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND); 
  if(Period()<PERIOD_D1) dayshift++; 
  } 
Print(TimeToStr(Time[shift])," 相應 ",dayshift," day bar opened at ", TimeToStr(daytimes[dayshift])); 
 
 
ArrayDimension 
int ArrayDimension( object array[])

返回數組的多元維數

參量:

array[]  -  將要返回的數組。
 
示例:

int num_array[10][5]; 
int dim_size; 
dim_size=ArrayDimension(num_array); 
// dim_size=2 
 
 
 
ArrayGetAsSeries 
bool ArrayGetAsSeries( object array[])

返回TRUE,如果數組有組織序列的數組(是否從最後到最開始排序過的),否則返回FALSE。

參量:

array[]  -  需要檢查的數組。  
 
示例:

  if(ArrayGetAsSeries(array1)==true) 
    Print("數組1是作為連續指數被編入索引"); 
  else 
    Print("數組1 正常編入索引(從左到右)"); 
 
 
 
ArrayInitialize 
int ArrayInitialize( void array[], double value)

對數組進行初始化,返回經過初始化的數組項的個數。

注解:在客戶指標中的init()函數不建議使用到初始化緩沖,在這種函數自動初始化"空值"將自動分配和緩沖重新分配。

參量:

array[]  -  需要初始化的數組。  
value  -  新的數組項的值 。  
 
示例:

  //----初始化所有帶有2.1的數組 
  double myarray[10]; 
  ArrayInitialize(myarray,2.1); 
 
 
 
ArrayIsSeries 
bool ArrayIsSeries( object array[])

如果檢查數組是連續的(Time[],Open[],Close[],High[],Low[], or Volume[]), 返回 TRUE,否則返回FALSE。

參量:

array[]  -  需要檢查的數組。
 
示例:

  if(ArrayIsSeries(array1)==false) 
    ArrayInitialize(array1,0); 
  else 
    { 
      Print("連續數組不能被初始化!"); 
      return(-1); 
    } 
 
 
 
 
ArrayMaximum 
int ArrayMaximum( double array[], void count, void start)

找出數組中最大值的定位 。在數組中函數返回最大值位置。

參量:

array[]  -  搜索數字數組。  
count  -  搜索數組中項目的個數。  
start  -  搜索的開始指數。  
 
示例:

double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9}; 
int    maxValueIdx=ArrayMaximum(num_array); 
Print("最大值 = ", num_array[maxValueIdx]);

 

ArrayMinimum 
int ArrayMinimum( double array[], void count, void start)

找出數組中最小值的定位 。在數組中函數返回最小值位置。

參量:

array[]  -  搜索數字數組。  
count  -  搜索數組中項目的個數。  
start  -  搜索的開始指數。  
 
示例:

double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9}; 
int    minValueidx=ArrayMinimum(num_array); 
Print("最小值 = ", num_array[minValueIdx]); 
 
 
 
ArrayRange
int ArrayRange( object array[], int range_index)

取數組中指定維數中項目的數量。 索引以零為基礎,維度的大小要大於最大索引1個點。

參量:

array[]  -  需要檢查的數組。  
range_index  -  指定的維數 。  
 
示例:

int    dim_size; 
double num_array[10,10,10]; 
dim_size=ArrayRange(num_array, 1); 
 
 
 
ArrayResize 
int ArrayResize( void array[], int new_size)

設定第一維度的大小。如果成功執行,在重新設定後返回包含的全部個數。如果數組沒有重設,返回 -1。

注解:在函數完成執行後,在函數內數組地方水平化並且重設將保留不變。 在函數被重新調用後,一些數組將不同於表明的數組。

參量:

array[]  -  需要重設的數組。  
new_size  -  第一維中數組的新大小 。  
 
示例:

double array1[][4]; 
int    element_count=ArrayResize(array1, 20); 
// 新大小 - 80個 
 
 
 
ArraySetAsSeries 
bool ArraySetAsSeries( void array[], bool set)

設定指數數組為系列數組。如果設置參量值為TRUE,數組將被編入索引。數組0位的值是最後的值。其FALSE值設定一個標准的索引命令。此函數返回先前狀態。

參量:

array[]  -  需要設置的數組。  
set  -  索引數組命令。  
 
示例:

double macd_buffer[300]; 
double signal_buffer[300]; 
int    i,limit=ArraySize(macd_buffer); 
ArraySetAsSeries(macd_buffer,true); 
 
for(i=0; i<limit; i++) 
  macd_buffer=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i); 
   
for(i=0; i<limit; i++) 
  signal_buffer=iMAOnArray(macd_buffer,limit,9,0,MODE_SMA,i); 
 
 
 
ArraySize 
int ArraySize( object array[])

返回數組的項目數 。對於第一維數組,用ArraySize函數返回的 ArrayRange(array,0)。

參量:

array[]  -  任何類型數組。
 
示例:

int count=ArraySize(array1); 
for(int i=0; i<count; i++) 
  { 
  // 一些計算. 
  } 
 
 
 
ArraySort 
int ArraySort( void array[], void count, void start, void sort_dir)

對數組進行排序,系列數組不能ArraySort()使用進行排序。

參量:

array[]  -  被排列的數組。  
count  -  對多少個數組項進行排序。  
start  -  排序的開始點。  
sort_dir  -  排序方式,  
MODE_ASCEND順序排列,  
MODE_DESCEND倒序排列。  
 
示例:

  double num_array[5]={4,1,6,3,9}; 
  // 新數組包含值4,1,6,3,9 
  ArraySort(num_array); 
  // 被排列新數組1,3,4,6,9 
  ArraySort(num_array,WHOLE_ARRAY,0,MODE_DESCEND); 
  // 被排列新數組 9,6,4,3,1

歡迎訪問 外 匯 邦 WWW.WaiHuiBang.com
  • 上一个财经:
    • 做短線如何快速看盤

      良好的盤感是投資股票的必備條件,盤感需要訓練,通過訓練,大多數人會進步。如何訓練盤感,可從以下幾個方面進行:一、堅持每天復盤,並按自己的選股

    • 中國原油期貨日交易量

      人民幣原油期貨日交易量強勁,中國又發現儲量達萬億方米的 ...   據上海國際能源交易所的最新數據,目前為止,中國成為全

    • 微信群說的原油期貨是詐騙嗎

      微信上宣傳做原油現貨的是騙子嗎?   肯定的說是的,都是騙局,他們只是業務員並不知道太多,後面的交易所和會員單位才是大騙

    • 淘氣值怎麼增加的快?

      最佳答案: 淘氣值是衡量你最近12個月行為的動態分值,如果想要快速增加淘氣值,你可以:1、增加購買行

    • 蘋果股票代碼是什麼?

      最佳答案: 蘋果公司是一家高科技公司,目前在美股市場納斯達克證券交易所上市,股票代碼為AAPL.O。

      風險提示:比特財富網的各種信息資料僅供參考,不構成任何投資建議,不對任何交易提供任何擔保,亦不構成任何邀約,不作為任何法律文件,投資人據此進行投資交易而產生的後果請自行承擔,本網站不承擔任何責任,理財有風險,投資需謹慎。
    比特財富網 版權所有 © www.emoneybtc.com