MT4自動交易軟體編程(8)- 數組

MT4自動交易軟件編程(8)- 數組

數組函數 [Array Functions]

int ArrayBsearch(double array[], double value, int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND)

搜索一個值在數組中的位置

此函數不能用在字符型或連續數字的數組上.

:: 輸入參數

array[] - 需要搜索的數組

value - 將要搜索的值

count - 搜索的數量,默認搜索所有的數組

start - 搜索的開始點,默認從頭開始

direction - 搜索的方向,MODE_ASCEND 順序搜索 MODE_DESCEND 倒序搜索

示例:

datetime daytimes[];

int shift=10,dayshift;

// All the Time[] timeseries are sorted in descendant mode

ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);

if(Time[shift]&gt>=daytimes[0]) dayshift=0;

else

{

dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);

if(Period()

dayshift++;

}

Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ",

TimeToStr(daytimes[dayshift]));

int ArrayCopy(object& dest[], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY)

複製一個數組到另外一個數組。

只有double[], int[], datetime[], color[], 和 bool[] 這些類型的數組可以被複制。

:: 輸入參數

dest[] - 目標數組

source[] - 源數組

start_dest - 從目標數組的第幾位開始寫入,默認為0

start_source - 從源數組的第幾位開始讀取,默認為0

count - 讀取多少位的數組

示例:

double array1[][6];

double array2[10][6];

// fill array with some data

ArrayCopyRates(array1);

ArrayCopy(array2, array1,0,Bars-9,10);

// now array2 has first 10 bars in the history

int ArrayCopyRates( double& dest_array[], string symbol=NULL, int timeframe=0)

複製一段走勢圖上的數據到一個二維數組,數組的第二維只有6個項目分別是:

0 - 時間,

1 - 開盤價,

2 - 最低價,

3 - 最高價,

4 - 收盤價,

5 - 成交量.

:: 輸入參數

dest_array[] - 目標數組

symbol - 標示,當前所需要的通貨的標示

timeframe - 圖表的時間線

示例:

double array1[][6];

ArrayCopyRates(array1,"EURUSD", PERIOD_H1);

Print("Current bar ",TimeToStr(array1[0][0]),"Open", array1[0][1]);

int ArrayCopySeries( double& array[], int series_index, string symbol=NULL, int timeframe=0)

複製一個系列的走勢圖數據到數組上

注: 如果series_index是MODE_TIME, 那麼第一個參數必須是日期型的數組

:: 輸入參數

dest_array[] - 目標數組

series_index - 想要取的系列的名稱或編號,0-5

symbol - 標示,當前所需要的通貨的標示

timeframe - 圖表的時間線

示例:

datetime daytimes[];

int shift=10,dayshift;

// All the Time[] timeseries are sorted in descendant mode

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()

}

Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ", TimeToStr(daytimes[dayshift]));

int ArrayDimension( int array[])

返回數組的維數

:: 輸入參數

array[] - 需要檢查的數組

示例:

int num_array[10][5];

int dim_size;

dim_size=ArrayDimension(num_array);

// dim_size is 2

bool ArrayGetAsSeries(object array[])

檢查數組是否是有組織序列的數組(是否從最後到最開始排序過的),如果不是返回否

:: 輸入參數

array[] - 需要檢查的數組

示例:

if(ArrayGetAsSeries(array1)==true)

Print("array1 is indexed as a series array");

else

Print("array1 is indexed normally (from left to right)");

int ArrayInitialize( double& array[], double value)

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

:: 輸入參數

array[] - 需要初始化的數組

value - 新的數組項的值

示例:

//---- 把所有數組項的值設置為2.1

double myarray[10];

ArrayInitialize(myarray,2.1);

bool ArrayIsSeries( object array[])

檢查數組是否連續的(time,open,close,high,low, or volume).

:: 輸入參數

array[] - 需要檢查的數組

示例:

if(ArrayIsSeries(array1)==false)

ArrayInitialize(array1,0);

else

{

Print("Series array cannot be initialized!");

return(-1);

}

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

找出數組中最大值的定位

:: 輸入參數

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("Max value = ", num_array[maxValueIdx]);

int ArrayMinimum( double array[], int count=WHOLE_ARRAY, int start=0)

找出數組中最小值的定位

:: 輸入參數

array[] - 需要檢查的數組

count - 搜索數組中項目的個數

start - 搜索的開始點

示例:

double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};

double minValueidx=ArrayMinimum(num_array);

Print("Min value = ", num_array[minValueIdx]);

int ArrayRange( object array[], int range_index)

取數組中指定維數中項目的數量。

:: 輸入參數

array[] - 需要檢查的數組

range_index - 指定的維數

示例:

int dim_size;

double num_array[10,10,10];

dim_size=ArrayRange(num_array, 1);

int ArrayResize( object& array[], int new_size)

重定義數組大小

:: 輸入參數

array[] - 需要檢查的數組

new_size - 第一維中數組的新大小

示例:

double array1[][4];

int element_count=ArrayResize(array, 20);

// 數組中總項目數為80

bool ArraySetAsSeries( double& array[], bool set)

設置指數數組為系列數組,數組0位的值是最後的值。返回之前的數組狀態

:: 輸入參數

array[] - 需要處理的數組

set - 是否是設置為系列數組,true或者false

示例:

double macd_buffer[300];

double signal_buffer[300];

int i,limit=ArraySize(macd_buffer);

ArraySetAsSeries(macd_buffer,true);

for(i=0; i

macd_buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);

for(i=0; i

signal_buffer[i]=iMAOnArray(macd_buffer,limit,9,0,MODE_SMA,i);

int ArraySize( object array[])

返回數組的項目數

:: 輸入參數

array[] - 需要處理的數組

示例:

int count=ArraySize(array1);

for(int i=0; i

{

// do some calculations.

}

int ArraySort( double& array[], int count=WHOLE_ARRAY, int start=0, int sort_dir=MODE_ASCEND)

對數組進行排序,系列數組不可進行排序

:: 輸入參數

array[] - 需要處理的數組

count - 對多少個數組項進行排序

start - 排序的開始點

sort_dir - 排序方式,MODE_ASCEND順序排列 MODE_DESCEND倒序排列

示例:

double num_array[5]={4,1,6,3,9};

// now array contains values 4,1,6,3,9

ArraySort(num_array);

// now array is sorted 1,3,4,6,9

ArraySort(num_array,MODE_DESCEND);

// now array is sorted 9,6,4,3,1

MT4自動交易軟件編程(8)- 數組

微博:


分享到:


相關文章: