久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

量化投資

 taozl 2022-09-23 發(fā)布于安徽

第五章:數(shù)組

第一節(jié):認(rèn)識(shí)數(shù)組

   數(shù)組指的是具有一定長度的數(shù)據(jù)集合,,在MC中常用的數(shù)組包括一維數(shù)組和二維數(shù)組(太高維度實(shí)用性不大,,邏輯一樣,這里只舉例一維數(shù)組和二維數(shù)組),。所謂一維數(shù)組我們可以理解為一組數(shù)據(jù),,按照順序放置在一定的容器中,所謂二維數(shù)組我們可以理解為一個(gè)二維的表格,,如圖:

   因此,,數(shù)組與我們前面認(rèn)識(shí)的bar數(shù)據(jù)最本質(zhì)的不同在于,他是一組數(shù)據(jù)集合,。另外我們還可以理解為,,一個(gè)bar數(shù)據(jù),或者一個(gè)K線的bar上面的值都是確定,、或者說是單一的數(shù)據(jù),。數(shù)組可以在一個(gè)單一的bar上面存儲(chǔ)我們想要的一組數(shù)據(jù),并且方便用于計(jì)算和統(tǒng)計(jì),。

第二節(jié):索引,、維度、元素

2.1 索引

  如果我們已經(jīng)定義好了一個(gè)數(shù)組后,,想要查看數(shù)組中某一個(gè)/多個(gè)位置中的數(shù)值,、修改某一個(gè)/多個(gè)位置的數(shù)值,我們必須要采取索引的形式,。所謂索引就是對數(shù)組每一個(gè)位置進(jìn)行編號(hào),,就像班級點(diǎn)名一樣。一維數(shù)組的點(diǎn)名就是從左向右的定義方式,;但是二維數(shù)組的點(diǎn)名,,需要有兩個(gè)索引值進(jìn)行定位,如下圖:

   如上圖一維數(shù)組,,如果想找到3個(gè)數(shù)值的位置,,它的編號(hào)就是2,以此類推,,要找到5的這個(gè)數(shù)值,,編號(hào)就是4。

   如上圖二維數(shù)組,,如果想找到綠色高亮的5,,我們要從橫向索引找到1,豎向索引找到5,。

2.2 維度

  維度是一個(gè)很好理解的概念,,這里略。

2.3 元素

  前面都用里面的數(shù)值來說,,在數(shù)組當(dāng)中,,每一個(gè)的值我們統(tǒng)一換一個(gè)名詞,叫做元素,。有多少個(gè)元素就叫多少個(gè)元素的個(gè)數(shù),。在MC中,,元素的類型共有三種基本數(shù)據(jù)類型:數(shù)值型、布爾型,、字符串型,分別也是對應(yīng)前面提到的數(shù)據(jù)類型,,這是一致的,。

第三節(jié):定義靜態(tài)一維數(shù)組和靜態(tài)二維數(shù)組

  前面的知識(shí)是解釋數(shù)組,下面是需要我們手動(dòng)創(chuàng)建數(shù)組,。

  所謂創(chuàng)建靜態(tài)數(shù)組就是在聲明時(shí),,已經(jīng)規(guī)定好了數(shù)組的“尺寸”或者說“維度”。

# 示例1創(chuàng)建一個(gè)一維數(shù)組

復(fù)制代碼
array:arr[4](0);

cleardebug;

print(array_getmaxindex(arr));
print(arr[0]);
print(arr[1]);
print(arr[2]);
print(arr[4]);
#//返回值:

4.00
0.00
0.00
0.00
0.00

復(fù)制代碼

# 說明:我們看到生命時(shí)采用的是array:/arrays:這樣的方式來聲明數(shù)組,。其中需要包括方括號(hào)和圓括號(hào)([] ()),,其中方括號(hào)里面需要填寫的就是數(shù)組的最大索引值(也就是允許的最大索引是什么),圓括號(hào)是默認(rèn)數(shù)組每個(gè)元素的初始值是什么,。這樣就創(chuàng)建了一個(gè)靜態(tài)的一維數(shù)組,。其中array_getmaxindex是獲取數(shù)組的最大索引函數(shù),后面會(huì)總結(jié)這些內(nèi)容,。這里特別說明的是:數(shù)組的最大索引是從0開始計(jì)數(shù)的,,而不是從1開始

