我正在使用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。
有没有其他方法可以获得名称和买入价和卖出价? 什么是抽水模式意味着什么? 谢谢你
答案 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);
以上将以此格式打印报价:方向符号出价询问日期时间。