21 七月 2017
21 七月 2017
union LongDouble { long long_value; double double_value; };与结构不同,不同的union成员属于同一个内存区。在该示例中,LongDouble函数的union是通过共享同一个内存区的long和double类型值来声明。请注意,由于long_value 和 double_value 变量重复(在内存中),所以union不可以同时存储long整型值和double真实型值(不同于结构)。 换句话说,MQL5程序随时都可以将union的数据处理为整型(long)或真实型(double)值。因此,union允许接收表示相同数据序列的两种(或更多种)选项。
union LongDouble { long long_value; double double_value; }; //+------------------------------------------------------------------+ //| 脚本程序起始函数 | //+------------------------------------------------------------------+ void OnStart() { //--- LongDouble lb; //--- 获得并显示无效 -nan(ind) 数字 lb.double_value=MathArcsin(2.0); printf("1. double=%f integer=%I64X",lb.double_value,lb.long_value); //--- 最大的标准化数值 (DBL_MAX) lb.long_value=0x7FEFFFFFFFFFFFFF; printf("2. double=%.16e integer=%I64X",lb.double_value,lb.long_value); //--- 最小的正标准化 (DBL_MIN) lb.long_value=0x0010000000000000; printf("3. double=%.16e integer=%.16I64X",lb.double_value,lb.long_value); } /* Execution result 1. double=-nan(ind) integer=FFF8000000000000 2. double=1.7976931348623157e+308 integer=7FEFFFFFFFFFFFFF 3. double=2.2250738585072014e-308 integer=0010000000000000 */
class Foo { int value; public: string Description(void){return IntegerToString(value);}; //--- 默认构造函数 Foo(void){value=-1;}; //--- 参数化构造函数 Foo(int v){value=v;}; }; //+------------------------------------------------------------------+ //| 包括 Foo 类型对象的结构 | //+------------------------------------------------------------------+ struct MyStruct { string s; Foo foo; }; //+------------------------------------------------------------------+ //| 脚本程序起始函数 | //+------------------------------------------------------------------+ void OnStart() { //--- MyStruct a,b; Foo an_foo(5); a.s="test"; a.foo=an_foo; Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); //--- Print("b=a"); b=a; //--- Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); /* Execution result; a.s=test a.foo.Description()=5 b.s= b.foo.Description()=-1 b=a a.s=test a.foo.Description()=5 b.s=test b.foo.Description()=5 */ }在隐式操作符中执行对象的成员逐一复制。
ENUM_POSITION_REASON | ENUM_DEAL_REASON | ENUM_ORDER_REASON | 原因描述 |
---|---|---|---|
POSITION_REASON_CLIENT | DEAL_REASON_CLIENT | ORDER_REASON_CLIENT | 激活从桌面程序端下单的订单而执行该操作 |
POSITION_REASON_MOBILE | DEAL_REASON_MOBILE | ORDER_REASON_MOBILE | 激活从手机应用下单的订单而执行该操作 |
POSITION_REASON_WEB | DEAL_REASON_WEB | ORDER_REASON_WEB | 激活从网页平台下单的订单而执行该操作 |
POSITION_REASON_EXPERT | DEAL_REASON_EXPERT | ORDER_REASON_EXPERT | 激活从MQL5程序下单的订单而执行该操作,例如EA交易或脚本 |
- | DEAL_REASON_SL | ORDER_REASON_SL | 激活止损而执行该操作 |
- | DEAL_REASON_TP | ORDER_REASON_TP | 激活止赢而执行该操作 |
- | DEAL_REASON_SO | ORDER_REASON_SO | 由于Stop out 事件而执行该操作 |
- | DEAL_REASON_ROLLOVER | - | 由于展期交割而执行交易 |
- | DEAL_REASON_VMARGIN | - | 收取变动预付款后执行交易 |
- | DEAL_REASON_SPLIT | - | 股票或其他资产分割(价格减少)后执行交易,宣布分割期间拥有持仓 |