# 示例2:當(dāng)然我們還可以創(chuàng)建布爾型的一維數(shù)組和字符串的一維數(shù)組

復(fù)制代碼
array:arr[4](False);

cleardebug;

print(array_getmaxindex(arr));
print(arr[0]);
print(arr[1]);
print(arr[2]);
print(arr[4]);//返回值:
   4.00FALSE
FALSE
FALSE
FALSE

array:arr[4]('Hello World');

cleardebug;

print(array_getmaxindex(arr));
print(arr[0]);
print(arr[1]);
print(arr[2]);
print(arr[4]);//返回值:
   4.00Hello World
Hello World
Hello World
Hello World
復(fù)制代碼

# 示例3:我們再次創(chuàng)建一個(gè)二維數(shù)組

復(fù)制代碼
array:arr[1,1](0);

cleardebug;//print(array_getmaxindex(arr));print(arr[0,0]);
print(arr[0,1]);
print(arr[1,0]);
print(arr[1,1]);
復(fù)制代碼

# 說明:與一維數(shù)組不一樣的是,,二維數(shù)組在聲明時(shí)需要用逗號(hào)分隔,,分別定義橫向和豎向的最大索引值,。另外,數(shù)組的查找和聲明數(shù)組最大索引的方式一樣,,也是通過方括號(hào)進(jìn)行訪問和修改。

第四節(jié):修改值和快速賦值

4.1 修改值:

  在初始化之后,,想要修改值,也是通過索引的方式進(jìn)行修改,。

# 示例1:修改0,1這個(gè)位置元素的值

復(fù)制代碼
array:arr[1,1](0);//cleardebug;//print(array_getmaxindex(arr));print(arr[0,0]);
print(arr[0,1]);
print(arr[1,0]);
print(arr[1,1]);

arr[0,1] = 100;

print(arr[0,0]);
print(arr[0,1]);
print(arr[1,0]);
print(arr[1,1]);//返回值
   0.00
   0.00
   0.00
   0.00
   0.00

 100.00
   0.00
   0.00
   0.00
復(fù)制代碼

4.2 快速賦值

  手動(dòng)敲值不太實(shí)際,如果我們像保存最近5個(gè)bar的close價(jià)格,??焖儋x值用的最多的方式就是用循環(huán)。

# 示例1:通過循環(huán)賦值

復(fù)制代碼
array:arr[4](0);for value1 = array_getmaxindex(arr) downto 0begin
        arr[array_getmaxindex(arr)-value1] = Close[value1];
    end;
    

print('========');for value2 = 0 to array_getmaxindex(arr)
    begin
        print(arr[value2]);
    end;//返回值:========5296.005278.005253.005274.005274.00
復(fù)制代碼

 第五節(jié):數(shù)組的全局性

   數(shù)組的運(yùn)算也是tick by tick(逐筆)的方式進(jìn)行的,。就是一個(gè)新的tick進(jìn)來時(shí),,數(shù)組會(huì)重新運(yùn)算一次,。說到全局性是MC對于數(shù)值的一個(gè)默認(rèn)設(shè)置。前面提到過完成bar的問題,,如果一個(gè)bar完成了,新的bar來到,,那么在上一個(gè)完成bar計(jì)算的數(shù)組,在新的這個(gè)bar數(shù)值是不是還存在,。比如像TBQuant(交易開拓者Quant版本)中存在全局變量和非全局變量這么一說(當(dāng)然數(shù)組也是一個(gè)變量),,也就是說,新的bar來到,,如果是非全局變量的話,,上一個(gè)bar的數(shù)組值會(huì)全部清空,重新計(jì)算,,也就是在新的bar里面是無法取到上一個(gè)bar已經(jīng)計(jì)算好的數(shù)組值,。因此在TBQuant在聲明數(shù)組時(shí),在前面需要加上global全局聲明的字段,。但是在MC中就不會(huì)存在這么一個(gè)問題,,因?yàn)閿?shù)組在MC中全部都是全局的。為了應(yīng)征這么一個(gè)問題,,我們用once語句,,一次初始化運(yùn)行計(jì)算一個(gè)數(shù)組,然后在動(dòng)態(tài)過程每一個(gè)bar和逐筆的狀態(tài)觀察,,這些數(shù)組中的數(shù)值是否還存在,。

