: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

MultiCharts编程-PowerLanguage-Declaration声明

MultiCharts编程-PowerLanguage-Declaration声明

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报价时更新。如果没有指定此参数,数组元素值会在每根Barclose更新。

  

ArrayName——数组名称,数组名称可以包含英文字母(不区分大小写),下划线,数字和英文句号。但是名称的开头不能使用数字和句号。

  

D——数值表达式,指定数组各个维度的最大索引值,数值索引值是从0开始。一个表达式指定的是一维数组,两个表达式指定的是二维数组(D1D2),三个表达式指定的是三维数组(D1,D2,D3)以此类推。动态数组,元素个数无限制,则方括号[ ]中是空的,并且只能是一维数组。

  

InitialValue——表达式,指定初始值,定义数组中所有元素的数据类型。初始值可以是数值,字符串,或布林表达式;初始值表达式的类型同时决定了数组类型  

  

DataN——可选参数,指定数组参考的数据为Data N ,如果没有指定此参数,数组将会参考默认数据系列。

  
  

范例

  
  

声明数组LengthSFactor9个元素的一维数值数组,初始值为0

  

Array:Length[8](0),SFactor[8](0);

  

声明数组Max_Price24*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,变量或数组元素值将在每根Barclose更新。

  
  

语法

  
  

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)。简单数值参数从BarBar之间是常数,不能回溯,而时序数值参数从BarBar会变化,可以回溯历史值。

  
  

语法

  
  

Input:InputName(Numeric)

  
  

参数

  
  

InputName——表达式,指定input参数名称。

  

名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。

  
  

范例

  
  

声明Length
为一个数值型函数的参数。

  

Input:Length(Numeric);  

  

  NumericArray  
  

说明

  
  

用在函数的参数声明语句中,定义input参数为指定维度的单值数组

  

Input定义的单值型参数可以是简单数值(Numerical Simple)或时序数值(Numerical  Series)。简单数值参数从BarBar之间是常数,不能回溯,而时序数值参数从BarBar会变化,可以回溯历史值。

  
  

语法

  
  

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  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为时序数值型

  

时序数值参数,从BarBar是变化的,可以历史回溯。

  
  

语法

  
  

Input:Inputname(NumericSeries)

  
  

参数

  
  

Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。

  
  

范例

  
  

声明Price 作为函数的一个时序数值参数:

  

Input:Price(NumericSeries);  

  

  NumericSimple  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为简单数值型

  

简单数值参数,从BarBar是常数,不可以历史回溯。

  
  

语法

  
  

Input:Inputname(NumericSimple)

  
  

参数

  
  

Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。

  
  

范例

  
  

声明Length作为函数的一个简单数值参数:

  

Input:Length(NumericSimple);

  

  String  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为字符串型。

  

简单字符串或时序字符串都可以定义为字符串型。简单型字符串从BarBar是不变的,不能历史回溯,时序性字符串从BarBar是变化的,可以历史回溯。

  
  

语法

  
  

Input:Inputname(String)

  
  

参数

  
  

Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。

  
  

范例

  
  

声明Name 作为函数的一个字符串型参数:

  

Input:Name(String);

  

  StringArray  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为指定维度的字符串数组

  

简单字符串或时序字符串都可以定义为字符串型。简单型字符串从BarBar是不变的,不能历史回溯,时序性字符串从BarBar是变化的,可以历史回溯。

  
  

语法

  
  

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  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为时序型字符串参数

  

时序型参数,从BarBar是变化的,可以历史回溯。

  
  

语法

  
  

Input:InputName(StringSeries)

  
  

参数

  
  

Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。

  
  

范例

  
  

声明Messages作为函数的一个时序型字符串参数:

  

Input:Messages(StringSeries);

  

  StringSimple  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为简单型字符串参数

  

简单型参数,从BarBar是常数,不可以历史回溯。

  
  

语法

  
  

Input:InputName(StringSimple)

  
  

参数

  
  

Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。

  
  

范例

  
  

声明Name 作为函数的一个简单字符串参数:

  

Input:Name(StringSimple);

  

  TrueFalse  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为布尔型参数

  

简单型布尔参数和时序型布尔参数都可以用truefalse布尔型来声明。

  

简单型布尔参数从BarBar是不变的,不能历史回溯,时序性布尔参数从BarBar是变化的,可以历史回溯。

  
  

语法

  
  

Input:InputName(TrueFalse)

  
  

参数

  
  

Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。

  
  

范例

  
  

声明Overnight 作为函数的布尔型参数:

  

Input:Overnight(TrueFalse);

  

  TrueFalseArray  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为指定维度的布尔型数组

  

简单型布尔参数和时序型布尔参数都可以用truefalse布尔型来声明。简单型布尔参数从BarBar是不变的,不能历史回溯,时序性布尔参数从BarBar是变化的,可以历史回溯。

  
  

语法

  
  

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

  

数组的每个维多的最大索引值由变量XYZ来指定。

  

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

  

数组的每个维多的最大索引值由变量XYZ来指定。

  

  TrueFalseRef  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为传址型布尔参数

  

传址参数是传入参数的位置,powerlanguage允许在函数脚本中对参数进行变更,并且呼叫这个函数的脚本内的变量值也会同步更新。

  
  

语法

  
  

Input:InputName(TrueFalseRef)

  
  

参数

  
  

Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。

  
  

范例

  
  

声明Flag 作为函数的一个传址型布尔参数:

  

Input:Flag(TrueFalseRef);

  

  TrueFalseSeries  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为时序型布尔型参数。

  

时序型参数,从BarBar是变化的,可以历史回溯。

  
  

语法

  
  

Input:InputName(TrueFalseSeries)

  
  

参数

  
  Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。
  
  

范例

  
  声明UpTrend 作为函数的一个时序性布尔型参数:
  

Input:UpTrend(TrueFalseSeries);

  

  TrueFalseSimple  
  

说明

  
  

用在函数的参数声明语句中,定义函数的参数为简单布尔型参数。

  

简单型参数,从BarBar是常数,不可以历史回溯。

  
  

语法

  
  

Input:InputName(TrueFalseSimple)

  
  

参数

  
  

Inputname——表达式,指定参数名称。名称可以包括英文字母,下划线,数字和英文句号。字母不区分大小写,名称不能用数字或下划线开头。

  
  

范例

  
  

声明Overnight作为函数的一个简单布尔型参数:

  

Input:Onernight(TrueFalseSimple);

  

  Variable/Variables/Var/Vars  
  

说明

  
  

声明一个或多个变量名称,需指定初始值,变量类型,更新依据和每个变量参考的子图。变量可以是数值型,字符串型和布尔型。

  
  

语法

  
  

Variable:[IntraBarPersist]VariableName1(InitialValue1[,DataN]), [IntraBarPersist]VariableName2(InitialValue2[,DataN]),etc.

  

方括号[ ]中的参数是可选的。

  
  

参数

  
  

IntraBarPersist——可选参数,指定变量值可以在收到每笔tick报价时更新。如果没有指定此参数,变量值会在每根Barclose更新。

  

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");

  

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表