HistoryDealGetString
HistoryDealGetString
返回要求的交易属性,交易属性一定是字符串型,有2个变量函数可供使用。
- 立即返回属性值。
string HistoryDealGetString(
ulong ticket_number, // 订单号
ENUM_DEAL_PROPERTY_STRING property_id // 属性标识符
);- 依据函数成功与否返回真值或者错误值。如果成功,目标变量的属性值通过引用传递到最后参量。
bool HistoryDealGetString(
ulong ticket_number, //订单号
ENUM_DEAL_PROPERTY_STRING property_id, // 属性标识符
string& string_var // 这里接受属性值
);参量
- ticket_number
[in] 交易订单号。
- property_id
[in] 交易属性标识符。值可以是 ENUM_DEAL_PROPERTY_STRING 列举值中的一个。
- string_var
[out] 接收要求属性值的字符串型变量。
返回值
字符串型 值。
注释
不要弄混 订单, 交易 和 仓位。 每笔交易都按照订单执行,每个仓位都是一个或多个交易的值。
示例:
//+------------------------------------------------------------------+
//| 脚本程序起始函数 |
//+------------------------------------------------------------------+
void OnStart()
{
//--- 请求交易和订单历史
if(!HistorySelect(0, TimeCurrent()))
{
Print("HistorySelect() failed. Error ", GetLastError());
return;
}
//--- 根据账户历史中的交易列表做循环
int total=HistoryDealsTotal();
for(int i=0; i<total; i++)
{
//--- 取得下一个交易的编号 (自动选择交易以取得它的属性)
ulong ticket=HistoryDealGetTicket(i);
if(ticket==0)
continue;
//--- 取得交易的类型和方向并显示选中交易实数属性列表的标题
string type=DealTypeDescription((ENUM_DEAL_TYPE)HistoryDealGetInteger(ticket, DEAL_TYPE));
string entry=DealEntryDescription((ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticket, DEAL_ENTRY));
PrintFormat("String properties of an deal %s entry %s #%I64u:", type, entry, ticket);
//--- 在标题下方打印选中交易的全部实数类型属性
HistoryDealPropertiesStringPrint(ticket, 13);
}
/*
结果:
String properties of an deal Buy entry In #2785021084:
Symbol: EURUSD
Comment: Test PositionGetString
Extarnal ID:
String properties of an deal Buy entry Out #2497993663:
Symbol: EURUSD
Comment: [tp 1.08639]
Extarnal ID:
*/
}
//+------------------------------------------------------------------+
//| 在日志中显示选中交易的字符串型属性 |
//+------------------------------------------------------------------+
void HistoryDealPropertiesStringPrint(const ulong ticket, const uint header_width=0)
{
uint w=0;
string header="";
string value ="";
//--- 定义标题文字和标题栏位的宽度
//--- 如果传给函数的标题宽度为0, 则宽度为标题文字行的大小+1
header="Symbol:";
w=(header_width==0 ? header.Length()+1 : header_width);
//--- 取得并在日志中以指定标题宽度显示交易的交易品种
if(!HistoryDealGetString(ticket, DEAL_SYMBOL, value))
return;
PrintFormat("%-*s%-s", w, header, value);
//--- 在日志中显示交易的注释
header="Comment:";
w=(header_width==0 ? header.Length()+1 : header_width);
if(!HistoryDealGetString(ticket, DEAL_COMMENT, value))
return;
PrintFormat("%-*s%-s", w, header, value);
//--- 显示外部交易系统中的交易 ID
header="Extarnal ID:";
w=(header_width==0 ? header.Length()+1 : header_width);
if(!HistoryDealGetString(ticket, DEAL_EXTERNAL_ID, value))
return;
PrintFormat("%-*s%-s", w, header, value);
}
//+------------------------------------------------------------------+
//| 返回交易类型的描述 |
//+------------------------------------------------------------------+
string DealTypeDescription(const ENUM_DEAL_TYPE type)
{
switch(type)
{
case DEAL_TYPE_BUY : return("Buy");
case DEAL_TYPE_SELL : return("Sell");
case DEAL_TYPE_BALANCE : return("Balance");
case DEAL_TYPE_CREDIT : return("Credit");
case DEAL_TYPE_CHARGE : return("Additional charge");
case DEAL_TYPE_CORRECTION : return("Correction");
case DEAL_TYPE_BONUS : return("Bonus");
case DEAL_TYPE_COMMISSION : return("Additional commission");
case DEAL_TYPE_COMMISSION_DAILY : return("Daily commission");
case DEAL_TYPE_COMMISSION_MONTHLY : return("Monthly commission");
case DEAL_TYPE_COMMISSION_AGENT_DAILY : return("Daily agent commission");
case DEAL_TYPE_COMMISSION_AGENT_MONTHLY: return("Monthly agent commission");
case DEAL_TYPE_INTEREST : return("Interest rate");
case DEAL_TYPE_BUY_CANCELED : return("Canceled buy deal");
case DEAL_TYPE_SELL_CANCELED : return("Canceled sell deal");
case DEAL_DIVIDEND : return("Dividend operations");
case DEAL_DIVIDEND_FRANKED : return("Franked (non-taxable) dividend operations");
case DEAL_TAX : return("Tax charges");
default : return("Unknown deal type: "+(string)type);
}
}
//+------------------------------------------------------------------+
//| 返回仓位变化的方法 |
//+------------------------------------------------------------------+
string DealEntryDescription(const ENUM_DEAL_ENTRY entry)
{
switch(entry)
{
case DEAL_ENTRY_IN : return("In");
case DEAL_ENTRY_OUT : return("Out");
case DEAL_ENTRY_INOUT : return("Reverce");
case DEAL_ENTRY_OUT_BY : return("Out by");
case DEAL_ENTRY_STATE : return("Status record");
default : return("Unknown deal entry: "+(string)entry);
}
}另见
HistorySelect(), HistoryDealsTotal(), HistoryDealGetTicket(), 交易属性