MqlDateTime
このデータ型構造体は 9 個の int 型のフィールドを含みます。
struct MqlDateTime
{
int year; // 年
int mon; // 月
int day; // 日
int hour; // 時間
int min; // 分
int sec; // 秒
int day_of_week; // 曜日(日曜が 0、月曜が 1、…土曜が 6 )
int day_of_year; // 年の日番号(1月1日には、ゼロの数の値が割り当てられる)
};
|
注意事項
例:
void OnStart()
{
//—
datetime date1=D’2008.03.01′;
datetime date2=D’2009.03.01′;
MqlDateTime str1,str2;
TimeToStruct(date1,str1);
TimeToStruct(date2,str2);
printf(“%02d.%02d.%4d, day of year = %d”,str1.day,str1.mon,
str1.year,str1.day_of_year);
printf(“%02d.%02d.%4d, day of year = %d”,str2.day,str2.mon,
str2.year,str2.day_of_year);
}
/* 結果
01.03.2008, day of year = 60
01.03.2009, day of year = 59
*/
|
参照
指標入力パラメータの構造体(MqlParam)
MqlParam 構造体は IndicatorCreate() 関数を使用してテクニカル指標ハンドルを作成する際の入力パラメータを提供するためにデザインされています。
struct MqlParam
{
ENUM_DATATYPE type; // 入力パラメータの型。値は ENUM_DATATYPE
long integer_value; // 整数型を格納するフィールド
double double_value; // double 型を格納するフィールド
string string_value; // string 型を格納するフィールド
};
|
全ての指標入力パラメータは、MqlParam 型の配列の形で送信され、この配列の各要素の type フィールドは、要素によって送信されるデータの型を指定します。指標値は、初めに、type フィールドに ENUM_DATATYPE のどちらの列挙値があるかによって各要素に適切なフィールドに配置する必要があります(integer_value、double_value 及び string_value)。
指標のタイプとして IND_CUSTOM 値が IndicatorCreate() 関数の第三パラメータで受け渡される場合、入力パラメータ配列の最初の要素の type フィールドは ENUM_DATATYPE 列挙の TYPE_STRING 値を含み、string_value フィールドはカスタム指標の名称を含まなければなりません。
MqlRates
この構造体は、価格、ボリュームとスプレッドの情報を提供します。
struct MqlRates
{
datetime time; // 期間開始時間
double open; // 始値
double high; // 期間中の最高値
double low; // 期間中の最安値
double close; // 終値
long tick_volume; // ティックボリューム
int spread; // スプレッド
long real_volume; // 取引高
};
|
例:
void OnStart()
{
MqlRates rates[];
int copied=CopyRates(NULL,0,0,100,rates);
if(copied<=0)
Print(“Error copying price data “,GetLastError());
else Print(“Copied “,ArraySize(rates),” bars”);
}
|
参照
MqlBookInfo
板情報についての情報を提供します。
struct MqlBookInfo
{
ENUM_BOOK_TYPE type; // ENUM_BOOK_TYPE 列挙での注文の種類
double price; // 価格
long volume; // ボリューム
double volume_real; // より正確なボリューム
};
|
注意事項
例:
MqlBookInfo priceArray[];
bool getBook=MarketBookGet(NULL,priceArray);
if(getBook)
{
int size=ArraySize(priceArray);
Print(“MarketBookInfo about “,Symbol());
}
else
{
Print(“Failed to receive DOM for the symbol “,Symbol());
}
|
参照
取引リクエスト構造体 (MqlTradeRequest)
クライアント端末と注文確定操作を実行する取引サーバとの間の相互作用は、取引リクエストを用いて行われます。取引リクエストは取引を実行するために必要な全てのフィールドが含まれている MqlTradeRequest 構造体で表されます。リクエスト処理の結果は MqlTradeResult 型の構造体で表されます。
struct MqlTradeRequest
{
ENUM_TRADE_REQUEST_ACTIONS action; // 取引の種類
ulong magic; // エキスパートアドバイザー ID(マジックナンバー)
ulong order; // 注文チケット
string symbol; // 取引シンボル
double volume; // 約定のための要求されたボリューム(ロット単位)
double price; // 価格
double stoplimit; // 注文のストップリミットレベル
double sl; // 注文の決済逆指値レベル
double tp; // 注文の決済指値レベル
ulong deviation; // リクエストされた価格からの可能な最大偏差
ENUM_ORDER_TYPE type; // 注文の種類
ENUM_ORDER_TYPE_FILLING type_filling; // 注文実行の種類
ENUM_ORDER_TYPE_TIME type_time; // 注文期限切れの種類
datetime expiration; // 注文期限切れの時刻 (ORDER_TIME_SPECIFIED 型の注文)
string comment; // 注文コメント
ulong position; // Position ticket
ulong position_by; // The ticket of an opposite position
};
|
フィールドの説明
フィールド
|
説明
|
action
|
取引操作の種類値は ENUM_TRADE_REQUEST_ACTIONS 列挙値の 1 つです。
|
magic
|
エキスパートアドバイザー ID。取引注文の分析処理の整理を可能にします。取引リクエストを送信する際に、各エキスパートアドバイザーには、固有の ID を設定することが出来ます。
|
order
|
注文チケット。未決注文を変更するために使用されます。
|
symbol
|
注文シンボル。注文の変更とポジション決済操作には必要ありません。
|
volume
|
リクエストされた注文ボリューム(ロット単位)。約定の出来高は注文実行の種類によって異なります。
|
price
|
注文が実行されなければならない値に達している価格。「成行」実行タイプのシンボルの成行注文(TRADE_ACTION_DEALのSYMBOL_TRADE_EXECUTION_MARKET)では価格の指定は必要ありません。
|
stoplimit
|
Limit pending 注文が置かれる価格 値(この条件は必須です)。それまで未決注文は出されません。
|
sl
|
不利な値動きの際の決済逆指値。
|
tp
|
有利な値動きの際の決済指値。
|
deviation
|
ポイントで指定された最大価格偏差。
|
type
|
注文の種類。ENUM_ORDER_TYPE 列挙値の 1 つ。
|
type_filling
|
注文実行の種類。ENUM_ORDER_TYPE_FILLING 列挙値の 1 つ。
|
type_time
|
注文期限切れの種類。ENUM_ORDER_TYPE_TIME 列挙値の 1 つ。
|
expiration
|
注文期限切れの時刻(ORDER_TIME_SPECIFIED 型)。
|
comment
|
注文コメント。
|
position
|
ポジションチケット。ポジションの決済や変更をするときに、ポジションの一意義の認証の為に埋める必要があります。原則として、その結果としてポジションを保有する、注文のチケットに対応します。
|
position_by
|
反対ポジションのチケット。反対ポジション(同じ商品であるが反対側に保有するポジション)の決済時に使用されます。
|
ヘッジシステムでのポジションの変更または決済の時には、そのチケット(MqlTradeRequest::position)を必ず指定してください。ネッティングシステムでもチケットを指定する必要がありますが、ポジションの識別はシンボル名で行われます。
|
取引操作を実行する注文を送信するには、OrderSend() 関数の使用が必要です。各取引操作のためには、必須項目を指定する必要があります。任意のフィールドを指定することも出来ます。取引注文を送信するには 7 つの可能なケースがあります。
Request Execution
- action
- symbol
- volume
- price
- sl
- tp
- deviation
- type
- type_filling
即時実行
- action
- symbol
- volume
- price
- sl
- tp
- deviation
- type
- type_filling
マーケット実行
- action
- symbol
- volume
- type
- type_filling
エクスチェンジ実行
- action
- symbol
- volume
- type
- type_filling
#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+——————————————————————+
//| 買いポジションの発注 |
//+——————————————————————+
void OnStart()
{
//— リクエストと結果の宣言と初期化
MqlTradeRequest request={0};
MqlTradeResult result={0};
//— リクエストのパラメータ
request.action =TRADE_ACTION_DEAL; // 取引操作タイプ
request.symbol =Symbol(); // シンボル
request.volume =0.1; // 0.1ロットのボリューム
request.type =ORDER_TYPE_BUY; // 注文タイプ
request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // 発注価格
request.deviation=5; // 価格からの許容偏差
request.magic =EXPERT_MAGIC; // 注文のMagicNumber
//— リクエストの送信
if(!OrderSend(request,result))
PrintFormat(“OrderSend error %d”,GetLastError()); // リクエストの送信が失敗した場合、エラーコードを出力する
//— 操作に関する情報
PrintFormat(“retcode=%u deal=%I64u order=%I64u”,result.retcode,result.deal,result.order);
}
//+——————————————————————+
|
売りポジションを持つ 取引操作TRADE_ACTION_DEALの例:
#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+——————————————————————+
//| 売りポジションを持つ |
//+——————————————————————+
void OnStart()
{
//— リクエストと結果の宣言と初期化
MqlTradeRequest request={0};
MqlTradeResult result={0};
//— リクエストのパラメータ
request.action =TRADE_ACTION_DEAL; // 取引操作タイプ
request.symbol =Symbol(); // シンボル
request.volume =0.2; // 0.2ロットのボリューム
request.type =ORDER_TYPE_SELL; // 注文タイプ
request.price =SymbolInfoDouble(Symbol(),SYMBOL_BID); // 発注価格
request.deviation=5; // 価格からの許容偏差
request.magic =EXPERT_MAGIC; // 注文のMagicNumber
//— リクエストの送信
if(!OrderSend(request,result))
PrintFormat(“OrderSend error %d”,GetLastError()); // リクエストの送信が失敗した場合、エラーコードを出力する
//— 操作についての情報
PrintFormat(“retcode=%u deal=%I64u order=%I64u”,result.retcode,result.deal,result.order);
}
//+——————————————————————+
|
ポジションを決済する 取引操作TRADE_ACTION_DEALの例:
#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+——————————————————————+
//| 全てのポジションを決済 |
//+——————————————————————+
void OnStart()
{
//— 結果とリクエストの宣言
MqlTradeRequest request;
MqlTradeResult result;
int total=PositionsTotal(); // 保有ポジション数
//— 全ての保有ポジションの取捨
for(int i=total-1; i>=0; i–)
{
//— 注文のパラメータ
ulong position_ticket=PositionGetTicket(i); // ポジションチケット
string position_symbol=PositionGetString(POSITION_SYMBOL); // シンボル
int digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // 小数点以下の桁数
ulong magic=PositionGetInteger(POSITION_MAGIC); // ポジションのMagicNumber
double volume=PositionGetDouble(POSITION_VOLUME); // ポジションボリューム
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // ポジションタイプ
//— ポジション情報の出力
PrintFormat(“#%I64u %s %s %.2f %s [%I64d]”,
position_ticket,
position_symbol,
EnumToString(type),
volume,
DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
magic);
//— MagicNumberが一致している場合
if(magic==EXPERT_MAGIC)
{
//— リクエストと結果の値のゼロ化
ZeroMemory(request);
ZeroMemory(result);
//— 操作パラメータの設定
request.action =TRADE_ACTION_DEAL; // 取引操作タイプ
request.position =position_ticket; // ポジションチケット
request.symbol =position_symbol; // シンボル
request.volume =volume; // ポジションボリューム
request.deviation=5; // 価格からの許容偏差
request.magic =EXPERT_MAGIC; // ポジションのMagicNumber
//— ポジションタイプによる注文タイプと価格の設定
if(type==POSITION_TYPE_BUY)
{
request.price=SymbolInfoDouble(position_symbol,SYMBOL_BID);
request.type =ORDER_TYPE_SELL;
}
else
{
request.price=SymbolInfoDouble(position_symbol,SYMBOL_ASK);
request.type =ORDER_TYPE_BUY;
}
//— 決済情報の出力
PrintFormat(“Close #%I64d %s %s”,position_ticket,position_symbol,EnumToString(type));
//— リクエストの送信
if(!OrderSend(request,result))
PrintFormat(“OrderSend error %d”,GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力
//— 操作情報
PrintFormat(“retcode=%u deal=%I64u order=%I64u”,result.retcode,result.deal,result.order);
//—
}
}
}
//+——————————————————————+
|
SL & TP 更新
保有ポジションのストップロスとテイクプロフィットの値を変更する 取引操作 TRADE_ACTION_SLTPの例:
#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+——————————————————————+
//| ポジションのストップロスとテイクプロフィットを変更する |
//+——————————————————————+
void OnStart()
{
//— リクエストと結果の宣言
MqlTradeRequest request;
MqlTradeResult result;
int total=PositionsTotal(); // 保有ポジション数
//— 全ての保有ポジションを取捨
for(int i=0; i<total; i++)
{
//— 注文パラメータ
ulong position_ticket=PositionGetTicket(i);// ポジションチケット
string position_symbol=PositionGetString(POSITION_SYMBOL); // シンボル
int digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); // 小数点以下の桁数
ulong magic=PositionGetInteger(POSITION_MAGIC); // ポジションのMagicNumber
double volume=PositionGetDouble(POSITION_VOLUME); // ポジションボリューム
double sl=PositionGetDouble(POSITION_SL); // ポジションのStop Loss
double tp=PositionGetDouble(POSITION_TP); // ポジションのTake Profit
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); // ポジションタイプ
//— ポジション情報の出力
PrintFormat(“#%I64u %s %s %.2f %s sl: %s tp: %s [%I64d]”,
position_ticket,
position_symbol,
EnumToString(type),
volume,
DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
DoubleToString(sl,digits),
DoubleToString(tp,digits),
magic);
//— MagicNumberが一致し、ストップロスとテイクプロフィットが指定されていない場合
if(magic==EXPERT_MAGIC && sl==0 && tp==0)
{
//— 現在の価格レートの計算
double price=PositionGetDouble(POSITION_PRICE_OPEN);
double bid=SymbolInfoDouble(position_symbol,SYMBOL_BID);
double ask=SymbolInfoDouble(position_symbol,SYMBOL_ASK);
int stop_level=(int)SymbolInfoInteger(position_symbol,SYMBOL_TRADE_STOPS_LEVEL);
double price_level;
//— 現在の決済価格からの最小許容オフセットが指定されていない場合
if(stop_level<=0)
stop_level=150; // 現在の決済価格から150ポイントのオフセットを設定する
else
stop_level+=50; // 念の為オフセットレベルは(SYMBOL_TRADE_STOPS_LEVEL + 50)ポイントと同じにする
//— Stop LossとTake Profitの値の計算と四捨五入
price_level=stop_level*SymbolInfoDouble(position_symbol,SYMBOL_POINT);
if(type==POSITION_TYPE_BUY)
{
sl=NormalizeDouble(bid-price_level,digits);
tp=NormalizeDouble(bid+price_level,digits);
}
else
{
sl=NormalizeDouble(ask+price_level,digits);
tp=NormalizeDouble(ask-price_level,digits);
}
//— リクエストと結果の値のゼロ化
ZeroMemory(request);
ZeroMemory(result);
//— 操作パラメータの設定
request.action =TRADE_ACTION_SLTP; // 取引操作タイプ
request.position=position_ticket; // ポジションシンボル
request.symbol=position_symbol; // シンボル
request.sl =sl; // ポジションのStop Loss
request.tp =tp; // ポジションのTake Profit
request.magic=EXPERT_MAGIC; // MagicNumber позиции
//— 変更情報の出力
PrintFormat(“Modify #%I64d %s %s”,position_ticket,position_symbol,EnumToString(type));
//— リクエストの送信
if(!OrderSend(request,result))
PrintFormat(“OrderSend error %d”,GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力する
//— 操作情報
PrintFormat(“retcode=%u deal=%I64u order=%I64u”,result.retcode,result.deal,result.order);
}
}
}
//+——————————————————————+
|
未決注文
- action
- symbol
- volume
- price
- stoplimit
- sl
- tp
- type
- type_filling
- type_time
- expiration
#property description “未決注文設定の例”
#property script_show_inputs
#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
input ENUM_ORDER_TYPE orderType=ORDER_TYPE_BUY_LIMIT; // 注文タイプ
//+——————————————————————+
//| 未決注文の設定 |
//+——————————————————————+
void OnStart()
{
//— リクエストと結果の宣言と初期化
MqlTradeRequest request={0};
MqlTradeResult result={0};
//— 未決注文の設定の為のパラメータ
request.action =TRADE_ACTION_PENDING; // 取引操作タイプ
request.symbol =Symbol(); // シンボル
request.volume =0.1; // 0.1ロットのボリューム
request.deviation=2; // 価格からの許容偏差
request.magic =EXPERT_MAGIC; // 注文のMagicNumber
int offset = 50; // 注文設定の為の現在の価格からのオフセット(ポイント)
double price; // 注文の発動価格
double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT); // ポイントサイズ
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); // 小数点以下の桁数(精度)
//— 操作タイプのチェック
if(orderType==ORDER_TYPE_BUY_LIMIT)
{
request.type =ORDER_TYPE_BUY_LIMIT; // 注文タイプ
price=SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; // 発注価格
request.price =NormalizeDouble(price,digits); // 正規化された発注価格
}
else if(orderType==ORDER_TYPE_SELL_LIMIT)
{
request.type =ORDER_TYPE_SELL_LIMIT; // 注文タイプ
price=SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point; // 発注価格
request.price =NormalizeDouble(price,digits); // 正規化された発注価格
}
else if(orderType==ORDER_TYPE_BUY_STOP)
{
request.type =ORDER_TYPE_BUY_STOP; // 注文タイプ
price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; // 発注価格
request.price=NormalizeDouble(price,digits); // 正規化された発注価格
}
else if(orderType==ORDER_TYPE_SELL_STOP)
{
request.type =ORDER_TYPE_SELL_STOP; // 注文タイプ
price=SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point; // 発注価格
request.price =NormalizeDouble(price,digits); // 正規化された発注価格
}
else Alert(“この例は未決注文の設定のみを対象にしています”); // もし未決注文ではないものが選択されている場合
//— リクエストの送信
if(!OrderSend(request,result))
PrintFormat(“OrderSend error %d”,GetLastError()); // もしリクエストの送信に失敗した場合、エラーコードを出力する
//— 操作情報
PrintFormat(“retcode=%u deal=%I64u order=%I64u”,result.retcode,result.deal,result.order);
}
//+——————————————————————+
|
未決注文の変更
- action
- order
- price
- sl
- tp
- type_time
- expiration
未決注文の価格レベルを変更する取引操作TRADE_ACTION_MODIFY
#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+——————————————————————+
//| 未決注文の変更 |
//+——————————————————————+
void OnStart()
{
//— リクエストと結果の宣言と初期化
MqlTradeRequest request={0};
MqlTradeResult result={0};
int total=OrdersTotal(); // 保有未決注文数
//— 全ての保有未決注文を取捨
for(int i=0; i<total; i++)
{
//— 注文パラメータ
ulong order_ticket=OrderGetTicket(i); //注文チケット
string order_symbol=Symbol(); // シンボル
int digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS); // 小数点以下の桁数
ulong magic=OrderGetInteger(ORDER_MAGIC); // 注文のMagicNumber
double volume=OrderGetDouble(ORDER_VOLUME_CURRENT); // 現在の注文量
double sl=OrderGetDouble(ORDER_SL); // 現在の注文のStop Loss
double tp=OrderGetDouble(ORDER_TP); // 現在の注文のTake Profit
ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // 注文タイプ
int offset = 50; // 発注の為の現在価格からのオフセット(ポイント)
double price; // 注文発動価格
double point=SymbolInfoDouble(order_symbol,SYMBOL_POINT); // ポイントサイズ
//— 注文情報の出力
PrintFormat(“#%I64u %s %s %.2f %s sl: %s tp: %s [%I64d]”,
order_ticket,
order_symbol,
EnumToString(type),
volume,
DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
DoubleToString(sl,digits),
DoubleToString(tp,digits),
magic);
//— MagicNumberが一致し、Stop LossとTake Profitが設定されていない場合
if(magic==EXPERT_MAGIC && sl==0 && tp==0)
{
request.action=TRADE_ACTION_MODIFY; // 取引操作タイプ
request.order = OrderGetTicket(i); // 注文チケット
request.symbol =Symbol(); // シンボル
request.deviation=5; // 価格からの許容オフセット
//— 価格レベルの設定、タイプに合わせた注文のTake ProfitとStop Loss
if(type==ORDER_TYPE_BUY_LIMIT)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point;
request.tp = NormalizeDouble(price+offset*point,digits);
request.sl = NormalizeDouble(price-offset*point,digits);
request.price =NormalizeDouble(price,digits); // 正規化された発注価格
}
else if(type==ORDER_TYPE_SELL_LIMIT)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point;
request.tp = NormalizeDouble(price-offset*point,digits);
request.sl = NormalizeDouble(price+offset*point,digits);
request.price =NormalizeDouble(price,digits); // 正規化された発注価格
}
else if(type==ORDER_TYPE_BUY_STOP)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point;
request.tp = NormalizeDouble(price+offset*point,digits);
request.sl = NormalizeDouble(price-offset*point,digits);
request.price =NormalizeDouble(price,digits); // 正規化された発注価格
}
else if(type==ORDER_TYPE_SELL_STOP)
{
price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point;
request.tp = NormalizeDouble(price-offset*point,digits);
request.sl = NormalizeDouble(price+offset*point,digits);
request.price =NormalizeDouble(price,digits); // 正規化された発注価格
}
//—リクエストの送信
if(!OrderSend(request,result))
PrintFormat(“OrderSend error %d”,GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力する
//— 操作情報
PrintFormat(“retcode=%u deal=%I64u order=%I64u”,result.retcode,result.deal,result.order);
//— リクエストと結果の値のゼロ化
ZeroMemory(request);
ZeroMemory(result);
}
}
}
//+——————————————————————+
|
未決注文の削除
未決注文の削除をする 取引操作TRADE_ACTION_REMOVEの例:
#define EXPERT_MAGIC 123456 // エキスパートアドバイザのMagicNumber
//+——————————————————————+
//| 未決注文の削除 |
//+——————————————————————+
void OnStart()
{
//— リクエストと結果の宣言と初期化
MqlTradeRequest request={0};
MqlTradeResult result={0};
int total=OrdersTotal(); // 保有未決注文数
//— 全ての保有未決注文を取捨
for(int i=total-1; i>=0; i–)
{
ulong order_ticket=OrderGetTicket(i); // 注文チケット
ulong magic=OrderGetInteger(ORDER_MAGIC); // 注文のMagicNumber
//— MagicNumberが一致している場合
if(magic==EXPERT_MAGIC)
{
//— リクエストと結果の値のゼロ化
ZeroMemory(request);
ZeroMemory(result);
//— 操作パラメータの設定
request.action=TRADE_ACTION_REMOVE; // 取引操作タイプ
request.order = order_ticket; // 注文チケット
//— リクエストの送信
if(!OrderSend(request,result))
PrintFormat(“OrderSend error %d”,GetLastError()); // リクエストの送信に失敗した場合、エラーコードを出力する
//— 操作情報
PrintFormat(“retcode=%u deal=%I64u order=%I64u”,result.retcode,result.deal,result.order);
}
}
}
//+——————————————————————+
|
参照
小切手リクエストの結果の構造体( MqlTradeCheckResult )
取引操作リクエストを取引サーバに送信する前に、チェックすることが推奨されます。このチェックは OrderCheck() 関数に、チェックするリクエストと MqlTradeCheckResult 構造体型の変数を渡すことによってなされます。チェックの結果はこの変数に書かれます。
struct MqlTradeCheckResult
{
uint retcode; // 返信コード
double balance; // 約定実行後の残高
double equity; // 約定実行後の株式
double profit; // 変動利益
double margin; // 証拠金必要条件
double margin_free; // 余剰証拠金
double margin_level; // 証拠金レベル
string comment; // 返信コードコメント(エラーの説明)
};
|
フィールドの説明
フィールド
|
説明
|
retcode
|
リターンコード。
|
balance
|
取引操作実行後の残高値。
|
equity
|
取引操作実行後の株式値。
|
profit
|
取引操作実行後の変動利益。
|
margin
|
取引操作に必要な証拠金。
|
margin_free
|
取引操作実行後に残される余剰証拠金。
|
margin_level
|
取引操作実行後に設定される証拠金レベル。
|
comment
|
返信コードコメント(エラーの説明)。
|
参照
取引リクエスト結果の構造体 (MqlTradeResult)
取引リクエストの結果として、取引サーバは MqlTradeResult 型の特殊な事前定義された構造と取引リクエストの処理結果のデータを返します。
struct MqlTradeResult
{
uint retcode; // 操作のリターンコード
ulong deal; // 実行された場合の 約定チケット
ulong order; // 注文された場合のチケット
double volume; // ブローカーによって確認された約定ボリューム
double price; // ブローカーによって確認された約定価格
double bid; // 現在の売値
double ask; // 現在の買値
string comment; // 操作に対するブローカーコメント(デフォルトは取引サーバの返したコードの記述)
uint request_id; // ディスパッチの際に、端末によって設定されたリクエストID
uint retcode_external; // 外部取引システムのリターンコード
};
|
フィールドの説明
フィールド
|
説明
|
retcode
|
取引サーバのリターンコード。
|
deal
|
約定チケット(注文がなされた場合)。TRADE_ACTION_DEAL 型の取引操作で使用可能です。
|
order
|
注文チケット(注文された場合)。TRADE_ACTION_PENDING 型の取引操作で使用可能です。
|
volume
|
ブローカーによって確認された 約定ボリューム。注文充填タイプによって変化します。
|
price
|
ブローカーによって確認された 約定価格取引リクエストまたは取引操作の deviation フィールドに依存します。
|
bid
|
現在のマーケット売値(リクオート価格)。
|
ask
|
現在のマーケット買値 (リクオート価格)。
|
comment
|
操作に対するブローカーコメント(デフォルトは取引サーバの返したコードの記述)。
|
request_id
|
取引サーバへの送信時に端末によって設定されたリクエストID。
|
retcode_external
|
外部取引システムが返したエラーコード。これらのエラーの種類と使用は取引操作が送信される外部取引システムとブローカーに依存します。
|
取引操作の結果は取引操作を実行するためにOrderSend()に 2 番目のパラメータとして渡される MqlTradeResult type の変数に返されます。
端末は OrdersSend() または OrderSendAsync()関数を使用しての取引サーバへの送信時に request_id フィールドのリクエスト ID を変更します。端末は、取引サーバから実行されるトランザクションに関するメッセージを受信しOnTradeTransaction()関数による処理のためにパラメータとして以下の成分を含んで提出します。
- MqlTradeTransaction 構造体内での取引トランザクションの記述。
- OrderSend() または OrdersSendAsync() 関数から送信された取引リクエストの記述 。リクエスト ID は端末によって取引サーバに送信され、リクエストとその request_id は端末メモリに保存されます。
- 取引リクエストの実行結果は、リクエストのIDを request_id フィールドに含む MqlTradeResult 構造になります。
OnTradeTransaction() 関数は、3 つの入力パラメータを受信しますが、最後の 2 つは TRADE_TRANSACTION_REQUEST 型のトランザクションのみで分析されるべきです。他の全ての場合では、取引リクエストとその実行結果のデータは満たされません。パラメータ分析の例は取引リクエスト構造体をご参照ください。
サーバ送信時の端末による request_id の設定は主に OrderSendAsync() 非同期関数を操作するために導入されました。この識別子は、アクション(OrderSend または OrderSendAsync 関数の呼び出し)と OnTradeTransaction()に送信されたアクションの結果を関連付けます。
例:
//+——————————————————————+
//| 結果処理と取引リクエストを送信する |
//+——————————————————————+
bool MyOrderSend(MqlTradeRequest request,MqlTradeResult result)
{
//— 最後のエラーコードをゼロにリセットする
ResetLastError();
//— リクエストを送信する
bool success=OrderSend(request,result);
//— 失敗したら、理由を見つける
if(!success)
{
int answer=result.retcode;
Print(“TradeLog: Trade request failed. Error = “,GetLastError());
switch(answer)
{
//— リクオート
case 10004:
{
Print(“TRADE_RETCODE_REQUOTE”);
Print(“request.price = “,request.price,” result.ask = “,
result.ask,” result.bid = “,result.bid);
break;
}
//— 注文がサーバに受け入れられない
case 10006:
{
Print(“TRADE_RETCODE_REJECT”);
Print(“request.price = “,request.price,” result.ask = “,
result.ask,” result.bid = “,result.bid);
break;
}
//— 無効な価格
case 10015:
{
Print(“TRADE_RETCODE_INVALID_PRICE”);
Print(“request.price = “,request.price,” result.ask = “,
result.ask,” result.bid = “,result.bid);
break;
}
//— 無効な SL 及び/または TP
case 10016:
{
Print(“TRADE_RETCODE_INVALID_STOPS”);
Print(“request.sl = “,request.sl,” request.tp = “,request.tp);
Print(“result.ask = “,result.ask,” result.bid = “,result.bid);
break;
}
//— 無効なボリューム
case 10014:
{
Print(“TRADE_RETCODE_INVALID_VOLUME”);
Print(“request.volume = “,request.volume,” result.volume = “,
result.volume);
break;
}
//— 取引操作に不充分なメモリ
case 10019:
{
Print(“TRADE_RETCODE_NO_MONEY”);
Print(“request.volume = “,request.volume,” result.volume = “,
result.volume,” result.comment = “,result.comment);
break;
}
//— 他の理由。サーバ応答コードを出力する
default:
{
Print(“Other answer = “,answer);
}
}
//— false を返して、取引リクエストの失敗結果を通知する
return(false);
}
//— OrderSend() が true を返す。- 答えを繰り返す。
return(true);
}
|
取引処理構造体 (MqlTradeTransaction)
取引口座にいくつかの明確なアクションを実行すると、状態が変更されます。アクションの例は下記です。
- クライアント端末内の任意の MQL5 アプリケーションから OrderSend と OrderSendAsync 関数を使用して取引リクエストを送信し、取引が実行される。
- 端末のグラフィカルインターフェースを使用して取引リクエストを送信し、取引が実行される。
- サーバ上で未決注文と逆指値注文が執行される。
- 取引サーバ側で操作を行う。
これらのアクションの結果として以下の取引トランザクションが実行されます。
- 取引リクエストの処理
- 未執行注文の変更
- 注文履歴の変更
- 約定履歴の変更
- ポジションの変更
例えば、市場の買い注文を送信する際に、注文が処理され、買い注文が口座に記録されます。その後注文が実行されオープン注文の表から削除されて注文履歴に追加されます。約定履歴に追加され新しいポジションが作成されます。これらのアクションは全て取引トランザクションです。
取引処理の口座への適応のために、MQL5 では特別な OnTradeTransaction() ハンドラ—が提供されています。ハンドラ—の1 番目のパラメータは取引処理を記述する MqlTradeTransaction 構造体を取得します。
struct MqlTradeTransaction
{
ulong deal; // 約定チケット
ulong order; // 注文チケット
string symbol; // 取引銘柄名
ENUM_TRADE_TRANSACTION_TYPE type; // 取引トランザクションの種類
ENUM_ORDER_TYPE order_type; // 注文の種類
ENUM_ORDER_STATE order_state; // 注文状態
ENUM_DEAL_TYPE deal_type; // 約定の種類
ENUM_ORDER_TYPE_TIME time_type; // 作用時間の 注文種類
datetime time_expiration; // 注文の期限
double price; // 価格
double price_trigger; // ストップリミット注文アクティベーションの価格
double price_sl; // 決済逆指値レベル
double price_tp; // 決済指値レベル
double volume; // ボリューム(ロット単位)
ulong position; // ポジションチケット
ulong position_by; // 反対ポジションのチケット
};
|
フィールドの説明
フィールド
|
説明
|
deal
|
約定チケット。
|
order
|
注文チケット。
|
symbol
|
トランザクションが実行される、取引シンボルの名称。
|
type
|
取引トランザクションの種類。値は ENUM_TRADE_TRANSACTION_TYPE 列挙値のいずれかです。
|
order_type
|
取引注文の種類。値は ENUM_ORDER_TYPE 列挙値のいずれかです。
|
order_state
|
取引注文の状態。値は ENUM_ORDER_STATE 列挙値のいずれかです。
|
deal_type
|
約定の種類。値は ENUM_DEAL_TYPE 列挙値のいずれかです。
|
type_time
|
期限切れ後の注文の種類。値は ENUM_ORDER_TYPE_TIME 列挙値のいずれかです。
|
time_expiration
|
未決注 文の期限切れ日時 (ORDER_TIME_SPECIFIED と ORDER_TIME_SPECIFIED_DAY 型の注文)。
|
price
|
価格。取引トランザクションの種類によって、注文価格、 約定またはポジションの価格。
|
price_trigger
|
指値つきストップ注文(活性化)価格(ORDER_TYPE_BUY_STOP_LIMIT と ORDER_TYPE_SELL_STOP_LIMIT)。
|
price_sl
|
決済逆指値。取引トランザクションの種類によって、注文、 約定、またはポジション。
|
price_tp
|
決済指値。取引トランザクションの種類によって、注文、 約定、またはポジション。
|
ボリューム
|
ロットでのボリューム。取引トランザクションの種類によって、注文、 約定、またはポジションの現在のボリューム。
|
position
|
トランザクションが影響を与えたポジションチケット。
|
position_by
|
反対ポジションのチケット。反対ポジション(同じ商品であるが反対側に保有するポジション)の決済時に使用されます。
|
受信したトランザクション分析の必須パラメータはtype フィールドで指定された型です。例えば、トランザクションが TRADE_TRANSACTION_REQUEST タイプ(サーバによる取引リクエスト処理の結果が受信された)の場合、構造体のtypeフィールド のみが書き入れられています。他のフィールドは分析されません。この場合、下記のように、OnTradeTransaction() ハンドラ—に渡されたrequest 及び result 追加パラメータの分析が可能です。
取引操作タイプのデータによってで、取引口座の注文、ポジションや 約定の現在の状態を分析することが出来ます。サーバに送信された 1 つの取引リクエストが複数の新しいトランザクションを生成することがあることは、留意されるべきです。端末におけるこれらのトランザクションの到着の優先順位は保証されません。
MqlTradeTransaction 構造は、取引トランザクションの種類に応じて異なる方法で書き入れられています(ENUM_TRADE_TRANSACTION_TYPE)。
TRADE_TRANSACTION_ORDER_* 及び TRADE_TRANSACTION_HISTORY_*
- order – 注文チケット。
- symbol – 注文銘柄名。
- type – 取引トランザクションの種類。
- order_type – 注文の種類。
- orders_state – 注文の現状態。
- time_type – 注文期限切れの種類。
- time_expiration – 注文期限切れの時刻 (ORDER_TIME_SPECIFIED 及び ORDER_TIME_SPECIFIED_DAY 期限切れ型を持つ注文)。
- price – クライアントによって指定された注文価格。
- price_trigger – 指値つきストップ注文のストップ価格(ORDER_TYPE_BUY_STOP_LIMIT 及び ORDER_TYPE_SELL_STOP_LIMIT のみ)。
- price_sl – 決済逆指値(注文で指定されている場合)。
- price_tp – 決済指値(注文で指定されている場合)。
- volume – 現在の注文のボリューム。初回注文ボリュームは、HistoryOrders* 関数を使用して注文履歴で見つけることが出来ます。
- position – 注文実行の結果として保有、変更、決済されたポジションのチケット。成行注文の為にのみ記入されます。TRADE_TRANSACTION_ORDER_ADDの為には記入されません。
- position_by – 反対ポジションのチケット。反対ポジションを決済する注文(close by)の為にのみ記入されます。
TRADE_TRANSACTION_DEAL_*
- deal – 約定チケット
- order – 約定が基づいている注文チケット
- symbol – 約定銘柄名
- type – 取引トランザクションの種類。
- deal_type – 約定の種類
- price – 約定価格
- price_sl – 決済逆指値(約定が基づいている注文で指定された場合に書き入れられる)
- price_tp – 決済指値(約定が基づいている注文で指定された場合に書き入れられる)
- volume – 約定ボリューム(ロット単位)
- position – 取引実行の結果、保有、変更、決済されたポジションのチケット。
- position_by – 反対ポジションのチケット。反対ポジション決済の取引(out by)の為にのみ記入されます。
TRADE_TRANSACTION_POSITION
- symbol – ポジション銘柄名
- type – 取引トランザクションの種類。
- deal_type – ポジションの種類(DEAL_TYPE_BUY または DEAL_TYPE_SELL)
- price – 加重平均ポジションの始値
- price_sl – 決済逆指値
- price_tp – 決済指値
- volume – 変更された場合のポジションボリューム(ロット単位)
約定実行の結果としてのポジション変更(追加、変更または閉鎖)は、TRADE_TRANSACTION_POSITION トランザクションの発生にはつながりません。
|
TRADE_TRANSACTION_REQUEST
この様なトランザクションでは type フィールド(取引トランザクションの種類)のみを分析する必要があります。OnTradeTransaction 関数の第 2 また第 3 パラメータ(request と result)も追加データのために分析する必要があります。
|
例:
input int MagicNumber=1234567;
//— CTrade 取引クラスを有効にしてクラス変数を宣言する
#include <Trade\Trade.mqh>
CTrade trade;
//— 未決注文インストールと削除のフラグ
bool pending_done=false;
bool pending_deleted=false;
//— 未決注文チケットはここに保存される
ulong order_ticket;
//+——————————————————————+
//| エキスパート初期化に使用される関数 |
//+——————————————————————+
int OnInit()
{
//— MagicNumber を設定して全ての注文をマークする
trade.SetExpertMagicNumber(MagicNumber);
//— 取引リクエストは OrderSendAsync() 関数を使用して非同期モードで送信される
trade.SetAsyncMode(true);
//— 変数をゼロで初期化する
order_ticket=0;
//—
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| エキスパートティック関数 |
//+——————————————————————+
void OnTick()
{
//—未決注文のインストール
if(!pending_done)
{
double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double buy_stop_price=NormalizeDouble(ask+1000*_Point,(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS));
bool res=trade.BuyStop(0.1,buy_stop_price,_Symbol);
//— BuyStop() 関数が成功
if(res)
{
pending_done=true;
//— ctrade から送信リクエストした結果の取得
MqlTradeResult trade_result;
trade.Result(trade_result);
//— 送信されたリクエストの request_id を取得
uint request_id=trade_result.request_id;
Print(“Request has been sent to set a pending order. Request_ID=”,request_id);
//— 注文チケットを保存する(CTrade への送信に非同期モードを使用する場合はゼロ)
order_ticket=trade_result.order;
//— 完成。 OnTick() ハンドラ—を早期終了する。
return;
}
}
//— 未決注文の削除
if(!pending_deleted)
//— 追加のチェック
if(pending_done && (order_ticket!=0))
{
//— 未決注文の削除を試みる
bool res=trade.OrderDelete(order_ticket);
Print(“OrderDelete=”,res);
//— 削除リクエスト送信に成功
if(res)
{
pending_deleted=true;
//— リクエストの実行結果を取得
MqlTradeResult trade_result;
trade.Result(trade_result);
//— 結果から request ID と取得
uint request_id=trade_result.request_id;
//— 操作ログに表示
Print(“The request has been sent to delete a pending order #”,order_ticket,
“. Request_ID=”,request_id,
“\r\n”);
//— リクエスト結果から注文チケットを修正
order_ticket=trade_result.order;
}
}
//—
}
//+——————————————————————+
//| TradeTransaction 関数 |
//+——————————————————————+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//— トランザクション型を列挙値として取得する
ENUM_TRADE_TRANSACTION_TYPE type=(ENUM_TRADE_TRANSACTION_TYPE)trans.type;
//— トランザクションが結果処理のリクエストの場合は、名称のみを表示する
if(type==TRADE_TRANSACTION_REQUEST)
{
Print(EnumToString(type));
//— 取り扱つかわれたリクエストの文字列名を表示する
Print(“————RequestDescription\r\n”,RequestDescription(request));
//— リクエスト結果の記述を表示する
Print(“————ResultDescription\r\n”,TradeResultDescription(result));
//— OnTick() の次のハンドルで削除されるよう、チケットを保存する
if(result.order!=0)
{
//— 次の OnTick() の呼び出しでこの注文をチケットによって削除する
order_ticket=result.order;
Print(” Pending order ticket “,order_ticket,“\r\n”);
}
}
else // 別の種類のトランザクションの完全記述を表示する
//— 受け取ったトランザクションの記述を操作ログに表示する
Print(“————TransactionDescription\r\n”,TransactionDescription(trans));
//—
}
//+——————————————————————+
//| トランザクションのテキスト形式の記述を返す |
//+——————————————————————+
string TransactionDescription(const MqlTradeTransaction &trans)
{
//—
string desc=EnumToString(trans.type)+“\r\n”;
desc+=“Symbol: “+trans.symbol+“\r\n”;
desc+=“Deal ticket: “+(string)trans.deal+“\r\n”;
desc+=“Deal type: “+EnumToString(trans.deal_type)+“\r\n”;
desc+=“Order ticket: “+(string)trans.order+“\r\n”;
desc+=“Order type: “+EnumToString(trans.order_type)+“\r\n”;
desc+=“Order state: “+EnumToString(trans.order_state)+“\r\n”;
desc+=“Order time type: “+EnumToString(trans.time_type)+“\r\n”;
desc+=“Order expiration: “+TimeToString(trans.time_expiration)+“\r\n”;
desc+=“Price: “+StringFormat(“%G”,trans.price)+“\r\n”;
desc+=“Price trigger: “+StringFormat(“%G”,trans.price_trigger)+“\r\n”;
desc+=“Stop Loss: “+StringFormat(“%G”,trans.price_sl)+“\r\n”;
desc+=“Take Profit: “+StringFormat(“%G”,trans.price_tp)+“\r\n”;
desc+=“Volume: “+StringFormat(“%G”,trans.volume)+“\r\n”;
//— 取得した文字列を返す
return desc;
}
//+——————————————————————+
//| 取引リクエストのテキスト形式の記述を返す |
//+——————————————————————+
string RequestDescription(const MqlTradeRequest &request)
{
//—
string desc=EnumToString(request.action)+“\r\n”;
desc+=“Symbol: “+request.symbol+“\r\n”;
desc+=“Magic Number: “+StringFormat(“%d”,request.magic)+“\r\n”;
desc+=“Order ticket: “+(string)request.order+“\r\n”;
desc+=“Order type: “+EnumToString(request.type)+“\r\n”;
desc+=“Order filling: “+EnumToString(request.type_filling)+“\r\n”;
desc+=“Order time type: “+EnumToString(request.type_time)+“\r\n”;
desc+=“Order expiration: “+TimeToString(request.expiration)+“\r\n”;
desc+=“Price: “+StringFormat(“%G”,request.price)+“\r\n”;
desc+=“Deviation points: “+StringFormat(“%G”,request.deviation)+“\r\n”;
desc+=“Stop Loss: “+StringFormat(“%G”,request.sl)+“\r\n”;
desc+=“Take Profit: “+StringFormat(“%G”,request.tp)+“\r\n”;
desc+=“Stop Limit: “+StringFormat(“%G”,request.stoplimit)+“\r\n”;
desc+=“Volume: “+StringFormat(“%G”,request.volume)+“\r\n”;
desc+=“Comment: “+request.comment+“\r\n”;
//— 取得した文字列を返す
return desc;
}
//+——————————————————————+
//| リクエスト処理結果の記述ををテキスト形式で返す |
//+——————————————————————+
string TradeResultDescription(const MqlTradeResult &result)
{
//—
string desc=“Retcode “+(string)result.retcode+“\r\n”;
desc+=“Request ID: “+StringFormat(“%d”,result.request_id)+“\r\n”;
desc+=“Order ticket: “+(string)result.order+“\r\n”;
desc+=“Deal ticket: “+(string)result.deal+“\r\n”;
desc+=“Volume: “+StringFormat(“%G”,result.volume)+“\r\n”;
desc+=“Price: “+StringFormat(“%G”,result.price)+“\r\n”;
desc+=“Ask: “+StringFormat(“%G”,result.ask)+“\r\n”;
desc+=“Bid: “+StringFormat(“%G”,result.bid)+“\r\n”;
desc+=“Comment: “+result.comment+“\r\n”;
//— 取得した文字列を返す
return desc;
}
|
参照
現在の価格を取得する構造体(MqlTick)
銘柄ごとの最新価格を保存する構造体です。現在の価格についての最もニーズのある情報を取得する為のものです。
struct MqlTick
{
datetime time; // 最新の価格更新の時間
double bid; // 現在のBid価格
double ask; // 現在のAsk価格
double last; // 最後の取引の現在価格(Last)
ulong volume; // 現在のLast価格の数量
long time_msc; // ミリ秒単位の最新の価格更新の時間
uint flags; // ティックフラグ
double volume_real; // 現在のLast価格のより正確な数量
};
|
MqlTick型の変数によって一回のSymbolInfoTick()変数の呼び出しでAsk、Bid、Last、Volumeの値を取得することができます。
各ティックは、前回のティックと比べデータが変わったかどうかに関わらず、いつも全てのパラメータが埋められます。ティックヒストリーで前回の数値を検索することなく、あらゆる瞬間の現在の価格状態をいつも見ることができます。例えば、ティックと共にBid価格だけ変わったが、構造体の中では新しい価格の他に、前回のAsk価格や数量など、他のパラメータも表示されます。
現在のティックのデータとどう変わったかを知るには、そのフラグを分析してください。
- TICK_FLAG_BID – ティックがBid価格を変更した
- TICK_FLAG_ASK – ティックがAsk価格を変更した
- TICK_FLAG_LAST – ティックが最終取引価格を変更した
- TICK_FLAG_VOLUME – ティックが数量を変更した
- TICK_FLAG_BUY – 買い取引の結果ティックが発生した
- TICK_FLAG_SELL – 売り取引の結果ティックが発生した
例:
void OnTick()
{
MqlTick last_tick;
//—
if(SymbolInfoTick(Symbol(),last_tick))
{
Print(last_tick.time,“: Bid = “,last_tick.bid,
” Ask = “,last_tick.ask,” Volume = “,last_tick.volume);
}
else Print(“SymbolInfoTick() failed, error = “,GetLastError());
//—
}
|
こちらもご参照ください
経済指標カレンダー構造体
このセクションでは、MetaTraderプラットフォームで直接利用可能な経済指標カレンダーを使用するための構造体について説明します。経済指標カレンダーは、マクロ経済指標、その発表日および重要度の説明を含む既製の「百科事典」です。関連するマクロ経済指標の値は、発行直後にメタトレーダープラットフォームに送信され、国、通貨、重要度ごとに必要な指標を視覚的に追跡できるタグとしてチャートに表示されます。
経済指標カレンダー関数を使用すると、必要な国/通貨ペアの観点から、カスタム重要度基準に従って、着信したイベントの自動分析を実行できます。
国の説明はMqlCalendarCountry構造体で設定されます。これはCalendarCountryById()およびCalendarCountries()関数で使用されます。
struct MqlCalendarCountry
{
ulong id; // 国ID(ISO 3166-1)
string name; // 国名(現在のターミナルエンコーディング)
string code; // 国コード名(ISO 3166-1 alpha-2)
string currency; // 国の通貨コード
string currency_symbol; // 国の通貨の銘柄
string url_name; // mql5.comウェブサイトURLに使用される国名
};
|
イベントの説明はMqlCalendarEvent構造体で設定されます。これはCalendarEventById()、CalendarEventByCountry()、 CalendarEventByCurrency()関数で使用されます。
struct MqlCalendarEvent
{
ulong id; // イベントID
ENUM_CALENDAR_EVENT_TYPE type; // ENUM_CALENDAR_EVENT_TYPE列挙対からのイベントタイプ
ENUM_CALENDAR_EVENT_SECTOR sector; // イベントが関連する部門
ENUM_CALENDAR_EVENT_FREQUENCY frequency; // イベントの頻度
ENUM_CALENDAR_EVENT_TIMEMODE time_mode; // イベント時間モード
ulong country_id; // 国ID
ENUM_CALENDAR_EVENT_UNIT unit; // 経済指標値の単位
ENUM_CALENDAR_EVENT_IMPORTANCE importance; // イベントの重要度
ENUM_CALENDAR_EVENT_MULTIPLIER multiplier; // 経済指標値の乗数
uint digits; // 小数点以下の桁数
string source_url; // イベント発表源のURL
string event_code; // イベントコード
string name; // イベント名(現在のターミナルエンコーディング)
};
|
イベント値はMqlCalendarValue構造体で設定されます。これはCalendarValueById()、CalendarValueHistoryByEvent()、 CalendarValueHistory()、CalendarValueLastByEvent()、 CalendarValueLast()関数で使用されます。
struct MqlCalendarValue
{
ulong id; // 値ID
ulong event_id; // イベントID
datetime time; // イベント日時
datetime period; // イベント報告期間
int revision; // 報告期間に関連して発表された指標の改訂
long actual_value; // 実際の指標値
long prev_value; // 以前の指標値
long revised_prev_value; // 改正された以前の指標値
long forecast_value; // 指標の予測値
ENUM_CALENDAR_EVENT_IMPACT impact_type; // 為替レートへの潜在的影響
};
|
イベント頻度はMqlCalendarEvent構造体で設定されます。可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_FREQUENCY
|
|
CALENDAR_FREQUENCY_NONE
|
Release frequency is not set
|
CALENDAR_FREQUENCY_WEEK
|
Released once a week
|
CALENDAR_FREQUENCY_MONTH
|
Released once a month
|
CALENDAR_FREQUENCY_QUARTER
|
Released once a quarter
|
CALENDAR_FREQUENCY_YEAR
|
Released once a year
|
CALENDAR_FREQUENCY_DAY
|
Released once a day
|
Event type is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_TYPE
|
|
CALENDAR_TYPE_EVENT
|
Event (meeting, speech, etc.)
|
CALENDAR_TYPE_INDICATOR
|
Indicator
|
CALENDAR_TYPE_HOLIDAY
|
Holiday
|
A sector of the economy an event is related to is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_SECTOR
|
|
CALENDAR_SECTOR_NONE
|
Sector is not set
|
CALENDAR_SECTOR_MARKET
|
Market, exchange
|
CALENDAR_SECTOR_GDP
|
国内総生産(Gross Domestic Product、GDP)
|
CALENDAR_SECTOR_JOBS
|
Labor market
|
CALENDAR_SECTOR_PRICES
|
Prices
|
CALENDAR_SECTOR_MONEY
|
Money
|
CALENDAR_SECTOR_TRADE
|
取引
|
CALENDAR_SECTOR_GOVERNMENT
|
Government
|
CALENDAR_SECTOR_BUSINESS
|
Business
|
CALENDAR_SECTOR_CONSUMER
|
Consumption
|
CALENDAR_SECTOR_HOUSING
|
Housing
|
CALENDAR_SECTOR_TAXES
|
Taxes
|
CALENDAR_SECTOR_HOLIDAYS
|
Holidays
|
Event importance is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_IMPORTANCE
|
|
CALENDAR_IMPORTANCE_NONE
|
Importance is not set
|
CALENDAR_IMPORTANCE_LOW
|
Low importance
|
CALENDAR_IMPORTANCE_MODERATE
|
Medium importance
|
CALENDAR_IMPORTANCE_HIGH
|
High importance
|
Measurement unit type used in displaying event values is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_UNIT
|
|
CALENDAR_UNIT_NONE
|
Measurement unit is not set
|
CALENDAR_UNIT_PERCENT
|
Percentage
|
CALENDAR_UNIT_CURRENCY
|
National currency
|
CALENDAR_UNIT_HOUR
|
Hours
|
CALENDAR_UNIT_JOB
|
Jobs
|
CALENDAR_UNIT_RIG
|
Drilling rigs
|
CALENDAR_UNIT_USD
|
USD
|
CALENDAR_UNIT_PEOPLE
|
People
|
CALENDAR_UNIT_MORTGAGE
|
Mortgage loans
|
CALENDAR_UNIT_VOTE
|
Votes
|
CALENDAR_UNIT_BARREL
|
Barrels
|
CALENDAR_UNIT_CUBICFEET
|
Cubic feet
|
CALENDAR_UNIT_POSITION
|
Non-commercial net positions
|
CALENDAR_UNIT_BUILDING
|
Buildings
|
In some cases, economic parameter values require a multiplier set in the MqlCalendarEvent structure. Possible multiplier values are set in the listing ENUM_CALENDAR_EVENT_MULTIPLIER
|
|
CALENDAR_MULTIPLIER_NONE
|
Multiplier is not set
|
CALENDAR_MULTIPLIER_THOUSANDS
|
Thousands
|
CALENDAR_MULTIPLIER_MILLIONS
|
Millions
|
CALENDAR_MULTIPLIER_BILLIONS
|
Billions
|
CALENDAR_MULTIPLIER_TRILLIONS
|
Trillions
|
Event’s potential impact on a national currency rate is indicated in the MqlCalendarValue structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_IMPACT
|
|
CALENDAR_IMPACT_NA
|
Impact is not set
|
CALENDAR_IMPACT_POSITIVE
|
Positive impact
|
CALENDAR_IMPACT_NEGATIVE
|
Negative impact
|
Event time is specified in the MqlCalendarEvent structure. 可能な値はリストで設定されます。ENUM_CALENDAR_EVENT_TIMEMODE
|
|
CALENDAR_TIMEMODE_DATETIME
|
ソースはイベントの正確な時間を公開します
|
CALENDAR_TIMEMODE_DATE
|
終日イベント
|
CALENDAR_TIMEMODE_NOTIME
|
ソースはイベントの時間を公開しない
|
CALENDAR_TIMEMODE_TENTATIVE
|
ソースはイベントの日を公開するが時間を公開しません。時間はイベントの発生時に指定されます。
|
参照
Originally posted 2019-07-29 22:48:41.