# 示例

復(fù)制代碼
array:arr[4](0);

once beginfor value1 = array_getmaxindex(arr) downto 0begin
        arr[array_getmaxindex(arr)-value1] = Close[value1];
    end;
end;
    

print('========');for value2 = 0 to array_getmaxindex(arr)
    begin
        print('time:=',Time,'===',arr[value2]);
    end;//返回值:========time:=2200.00===5160.00time:=2200.00===5163.00time:=2200.00===5170.00time:=2200.00===5174.00time:=2200.00===5168.00========time:=2300.00===5160.00time:=2300.00===5163.00time:=2300.00===5170.00time:=2300.00===5174.00time:=2300.00===5168.00========time:=1000.00===5160.00time:=1000.00===5163.00time:=1000.00===5170.00time:=1000.00===5174.00......后面略
復(fù)制代碼

 # 說明:通過這個(gè)實(shí)驗(yàn)表明,在加載圖表時(shí),,用once做一次初始化的操作,,只取需要開始的5個(gè)bar的收盤價(jià)存入數(shù)組,后面再不進(jìn)行修改,,此時(shí)逐筆和后面新的bar都會(huì)取到前面時(shí)刻的數(shù)組值,。也就是手在MC中數(shù)組是全局性的。這一點(diǎn)雖然對于初學(xué)者來說并不重要,,但是這里要特別說明一下,。

第六節(jié):動(dòng)態(tài)數(shù)組

  第四節(jié)說到在聲明的時(shí)候指定數(shù)組的長度,也就是在方括號(hào)[]當(dāng)中定義數(shù)組的最大索引值,。其實(shí)也可以根據(jù)實(shí)際的生產(chǎn)需要,,動(dòng)態(tài)定義數(shù)組的大小。此時(shí)就會(huì)用到數(shù)組函數(shù)Array_SetMaxindex,(與Array_GetMaxindex對應(yīng)為獲取最大索引值)后面有兩個(gè)參數(shù),,分別是數(shù)組名稱,,和最大索引值,,但是可惜的是,在MC中,,這個(gè)函數(shù)只能默認(rèn)定義一維數(shù)組,,對于二維數(shù)組的操作無能為力。

  如果需要定義動(dòng)態(tài)的數(shù)組,,此時(shí)在方括號(hào)中的最大索引值就無需填寫

# 示例1:定義動(dòng)態(tài)數(shù)組的最大索引值

array:arr[](0);

array_setmaxindex(arr,4);

print(array_getmaxindex(arr));

 # 示例2:動(dòng)態(tài)調(diào)整數(shù)組的最大索引值,,這里設(shè)置兩個(gè)bar的時(shí)間如果不一致,對數(shù)組動(dòng)態(tài)調(diào)整最大索引值

復(fù)制代碼
array:arr[](0);var:value1(0);

print('=======');if Time<>Time[1] then value1 = value1 + 1;

array_setmaxindex(arr,value1);

print(array_getmaxindex(arr));
//返回值:

=======
0.00
=======
=======
1.00
=======
2.00
=======
3.00
=======
4.00
=======
5.00
=======
6.00
=======
7.00
=======
8.00
=======
9.00
=======

.....略

復(fù)制代碼

