语法[Syntax]
代码格式
空格建、Tab键、换行键和换页符都可以成为代码排版的分隔符,你能使用各种符号来增加你带骂得可读性。
注释
多行注释使用/* 作为开始到*/ 结束,在这之间不能够嵌套。单行注释使用// 作为开始到新的一行结束,可以被嵌套到多行注释之中。
示例:
标识符
标识符用来给变量、函数和数据类型进行命名,长度不能超过31一个字节
你可以使用数字0-9、拉丁字母大写A-Z和小写a-z(大小写有区分的)还有下划线(_)。此外首字母不可以是数字,标识符不能和保留字冲突.
示例:
保留字
下面列出的是固定的保留字。不能使用以下任何保留字进行命名。
数据类型存储类型操作符其它
bool extern break false
color static case true
datetime continue
double default
int else
string for
void if
return
switch
while
数据类型[Data types]
数据类型概述
主要数据类型有:
?Integer (int)
?Boolean (bool)
??èò?eà?? (char)
?Floating-point number (double)
?Color (color)
?Datetime (datetime)
我们用Integer类型数据来作为DateTime和Color数据的存储。
使用以下方式可以进行类型站换:
Integer 类型
十进制: 数字0-9;0不能作为第一个字母
示例:
十六进制: 数字0-9;拉丁字母a-f或A-F用来表示10-15;使用0x或者0X作为开始。
示例:
Integer 变量的取值范围为-2147483648到2147483647。
Literal 类型
任意在单引号中的字符或十六进制的任意ASCII码例如'\x10'都是被看作为一个字符,
一些字符例如单引号('),双引号("),问号(?),反斜杠(\)和一些控制符都需要在之前加一个反斜杠(\)进行转意后表示出来:
以上字符如果不经过反斜杠进行转意将不能被使用
示例:
Boolean 类型
Boolean 用来表示是和否, 还可以用数字1 和0 进行表示。True和Flase可以忽略大小写。
示例:
Floating-point number 类型
浮点型变量在整数型后面加一个点(.)用来更精确的表示十进制数字。
示例:
浮点型的取值范围从2.2e-308 到1.8e308.
String 类型
字符串型是用来表示连续的ASCII码字符的使用连续的两个双引号来包括需要表示的内容如:"Character constant". 示例:
Color 类型
颜色类型可以使用以下示例里的几种方式进行定义。
示例:
Datetime 类型
时间类型使用年、月、日、时、分、秒来进行定义,你可以使用以下示例中的方式来定义变量。
示例:
表达式
一个表达式可以拥有多个字符和操作符,一个表达式可以写在几行里面。示例:
注:分号(;)是表达式的结束符。
算术运算符
加减1的运算符不能被嵌套在表达式中
赋值运算符
注:将右侧的结果赋值给左侧的变量
注:一个表达式只能有一个赋值运算符.
关系运算符
用返回0(False)或1(True)来表示两个量之间的关系。
真假运算符
否定运算符(!),用来表示真假的反面的结果。
逻辑运算符或(||)用来表示两个表达式只要有一个成立即可。
示例:
逻辑运算符和(&&)用来表示两个表达式要同时成立才行。
示例:
位逻辑运算符
~ 运算符对操作数执行按位求补操作。
>> 运算符对操作数执行向右位移操作。
<< 运算符对操作数执行向左位移操作。
一元& 运算符返回操作数的地址
为整型和bool 类型预定义了二进制& 运算符。对于整型,& 计算操作数的按位“与”。对于bool 操作数,& 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为true 时,其结果才为true。
二进制| 运算符是为整型和bool 类型预定义的。对于整型,| 对操作数进行按位“或”运算。对于bool 操作数,| 对操作数进行逻辑“或”计算,也就是说,当且仅当两个操作数均为false 时,其结果才为false。
为整型和bool 类型预定义了^ 二进制操作数。对于整型,^ 计算操作数的按位“异或”。对于bool 操作数,^ 计算操作数的逻辑“异或”;也就是说,当且仅当只有一个操作数为true 时,其结果才为true。
注:位逻辑运算符只作用于Integers类型
其它运算符
索引。定位在数组中i位置的值。
示例:
优先级规则
下面是从上到下的运算优先规则,优先级高的将先被运算。
格式和嵌套
格式.一个操作符可以占用一行或者多行,两个或多个操作符可以占用更多的行。
嵌套.执行控制符(if, if-else, switch, while and for)可以进行任意嵌套.
复合操作符
一个复合操作符有一个(一个区段)和由一个或多个任何类型的操作符组成的的附件{}. 每个表达式使用分号作为结束(;) 示例:
表达式操作符
任何以分号(;)结束的表达式都被视为是一个操作符。
Assignment operator.
Identifier=expression;
标识符=表达式;
示例:
一个操作符中只能有一个表达式。
调用函数操作符
Function_name(argument1,..., argumentN);
函数名称(参数1,...,参数N);
示例:
空操作符
只有一个分号组成(;).我们用它来表示没有任何表达式的空操作符.
停止操作符
一个break; , 我们将其放在嵌套内的指定位置,用来在指定情况下跳出循环操作.
示例:
继续操作符
一个continue;我们将其放在嵌套内的指定位置,用来在指定情况下跳过接下来的运算,直接跳入下一次的循环。
示例:
返回操作符
一个return;将需要返回的结果放在return后面的()中。
示例:
条件操作符if
if (expression)
operator;
如果表达式为真那么执行操作。
示例:
条件操作符if-else
if (expression)
operator1
else
operator2
如果表达式为真那么执行operator1,如果为假执行operator2,else后还可以跟进多个if执行多项选择。详见示例。示例:
选择操作符switch
switch (expression)
{
case constant1: operators; break;
case constant2: operators; break;
...
default: operators; break;
}
当表达式expression的值等于结果之一时,执行其结果下的操作。不管结果如何都将执行default中的操作。示例:
被选择的结果只可以是常数,不可为变量或表达式。
示例:
循环操作符while
只要表达式expression为真就执行操作operator
示例:
循环操作符for
for (expression1; expression2; expression3)
operator;
用表达式1(expression1)来定义初始变量,当表达式2(expression2)为真的时候执行操作operator,在每次循环结束后执行表达式3(expression3)
用while可以表示为这样:
expression1;
while (expression2)
{
operator;
expression3;
};
示例:
使用for(;;)可以造成一个死循环如同while(true)一样.
表达式1和表达式3都可以内嵌多个用逗号(,)分割的表达式。
示例:
函数[Function]
函数定义
一个函数是由返回值、输入参数、内嵌操作所组成的。
示例:
如果没有返回值那么返回值的类型可以写为void
示例:
函数调用
function_name (x1,x2,...,xn)
示例:
特殊函数init()、deinit()和start()
init()在载入时调用,可以用此函数在开始自定义指标或者自动交易之前做初始化操作。deinit()在卸载时调用,可以用此函数在去处自定义指标或者自动交易之前做初始化操作。start()当数据变动时触发,对于自定义指标或者自动交易的编程主要依靠此函数进行。
变量[Variables]
定义变量
定义基本类型
基本类型包括
?string - 字符串型;
?int - 整数型;
?double - 双精度浮点数型;
?bool - 布尔型
示例:
定义附加类型
附加类型包括
?datetime - 时间型,使用无符号整型数字存储,是1970.1.1 0:0:0开始的秒数?color - 颜色,使用三色的整型数字编码而成
示例:
内部变量定义
内部变量顾名思义是在内部使用的,可以理解为在当前嵌套内所使用的变量。
函数参数定义
示例:
函数的参数内的变量只能在函数内才生效,在函数外无法使用,而且在函数内对变量进行的修改在函数外无法生效。
调用函数示例:
如果有需要在变量传入由参数传入函数内操作后保留修改在函数外生效的情况的话,可以在参数定义的类型名称后加上修饰符(&)。
示例:
静态变量定义
在数据类型前加上static就可以将变量定义成静态变量
示例:
全局变量定义
全局变量是指在整个程序中都能够调用的变量,只需将变量定义卸载所有嵌套之外即可。
示例:
附加变量定义
附加变量可以允许由用户自己输入。
初始化变量
变量必须经过初始化才可以使用。
基本类型
示例:
数组类型
示例:
外部函数引用
示例:
预处理程序[Preprocessor]
定义常数
#define identifier_value
常数可以是任何类型的,常数在程序中不可更改。示例:
编译参数定义
#property identifier_value
以下是所有的参数名称:
参数名称类型说明
link string 设置一个链接到公司网站
copyright string 公司名称
stacksize int 堆栈大小
indicator_chart_window void 显示在走势图窗口
indicator_separate_window void 显示在新区块
indicator_buffers int 显示缓存最高8
indicator_minimum int 图形区间最低点
indicator_maximum int 图形区间最高点
indicator_colorN color 第N根线的颜色,最高8根线
indicator_levelN double predefined level N for separate window custom indicator show_confirm void 当程序执行之前是否经过确认
show_inputs void before script run its property sheet appears; disables show_confirm property
嵌入文件
#include
#include "file_name" 示例:
引入函数或其他模块
#import "file_name" func1();
func2();
#import
示例:
账户信息[Account Information] double AccountBalance()
返回账户余额
示例:
double AccountCredit()
返回账户信用点数
示例:
string AccountCompany()
返回账户公司名
示例:
string AccountCurrency()
返回账户所用的通货名称
示例:
double AccountEquity()
返回资产净值
示例:
double AccountFreeMargin()
Returns free margin value of the current account. 示例:
int AccountLeverage()
返回杠杆比率
示例:
Returns margin value of the current account.
示例:
string AccountName()
返回账户名称
示例:
int AccountNumber()
返回账户数字
示例:
double AccountProfit()
返回账户利润
示例:
数组函数[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 倒序搜索
示例:
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 - 读取多少位的数组
示例:
int ArrayCopyRates( double& dest_array[], string symbol=NULL, int timeframe=0)
复制一段走势图上的数据到一个二维数组,数组的第二维只有6个项目分别是:
0 - 时间,
1 - 开盘价,
2 - 最低价,
3 - 最高价,
4 - 收盘价,
5 - 成交量.
:: 输入参数
dest_array[] - 目标数组
symbol - 标示,当前所需要的通货的标示
timeframe - 图表的时间线
示例:
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 - 图表的时间线
int ArrayDimension( int array[])
返回数组的维数
:: 输入参数
array[] - 需要检查的数组
示例:
bool ArrayGetAsSeries(object array[])
检查数组是否是有组织序列的数组(是否从最后到最开始排序过的),如果不是返回否:: 输入参数
array[] - 需要检查的数组
示例:
int ArrayInitialize( double& array[], double value)
对数组进行初始化,返回经过初始化的数组项的个数
:: 输入参数
array[] - 需要初始化的数组
value - 新的数组项的值
示例:
bool ArrayIsSeries( object array[])
检查数组是否连续的(time,open,close,high,low, or volume).
:: 输入参数
array[] - 需要检查的数组
示例:
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0) 找出数组中最大值的定位
:: 输入参数
array[] - 需要检查的数组
count - 搜索数组中项目的个数
start - 搜索的开始点
示例:
int ArrayMinimum( double array[], int count=WHOLE_ARRAY, int start=0) 找出数组中最小值的定位
:: 输入参数
array[] - 需要检查的数组
count - 搜索数组中项目的个数
start - 搜索的开始点
示例:
int ArrayRange( object array[], int range_index)
取数组中指定维数中项目的数量。
:: 输入参数
array[] - 需要检查的数组
range_index - 指定的维数
示例:
int ArrayResize( object& array[], int new_size)
重定义数组大小
:: 输入参数
array[] - 需要检查的数组
new_size - 第一维中数组的新大小
示例:
bool ArraySetAsSeries( double& array[], bool set)
设置指数数组为系列数组,数组0位的值是最后的值。返回之前的数组状态:: 输入参数
array[] - 需要处理的数组
set - 是否是设置为系列数组,true或者false
示例:
int ArraySize( object array[])
返回数组的项目数
:: 输入参数
array[] - 需要处理的数组
示例: