21 7月 2017
21 7月 2017
union LongDouble { long long_value; double double_value; };構造体とは異なり、さまざまなunionメンバは同じメモリ領域に属します。この例では、LongDoubleのunionは、long型とdouble型の値が同じメモリ領域を共有するように宣言されています。long_valueとdouble_value変数が(メモリ内で)重複しているので、構造体とは異なり、long型の値とdouble型の実数値を同時に格納することはできません。一方、MQL5プログラムは、unionからのデータをいつでも整数(long)または実数(double)として 処理することができるため、unionでは、同じデータシーケンスを表す2つ(またはそれ以上)のオプションを受け取ることができます。
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); //--- 正規化された最大値l(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); } /* 実行結果 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 | この操作は、Webプラットフォームから出された注文がアクティブ化された結果として実行されました。 |
POSITION_REASON_EXPERT | DEAL_REASON_EXPERT | ORDER_REASON_EXPERT | この操作は、MQL5プログラム(エキスパートアドバイザーまたはスクリプト)から出された注文がアクティブ化された結果として実行されました。 |
- | DEAL_REASON_SL | ORDER_REASON_SL | この操作は、ストップロスのアクティブ化の結果として実行されました。 |
- | DEAL_REASON_TP | ORDER_REASON_TP | この操作は、テイクプロフィットのアクティブ化の結果として実行されました。 |
- | DEAL_REASON_SO | ORDER_REASON_SO | この操作は、ストップアウトイベントの結果として実行されました。 |
- | DEAL_REASON_ROLLOVER | - | この約定は、ロールオーバのために実行されました。 |
- | DEAL_REASON_VMARGIN | - | この約定は、変動証拠金を課金した後に実行されました。 |
- | DEAL_REASON_SPLIT | - | この約定は、スプリットが公表された時にポジションが存在した株式または他の資産のスプリット(低下)の後に実行されました。 |