問題:這里有一個(gè)提問,,如果按照示例2所示,,我們動(dòng)態(tài)調(diào)整數(shù)組的話,那其他的值會(huì)不會(huì)改變,?我們做下面這個(gè)實(shí)驗(yàn):

# 示例3:對動(dòng)態(tài)數(shù)組進(jìn)行遞減定義最大索引的方式

復(fù)制代碼
array:arr[](0);var:value1(5);

print('=======');

once begin
    array_setmaxindex(arr,4);
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    arr[3] = 4;
    arr[4] = 5;
end;if Time<>Time[1] then value1 = value1 - 1;if value1 > -1 then array_setmaxindex(arr,value1);

print('array length = ',array_getmaxindex(arr));if array_getmaxindex(arr) <> 0 then
    begin    for value2 = 0 to array_getmaxindex(arr)
        begin
            print(arr[value2]);
        end;
    end;//返回值:array length =    4.00
   1.00
   2.00
   3.00
   4.00
   5.00=======array length =    3.00
   1.00
   2.00
   3.00
   4.00=======array length =    2.00
   1.00
   2.00
   3.00=======array length =    1.00
   1.00
   2.00=======array length =    0.00
復(fù)制代碼

# 說明:我們驚奇的發(fā)現(xiàn),,雖然我們改變了數(shù)組的長度,但是之前的值還是存在的,,因此證明了:數(shù)組是具有全局性,,且數(shù)組當(dāng)中的元素也是具有全局性的!這一點(diǎn)是非常重要的,。

第七節(jié):數(shù)組的函數(shù)

  說在前面:前面一直提到了函數(shù)這個(gè)概念,,所謂函數(shù)可以理解為不需要人為的去手工寫代碼,我們可以事先寫好組合起來,,或者M(jìn)C提供給我們的一些寫好的代碼,,我們可以直接使用,而不需要重復(fù)每次再寫的東西,,后面的章節(jié)會(huì)詳細(xì)的講解函數(shù)這個(gè)概念,。

  數(shù)組的函數(shù)大多是動(dòng)態(tài)數(shù)組的函數(shù)。前面見過了兩個(gè)分別是Array_SetMaxindex和Array_GetMaxindex,。后面這兩個(gè)就不在舉例了,。

7.1 Array_Compare

# 語法

復(fù)制代碼
Array_Compare(源數(shù)組,源索引,目標(biāo)數(shù)組,目標(biāo)索引,元素個(gè)
數(shù))
參數(shù):
源數(shù)組——要比較的第一個(gè)數(shù)組
源索引——數(shù)值表達(dá)式,指定數(shù)組 1 的開始索引值
目標(biāo)數(shù)組——要比較的第二個(gè)數(shù)組
目標(biāo)索引——數(shù)值表達(dá)式,,指定數(shù)組 2 的開始索引值
元素個(gè)數(shù)——數(shù)值表達(dá)式,,要比較的元素個(gè)數(shù)
索引從 0 開始計(jì)數(shù)

返回:0——比較的每組元素完全相同;1——源數(shù)組的元素大于目標(biāo)數(shù)組,;-1——源數(shù)組的元素小于目標(biāo)數(shù)組,。
復(fù)制代碼

# 示例

復(fù)制代碼
比較數(shù)組元素 Array1[3]和 Array2[2]的大小,以及 Array1[4]
和 Array2[3]的大?。?Array:Array1[4](0),Array2[6](0);for Value1=0 to 4 begin Array1[Value1]=Value1*2; end;for value2=0 to 6 begin Array2[value2]=value2*3; end;

Value3=Array_Compare(Array1,3,Array2,2,2);
由上可知 Array1[3]= Array2[2]且 Array1[4]< Array2[3],,則
Value3=-1若 Array1 為{false, false, false, false, false, false, true, false},
Array2 為{false, false, false, false, false, false, true, false},則
Value3=0若 Array1 為{a,b,c,d,e,f,g,h},,Array2 為{a,b,c,d,e,f,g,h},,則
Value3=1
復(fù)制代碼

