声明变量
变量在使用前必须先声明其存在。
使用惟一的名称表达标识变量。
要声明一个变量,必须指定其类型和惟一名称。变量声明不能是运算符。
简单的类型有 :
char, short, int, long, uchar, ushort, uint, ulong // 都属于整型;
color // 表示RGB颜色的整数;
datetime // 日期和时间,一个无符号整数,包含自1970年1月1日0小时以来的秒数;
bool // 布尔值 结果为 真(true)和假(false);
double // 双精度浮点数;
float // 单精度浮点数;
string // 字符串。
例子:
string szInfoBox;
int nOrders;
double dSymbolPrice;
bool bLog;
datetime tBegin_Data = D'2004.01.01 00:00';
color cModify_Color = C'0x44,0xB9,0xE6';
复合或复合类型:
结构是使用其他类型构造的复合数据类型。
struct MyTime
{
int 小时; / / 0-23
int 分钟; / / 0-59
int 秒; / / 0-59
};
…
MyTime strTime; // 变量之前声明的结构MyTime
在声明结构类型之前,您不能声明结构类型的变量。
数组
数组是同类型数据的索引序列:
int a[50]; // 50个整数的一维数组。
double m[7][50]; // 二维数组,
//每个数字由50个数字组成。
MyTime t[100]; 包含MyTime等元素的数组
只有整数可以是数组索引。且为不可超过四维的数组。数组元素的编号从0开始。一维数组的最后一个元素的数字比数组大小要小1。这意味着对包含50个整数的数组的最后一个元素的调用将以[49]的形式出现。同样地也关系到多维数组:维度从0索引到维度范围-1。示例中二维数组的最后一个元素将显示为m[6][49]。
静态数组不能声明为timeseries,即, ArraySetAsSeries()函数不能应用于它们,该函数将数组元素的访问权限设置为从头到尾。如果您希望提供与timeseries中相同的对数组的访问,请使用dynamic array对象。
如果试图访问数组范围之外的内容,执行子系统将生成一个关键错误,程序将被停止。
访问说明符
访问指标定义编译器如何访问变量、结构或类的成员。
const说明符将变量声明为常量,并且不允许在运行时更改该变量。在声明变量时允许对其进行一次初始化。
例子:
int OnCalculate (const int rates_total, // 输入时间序列的大小
const int prev_computing, // 调用前一个棒
const date & time[], // 开盘时间
const double& open[], // 开
const double& high[], // 高
const double& low[], // 低
const double& close[], // 收
const long& tick_volume[], // tick量
const long& volume[], // 量
const int& spread [] // 滑点
);
要访问结构和类的成员,使用以下限定符:
public // 允许不受限制地访问变量或类方法
protected // 允许访问这个类的方法,以及从公共继承类的方法。其他途径是不可能的;
private // 只允许从同一个类的方法访问变量和类方法。
virtual // 只应用于类方法(但不应用于结构方法),并告诉编译器这个方法应该放在类的虚函数表中。
存储类
有三个存储类: 静态存储类static、 输入存储类input 和外部输入存储类extern。存储类的这些修饰符显式地向编译器表明,相应的变量分布在预先分配的内存区域(称为全局池)中。此外,这些修饰符表示对变量数据的特殊处理。如果在本域级别声明的变量不是静态变量,则在程序堆栈上自动分配该变量的内存。当超出块的可见区域时,也会自动执行为非静态数组分配的内存释放,而块中声明了数组。
网友评论