关于MQL5开仓的问题

 

各位大神, 我写的一个开仓的代码, 在模拟帐户下,可以返回 order_ticket deal_ticket open_price 这三个值, 但在真实帐户中却 只能返回order_ticket 的值, 另外两个 deal_ticket 和 open_price 返回值为 0 ,

这是为什么啊? 各位大神请赐教一下, 谢谢!

#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Trade\Trade.mqh>
CTrade trade;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(60);
   Print(OpenPosition(ORDER_TYPE_BUY, 0.01));
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int32_t id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ulong OpenPosition(const ENUM_ORDER_TYPE type, const double volume)
  {
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   ulong  order_ticket = 0;
   ulong  deal_ticket  = 0;
   double open_price   = 0;
   if(trade.PositionOpen(_Symbol, type, volume, (type == ORDER_TYPE_BUY) ? ask : bid, 0, 0, ""))
     {
      //                                            真实帐户                模拟帐户
      order_ticket = trade.ResultOrder();  // 可以被获取到           可以被获取到
      deal_ticket  = trade.ResultDeal();   // 获取不到                可以被获取到
      open_price   = trade.ResultPrice();  // 获取不到                可以被获取到
     }
   return(deal_ticket);
  }
//+------------------------------------------------------------------+
 

建議你試試OnTradeTransaction這個函數去讀取你要的數據

研究一下MT5交易平台的交易規則你就會知道原因