# 說明

比較源數(shù)組和目標(biāo)數(shù)組中的指定起始位置及指定數(shù)量的元 素是否相同 源數(shù)組和目標(biāo)數(shù)組可以是相同或不同的一維數(shù)組。 若比較的數(shù)組為數(shù)值數(shù)組,,會(huì)比較每組元素的數(shù)值大小,。 若比較的數(shù)組為字符串?dāng)?shù)組,會(huì)比較每組元素的 ASCII 值的 大小,。 若比較的數(shù)組為布林?jǐn)?shù)組,,會(huì)比較每組元素的布林值是否相 同,若不相同時(shí),,真(true)大于假(false),。

7.2 Array_Copy

# 語法

復(fù)制代碼
Array_Copy(源數(shù)組,來源索引,目標(biāo)數(shù)組,目標(biāo)索引,元素個(gè)數(shù))

參數(shù)
源數(shù)組——要復(fù)制的源數(shù)組
源索引——數(shù)值表達(dá)式,指定源數(shù)組的索引值
目標(biāo)數(shù)組——要復(fù)制的目標(biāo)數(shù)組
目標(biāo)索引——數(shù)值表達(dá)式,,指定目標(biāo)數(shù)組的索引值
元素個(gè)數(shù)——數(shù)值表達(dá)式,要比較的元素個(gè)數(shù)
復(fù)制代碼

# 示例

復(fù)制 Array1 索引 4 開始的 2 個(gè)元素至 Array2 索引 6 開始的 2個(gè)元素位置:
Array_Copy(Array1,4,Array2,6,2);
復(fù)制 Array1 索引 4 開始的 2 個(gè)元素至索引 6 開始的 2 個(gè)元
素位置:
Array_Copy(Array1,4,Array1,6,2);

# 說明

復(fù)制源數(shù)組中的指定起始位置及數(shù)量的元素至目標(biāo)數(shù)組指 定的起始位置,。 源數(shù)組和目標(biāo)數(shù)組可以是相同或不同的一維數(shù)組,。

7.3 Array_GetType

# 語法

語法 Array_GetType(數(shù)組名稱)
參數(shù) 數(shù)組名稱——要查詢的數(shù)組名稱
返回值2——布林型數(shù)組3——字符串型數(shù)組7——數(shù)值型數(shù)組

# 示例

復(fù)制代碼
查詢 Array1 的類型,并將結(jié)果存入變量 Value1:
Array: Array1[10](false);
Value1=Array_GetType(Array1);
則 Value1=2Array: Array1[10](“”);
Value1=Array_GetType(Array1)
則 Value1=3Array: Array1[10](0);
Value1=Array_
復(fù)制代碼

# 說明

  取得數(shù)組的類型,。

7.4 Array_SetValRange

# 語法

復(fù)制代碼
Array_SetValRange(數(shù)組名稱, 起始索引,結(jié)束索引,數(shù)值)
參數(shù)
數(shù)組名稱——要賦值的數(shù)組名稱
起始索引——數(shù)值表達(dá)式,,指定數(shù)組賦值范圍的開始索引
值
結(jié)束索引——數(shù)值表達(dá)式,指定數(shù)組賦值范圍的結(jié)束索引
值
數(shù)值——數(shù)值表達(dá)式,、字符串表達(dá)式或布林表達(dá)式,,數(shù)組
元素要設(shè)定的值。數(shù)值的類型要和數(shù)組定義類型一致,。
復(fù)制代碼

# 示例

復(fù)制代碼
重新賦值 Array1 索引 4 至索引 6 的元素:
Array_SetValRange(Array1,4,6,0);
若數(shù)組為{1,2,3,4,5,6,7,8},,則賦值后數(shù)組為{1,2,3,4,0,0,0,8}
Array_SetValRange(Array1,4,6,True);
若數(shù)組為{false, false, false, false, false, false, true, false},則
賦值后數(shù)組為{false, false, false, false, true, true, true, false}
Array_SetValRange(Array1,4,6,”a”);
若數(shù)組為{a,b,c,d,e,f,g,h},,則賦值后數(shù)組為{a,b,c,d,a,a,a,h}
復(fù)制代碼

