问题引入:当我们要存储交易信息的二维表,其中每一行中类型不一样, 能否把一行中的不同类型的数据作为一个整体来处理呢?那么MQL4语言中给我们提供了一个机制,让我们可以实现这种功能,它是由程序员创建的数据类型。
定义
是由一系列具有相同类型或不同类型的数据构成的数据集合,是一种复合数据类型。
格式
struct
{
;
};
提示:结构体是类的一种特列,定义方式基本相同,两者区别1、结构体关键字struct而类的关键字是class。2、结构体默认的访问方式是公共的,而类的默认访问方式是私有的。
举例
struct student
{ string name; double weight; int age; double achievements; };
创建结构体变量(两种方式)
1、student G1,G2;
2、struct student
{ string name; double weight; int age; double achievements; } G1,G2;
第一种结构定义和变量申明分开便于程序的阅读和理解。
初始化结构体变量
student G1={"张三",21,65,450};
如何调用结构体内部成员
G1.name //在结构体变量后面加点运算符可以调用相应成员
结构体数组
订单的排列是一个二维排列,要用结构体的形式来进行统计应该如何做呢?这里就需要用到结构体数组
struct Statistics
{
string OSymbol; //订单货币对
int OTicket;//订单编号
int OType;//订单类型
int OMagicNumber;//订单识别码
double OLots;//订单手数
double OOpenPrice;//订单开仓价格
double OProfit;//订单的利润
double OStopLoss;//订单止损
double OTakeProfit;//订单止盈
double OCommission;//订单的佣金
double OSwap;//订单的掉期
datetime OOpenTime;//订单开仓时间
datetime OExpiration;//挂单有效期
void setValue(string OSymbol_,int OTicket_,int OType_,int OMagicNumber_,double OLots_,double OOpenPrice_,double OProfit_,double OStopLoss_,double OTakeProfit_,double OCommission_,double OSwap_,datetime OOpenTime_,datetime OExpiration_
);
};
void OnStart()
{
int c=OrdersTotal();
Statistics order[];
ArrayResize(order,c);
for(int i=c-1; i>0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
order[i].setValue(OrderSymbol(),OrderTicket(),OrderType(),OrderMagicNumber(),OrderLots(),OrderOpenPrice(),OrderProfit(),OrderStopLoss(),OrderTakeProfit(),OrderCommission(),OrderSwap(),OrderOpenTime(),OrderExpiration());
}
}
}
void Statistics::setValue(
string OSymbol_, int OTicket_,int OType_,int OMagicNumber_,double OLots_,double OOpenPrice_,double OProfit_,double OStopLoss_,double OTakeProfit_,double OCommission_,double OSwap_,datetime OOpenTime_,datetime OExpiration_
)
{
OSymbol=OSymbol_;OTicket=OTicket_;OType=OType_;OMagicNumber=OMagicNumber_;OLots=OLots_;OOpenPrice=OOpenPrice_;OProfit=OProfit_;OStopLoss=OStopLoss_;OTakeProfit=OTakeProfit_;OCommission=OCommission_;OSwap=OSwap_; OOpenTime=OOpenTime_; OExpiration=OExpiration_;
};
程序统计了所有持仓单信息,当需要调用相应信息的时候只需要输入:order[1].OTicke就可以获取第二个订单的单号。
注意:在统计订单的时候,统计的顺序首先按照时间优先后在按照同种货币对统计。
结构体其它属性
1、结构体可以作为参数传递给函数。
2、可以让函数返回一个结构体。
3、结构体可以用 “=”号把值赋值给另外一个结构体。
4、结构体中可以嵌套结构体成员。
对于其它属性的的问题大家可以留言咨询或者继续关注公众号及书籍
总结:程序员在面对复杂的对象时,对其进行描述需要多种数据类型。而对数据的调用都是公开的方式,利用结构体是一个不错的选择,就不需要使用类来进行定义。
暗中观察
默默关注
领取专属 10元无门槛券
私享最新 技术干货