第9章 Declaration声明 PowerLanguage程序公式包括函数、指标和信号,写对应的脚本时,除内置的全局变量外,对自定义需要的数组、参数、变量要先声明,才可以进一步引用计算。 内置全局变量无需声明,可直接引用分别为: 数值型变量初始值为0,有99个:value1~value99 逻辑型变量初始值为false,有99个:condition1~condition99 参数与变量的区别是,变量可以在程序公式内部改变,而一般的参数只能在程序外部修改(当指标或信号插入到图表时,可修改参数设定的初始值);参数可以在外部进行优化,变量不可以;只有声明为传址型参数时,才允许在程序内部改变参数。详细可以参看含有Ref的关键字。 本章主要将数组、参数、变量的声明举例说明。 Array/Arrays | 说明 | 声明一个或多个数组,包含多个变量数组元素;需指定数组结构、元素类型和初始值,更新依据,元素个数。 数组元素的类型可以是数值型,字符串型或布尔型。 数组元素个数可以是固定的也可以是动态的(不限制个数)。 在固定元素个数的数组中,元素可以排列在单个或多个维度。10-元一维数组包含10个元素,10*10二维数组包含100个元素,10*10*10三维数组包含1000个元素,10*10*10*10四维数组包含10000个元素,等等。Powerlanguage中数组维度最高是9维。 数组中的元素可由一个或多个索引值引用,每个维度有一个最大索引值,数组的索引值从0开始。 动态数组(不限元素数量的数组)维度固定为一维,声明后仅有一个元素,动态数组大小可以用 Array_SetMaxIndex重新设定。 数组元素可以单独赋值,也可以把数组全部或部分当成整体来赋值。 | 语法 | Array:<IntraBarPersist> ArrayName1[D1,D2,D3,etc.](InitialValue1<,DataN>), <IntraBarPersist> ArrayName2[D1,D2,D3,etc.](InitialValue2<,DataN>),etc.;
在< >括号中的参数是可选的。
| 参数 | IntraBarPersist——可选参数,指定数组元素值可以在收到每笔tick报价时更新。如果没有指定此参数,数组元素值会在每根Bar的close更新。 ArrayName——数组名称,数组名称可以包含英文字母(不区分大小写),下划线,数字和英文句号。但是名称的开头不能使用数字和句号。 D——数值表达式,指定数组各个维度的最大索引值,数值索引值是从0开始。一个表达式指定的是一维数组,两个表达式指定的是二维数组(D1与D2),三个表达式指定的是三维数组(D1,D2,D3)以此类推。动态数组,元素个数无限制,则方括号[ ]中是空的,并且只能是一维数组。 InitialValue——表达式,指定初始值,定义数组中所有元素的数据类型。初始值可以是数值,字符串,或布林表达式;初始值表达式的类型同时决定了数组类型 。 DataN——可选参数,指定数组参考的数据为Data N ,如果没有指定此参数,数组将会参考默认数据系列。 | 范例 | 声明数组Length和SFactor为9个元素的一维数值数组,初始值为0: Array:Length[8](0),SFactor[8](0); 声明数组Max_Price为24*60 的二维数值数组,依照tick更新,计算参考data2数据,元素初始值为close。 Array:IntraBarPersist Max_Price[23,59](Close,Data2); 声明数组Highs2
为动态数组,初始值为0: Array:Highs2[](0); |
Input/Inputs | 说明 | 声明一个或多个input型外部参数,需指定初始值并定义参数类型。 参数类型可以是数值,字符串或布尔型。一旦被定义,input参数值就不能在公式编辑器脚本中修改。 | 语法 | Input:InputName1(DefaultValue1), InputName2(DefaultValue2), etc. | 参数 | InputName——表达式,指定input参数名称。 名称可以包括英文字母,下划线,数字和英文句号。名称的开头字符不能为数字和句号,字母不区分大小写。 DefaultValue——表达式,指定input参数的初始值,定义input类型。表达式可以是数值,字符串或布尔型,初始值的类型同时决定了参数的类型。 | 范例 | 声明一个数值型参数 Length,初始值为20: Input:Length(20); 声明一个数值型参数Price,初始值为close;一个字符串型参数Name,初始值为"Last Close": Input:Price(Close), Name("Last Close"); 声明一个布尔型参数Draw_Line,初始值为true: Input:Draw_Line(True); |
IntraBarPersist | 说明 | 用在变量和数组的声明语句中,在变量或数组名称之前,用来指定变量或数组元素的值依照每tick更新。 如果没有指定IntraBarPersist,变量或数组元素值将在每根Bar的close更新。 | 语法 | Declaration:[IntraBarPersist]Name(InitialValue1) | 范例 | 声明一个数值型变量 Max ,按照每tick更新,初始值为100: Variable:IntraBarPersist Max(100); 声明一个含24个元素的一维数值型数组Max_Price ,元素值按照每tick更新,元素初始值为0: Array:IntraBarPersist Max_Price[23](0); |
Numeric | 说明 | 用在函数的input参数声明语句中,定义参数为单值数值型。 Input定义的单值型参数可以是简单数值(Numerical Simple)或时序数值(Numerical Series)。简单数值参数从Bar到Bar之间是常数,不能回溯,而时序数值参数从Bar到Bar会变化,可以回溯历史值。 | 语法 | Input:InputName(Numeric) | 参数 | InputName——表达式,指定input参数名称。 名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 | 范例 | 声明Length
为一个数值型函数的参数。 Input:Length(Numeric); |
NumericArray | 说明 | 用在函数的参数声明语句中,定义input参数为指定维度的单值数组。 Input定义的单值型参数可以是简单数值(Numerical Simple)或时序数值(Numerical Series)。简单数值参数从Bar到Bar之间是常数,不能回溯,而时序数值参数从Bar到Bar会变化,可以回溯历史值。 | 语法 | Input:InputName[M1,M2,M3,etc.](NumericArray) | 参数 | InputName——表达式,指定input参数的名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 M——变量,表示传递到函数的数组每个维度的最大索引值,一个变量指定的是一维数组,两个变量指定的是二维数组(M1,M2),三个变量指定的是三维数组(M1,M2,M3)以此类推。 一个input声明只能是一个指定维度的数组。 | 范例 | 声明Length 作为函数的一维数值数组参数: Input:Length[X](NumericArray); 数组的最大索引值由变量X来指定。 声明Table 作为函数的一个三维数值数组参数: Input:Table[X,Y,Z](NumericArray); 数组的最大索引值由变量X,Y,Z来指定。 |
NumericArrayRef | 说明 | 用在函数的参数声明语句中,定义input参数为指定维度的传址数组。 传址参数是传入参数的位置,powerlanguage允许在函数脚本中对参数进行变更,并且呼叫这个函数的脚本内的变量值也会同步更新。 | 语法 | Input:InputName[M1,M2,M3,etc.](NumericArrayRef) | 参数 | InputName——表达式,指定input参数的名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 M——变量,表示传递到函数的数组每个维度的最大索引值,一个变量指定的是一维数组,两个变量指定的是二维数组(M1,M2),三个变量指定的是三维数组(M1,M2,M3)以此类推。 一个input声明只能是一个指定维度的数组。 | 范例 | 声明Count作为函数的一个一维传址数组参数: Input:Count[X]( NumericArrayRef); 数组的最大索引值由变量X来指定。 声明Table作为函数的一个三维传址数组参数: Input:Table[X,Y,Z]( NumericArrayRef); 数组的最大索引值由变量X,Y,Z来指定。 另外,可参看内置函数LinRegSlope_a对函数Summation_a的调用。 |
NumericRef | 说明 | 用在函数的参数声明语句中,定义input参数为传址数值。 传址参数是传入参数的位置,powerlanguage允许在函数脚本中对参数进行变更,并且呼叫这个函数的脚本内的变量值也会同步更新。 | 语法 | Input:Inputname(NumericRef) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。
| 范例 | 声明BarCount 作为函数的一个传址数值参数。 Input:BarCount(NumericRef); 另外,可参看内置函数Highest对函数Extremes的调用。 |
NumericSeries | 说明 | 用在函数的参数声明语句中,定义函数的参数为时序数值型。 时序数值参数,从Bar到Bar是变化的,可以历史回溯。
| 语法 | Input:Inputname(NumericSeries) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。
| 范例 | 声明Price 作为函数的一个时序数值参数: Input:Price(NumericSeries); |
NumericSimple | 说明 | 用在函数的参数声明语句中,定义函数的参数为简单数值型。 简单数值参数,从Bar到Bar是常数,不可以历史回溯。 | 语法 | Input:Inputname(NumericSimple) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。
| 范例 | 声明Length作为函数的一个简单数值参数: Input:Length(NumericSimple); |
String | 说明 | 用在函数的参数声明语句中,定义函数的参数为字符串型。 简单字符串或时序字符串都可以定义为字符串型。简单型字符串从Bar到Bar是不变的,不能历史回溯,时序性字符串从Bar到Bar是变化的,可以历史回溯。
| 语法 | Input:Inputname(String) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 | 范例 | 声明Name 作为函数的一个字符串型参数: Input:Name(String); |
StringArray | 说明 | 用在函数的参数声明语句中,定义函数的参数为指定维度的字符串数组。 简单字符串或时序字符串都可以定义为字符串型。简单型字符串从Bar到Bar是不变的,不能历史回溯,时序性字符串从Bar到Bar是变化的,可以历史回溯。 | 语法 | Input:InputName[M1,M2,M3,etc.](StringArray) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 M——变量,表示传递到函数的数组每个维度的最大索引值,一个变量指定的是一维数组,两个变量指定的是二维数组(M1,M2),三个变量指定的是三维数组(M1,M2,M3)以此类推。
一个input语句只能声明一个指定维度的数组。 | 范例 | 声明Messages作为函数的一个一维字符串数组参数: Input:Messages[X]( StringArray); 数组的最大索引值由变量X来指定。 声明MessageTable 作为函数的一个三维字符串数组参数: Input:MessageTable[X,Y,Z]( StringArray); 数组的最大索引值由变量X,Y,Z来指定。 |
StringArrayRef | 说明 | 用在函数的参数声明语句中,定义函数的参数为指定维度的传址字符串数组。 传址参数是传入参数的位置,powerlanguage允许在函数脚本中对参数进行变更,并且呼叫这个函数的脚本内的变量值也会同步更新。 | 语法 | Input:InputName[M1,M2,M3,etc.](StringArrayRef) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 M——变量,表示传递到函数的数组每个维度的最大索引值,一个变量指定的是一维数组,两个变量指定的是二维数组(M1,M2),三个变量指定的是三维数组(M1,M2,M3)以此类推。 一个input语句只能声明一个指定维度的数组。 | 范例 | 声明Messages作为函数的一个一维传址字串数组参数: Input:Messages[X]( StringArrayRef); 数组的最大索引值由变量X来指定。 声明CommentsTable作为函数的一个三维传址字串数组参数: Input:CommentsTable[X,Y,Z]( StringArrayRef); 数组的最大索引值由变量X,Y,Z来指定。 |
StringRef | 说明 | 用在函数的参数声明语句中,定义函数的参数为传址字符串。 传址参数是传入参数的位置,powerlanguage允许在函数脚本中对参数进行变更,并且呼叫这个函数的脚本内的变量值也会同步更新。 | 语法 | Input:InputName(StringRef) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 | 范例 | 声明Message作为函数的一个传址字符串参数: Input:Messages( StringRef); |
StringSeries | 说明 | 用在函数的参数声明语句中,定义函数的参数为时序型字符串参数。 时序型参数,从Bar到Bar是变化的,可以历史回溯。 | 语法 | Input:InputName(StringSeries) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 | 范例 | 声明Messages作为函数的一个时序型字符串参数: Input:Messages(StringSeries); |
StringSimple | 说明 | 用在函数的参数声明语句中,定义函数的参数为简单型字符串参数。 简单型参数,从Bar到Bar是常数,不可以历史回溯。 | 语法 | Input:InputName(StringSimple) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 | 范例 | 声明Name 作为函数的一个简单字符串参数: Input:Name(StringSimple); |
TrueFalse | 说明 | 用在函数的参数声明语句中,定义函数的参数为布尔型参数。 简单型布尔参数和时序型布尔参数都可以用truefalse布尔型来声明。 简单型布尔参数从Bar到Bar是不变的,不能历史回溯,时序性布尔参数从Bar到Bar是变化的,可以历史回溯。 | 语法 | Input:InputName(TrueFalse) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 | 范例 | 声明Overnight 作为函数的布尔型参数: Input:Overnight(TrueFalse); |
TrueFalseArray | 说明 | 用在函数的参数声明语句中,定义函数的参数为指定维度的布尔型数组。 简单型布尔参数和时序型布尔参数都可以用truefalse布尔型来声明。简单型布尔参数从Bar到Bar是不变的,不能历史回溯,时序性布尔参数从Bar到Bar是变化的,可以历史回溯。 | 语法 | Input:InputName[M1,M2,M3,etc.](TrueFalseArray) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 M——变量,表示传递到函数的数组每个维度的最大索引值,一个变量指定的是一维数组,两个变量指定的是二维数组(M1,M2),三个变量指定的是三维数组(M1,M2,M3)以此类推。
一个input语句只能声明一个指定维度的数组。 | 范例 | 声明UpTrend作为函数的一个一维布尔型数组参数: Input:UpTrend[X](TrueFalseArray); 数组的最大索引值由变量X来指定: 声明FlagTable 作为函数的一个三维布尔型数组参数: Input:FlagTable[X,Y,Z](TrueFalseArray); 数组的每个维多的最大索引值由变量X,Y和Z来指定。 |
TrueFalseArrayRef | 说明 | 用在函数的参数声明语句中,定义函数的参数为指定维度的传址型布尔型数组。 传址参数是传入参数的位置,powerlanguage允许在函数脚本中对参数进行变更,并且呼叫这个函数的脚本内的变量值也会同步更新。 | 语法 | Input:InputName[M1,M2,M3,etc.](TrueFalseArrayRef) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 M——变量,表示传递到函数的数组每个维度的最大索引值,一个变量指定的是一维数组,两个变量指定的是二维数组(M1,M2),三个变量指定的是三维数组(M1,M2,M3)以此类推。
一个input语句只能声明一个指定维度的数组。 | 范例 | 声明Trend 作为函数的一个传址型一维布尔型数组参数: Input:Trend[X](TrueFalseArrayRef); 数组的最大索引值由变量X来指定。 声明TrendTable作为函数的一个传址型三维布尔型数组参数: Input:TrendTable[X,Y,Z](TrueFalseArrayRef); 数组的每个维多的最大索引值由变量X,Y和Z来指定。 |
TrueFalseRef | 说明 | 用在函数的参数声明语句中,定义函数的参数为传址型布尔参数。 传址参数是传入参数的位置,powerlanguage允许在函数脚本中对参数进行变更,并且呼叫这个函数的脚本内的变量值也会同步更新。 | 语法 | Input:InputName(TrueFalseRef) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 | 范例 | 声明Flag 作为函数的一个传址型布尔参数: Input:Flag(TrueFalseRef); |
TrueFalseSeries | 说明 | 用在函数的参数声明语句中,定义函数的参数为时序型布尔型参数。 时序型参数,从Bar到Bar是变化的,可以历史回溯。 | 语法 | Input:InputName(TrueFalseSeries) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。
| 范例 | 声明UpTrend 作为函数的一个时序性布尔型参数:
Input:UpTrend(TrueFalseSeries); |
TrueFalseSimple | 说明 | 用在函数的参数声明语句中,定义函数的参数为简单布尔型参数。 简单型参数,从Bar到Bar是常数,不可以历史回溯。 | 语法 | Input:InputName(TrueFalseSimple) | 参数 | Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。 | 范例 | 声明Overnight作为函数的一个简单布尔型参数: Input:Onernight(TrueFalseSimple); |
Variable/Variables/Var/Vars | 说明 | 声明一个或多个变量名称,需指定初始值,变量类型,更新依据和每个变量参考的子图。变量可以是数值型,字符串型和布尔型。 | 语法 | Variable:[IntraBarPersist]VariableName1(InitialValue1[,DataN]), [IntraBarPersist]VariableName2(InitialValue2[,DataN]),etc. 方括号[ ]中的参数是可选的。 | 参数 | IntraBarPersist——可选参数,指定变量值可以在收到每笔tick报价时更新。如果没有指定此参数,变量值会在每根Bar的close更新。 VariableName2——变量名称,变量名称可以包含英文字母(不区分大小写),下划线,数字和英文句号。但是名称的开头不能使用数字和句号。 InitialValue——表达式,指定初始值,定义变量类型。初始值可以是数值,字符串,或布林表达式;初始值表达式的类型同时决定了变量类型
DataN——可选参数,指定变量参考的数据为data N ,如果没有指定此参数,数组将会参考默认数据系列。 | 范例 | 声明一个数值变量Avg. ,初始值为20: Variable:Avg.(20); 声明一个数值变量Max , 按照每tick更新,初始值为100: Variable:IntraBarPersist Max(100); 声明一个数值变量Min_Price , 参考子图Data #2数值计算, 初始值为close值: Variable:Min_Price(Close,Data2); 声明一个布尔型变量Overnight,初始值为false,和一个字符串变量Name初始值为"Intra-Day": Variable:Overnight(False),Name("Intra-Day"); |
|