# 說明

  同時(shí)為數(shù)組指定范圍的元素賦值

7.5 Array_Sort

# 語法

復(fù)制代碼
Array_Sort(數(shù)組名稱, 起始索引, 結(jié)束索引, 排序方式)
參數(shù)
數(shù)組名稱——要排序的數(shù)組名稱
起始索引——數(shù)值表達(dá)式,,指定數(shù)組排序范圍的開始索引值
結(jié)束索引——數(shù)值表達(dá)式,指定數(shù)組排序范圍的結(jié)束索引值
排序方式——布林表達(dá)式,,指定數(shù)組的排序方式,,True 為
遞增,F(xiàn)alse 為遞減
復(fù)制代碼

# 示例

重新排序 Array1 索引 4 至索引 6 的元素:
Array_Sort(Array1,4,6,false),;
若數(shù)組為{1,2,3,4,5,6,7,8},,則賦值后數(shù)組為{1,2,3,4,7,6,5,8}
若數(shù)組為{false, false, false, false, false, false, true, false},則
賦值后數(shù)組為{false, false, false, false, true, false, false, false}
若數(shù)組為{a,b,c,d,e,f,g,h},,則賦值后數(shù)組為{a,b,c,d,g,f,e,h}

# 說明

  重新排序數(shù)組中的指定范圍數(shù)值,,若數(shù)值數(shù)組依據(jù)數(shù)值大小排序,若為布爾數(shù)組,依據(jù)True=1,,F(xiàn)alse=0的大小排序,,若為字符串?dāng)?shù)組,依據(jù)ASCII碼的值進(jìn)行排序

7.6 Array_Sum

# 語法

Array_Sum(數(shù)組名稱,起始索引,結(jié)束索引)
參數(shù)
數(shù)組名稱——要加總的數(shù)組名稱
起始索引——數(shù)值表達(dá)式,,指定數(shù)組加總范圍的開始索引值
結(jié)束索引——數(shù)值表達(dá)式,,指定數(shù)組加總范圍的結(jié)束索引值

# 示例

加總 Array1 索引 4 至索引 6 的元素,并將結(jié)果存入變數(shù)
Value1:
Value1=Array_Sum(Array1,4,6);
若數(shù)組為{1,2,3,4,5,6,7,8},,則 Value1=18

# 說明

  返回?cái)?shù)值數(shù)組中之指定范圍額數(shù)值總和

7.7 Fill_Array

# 語法

Fill_Array(數(shù)組名稱,數(shù)值)
參數(shù)
數(shù)組名稱——要設(shè)定值的數(shù)組名稱
數(shù)值——數(shù)值表達(dá)式,、字符串表達(dá)式或布林表達(dá)式,要指
派給數(shù)組元素的值,。數(shù)值的類型要和數(shù)組定義類型一致

# 示例

將 Array1 中的每個(gè)元素設(shè)定為 True:
Array: Array1[10](False);
Fill_Array(Array1,True);

# 說明

  將數(shù)組中的元素設(shè)定指定的值  

7.8 Array_indexof

# 語法

array_indexof(數(shù)組名,,元素值)

# 示例

復(fù)制代碼

array:arr[2](0);

var: var0(0), var1(0);

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

var0=array_indexof(arr,3);

print('var0= ',var0);

//返回值:2

復(fù)制代碼

# 說明

  返回一維數(shù)組中指定元素的索引值,若元素值不存在于數(shù)組中,,則返回-1

=================================================

之前的文章感謝大家的轉(zhuǎn)載,,希望轉(zhuǎn)載時(shí)請注明出處,本人轉(zhuǎn)自其它網(wǎng)站的圖表一并感謝,,謝謝~,!

https://www.cnblogs.com/noah0532/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多