如何从.Net ClrWrapper获得询问和出价

时间:2017-03-06 10:11:39

标签: asp.net-web-api metatrader4

我正在使用MetaTrader4.Manager.Wrapper

我想获得所有货币(MT4中的符号)及其出价&从MT4问。我尝试使用:

public IList<Symbol> Get()
    {
        using (var metatrader = new ClrWrapper(new ConnectionParameters
        {
            Login = serverdata.Login,
            Password = serverdata.Password,
            Server = serverdata.Server
        }, serverdata.path))
        {
            var Refresh = metatrader.SymbolsRefresh();

            IList<Symbol> Live = metatrader.SymbolsGetAll();
            return Live;

        }
    }

从代码中我得到了名称:AUDCAD,AUDCHF,EURCHF等,但BidTickValue和AskTickValue返回0.0。

我尝试使用this answer但符号返回null并且Bid返回0。

有没有其他方法可以获得名称和买入价和卖出价? 什么是抽水模式意味着什么? 谢谢你

2 个答案:

答案 0 :(得分:0)

Pumping是MT4模式,当您订阅不同的事件并且MT4服务器向您发送更新时,无需手动请求。

例如:报价,交易,用户。

只有当您处于抽水模式时,

async def _fetch(key): val = self.redis_connection.get(key) while val is None: # Sleep and retry here asyncio.sleep(1) val = self.redis_connection.get(key) return val 才会返回报价,并且会返回最新收到的报价。

如果您不打算使用抽水模式,您可以获得最新的报价用户SymbolsGetAll方法,但速度要慢得多。

答案 1 :(得分:0)

您可以使用出价获取报价,并在没有经理API的情况下直接询问。 您只需将套接字发送到MT4服务器即可。 这是一个例子:

// 1. Start Session.
$ptr=fsockopen('127.0.0.1',443);
// error check
if (!$ptr){
  echo "Connection error";
  exit;
}
// 2. Send request to MT4
fputs($ptr,"WQUOTES-EURUSD,GBPUSD,USDJPY,\nQUIT\n");
// 3. Reading and processing server responses
while(!feof($ptr))
  {
   // read line of symbols
   $line=fgets($ptr,128); 
   // the symbol of the end of result transfer
   if($line=="end\r\n") break; 
   // process
   print $line; 

  }
// 4. Session completion
  fclose($ptr);

以上将以此格式打印报价:方向符号出价询问日期时间。