Функция для получения времени удаленного NTP-сервера, которая чаще встречается в высокочастотной торговле или задержках расчета
function ntp_client() { // compatible with backtesting if (IsVirtual()) { return new Date().getTime() } let client = Dial("udp://time.windows.com:123") client.write('\x1b' + Array(47).fill('\0').join('')) let buf = client.read() client.close() if (buf && buf.byteLength == 48) { let dataView = new DataView(buf) return (dataView.getUint32(40, false) - 2208988800) * 1000 + Math.floor((dataView.getUint32(44, false) / 4294967295) * 1000) } return null } // compare local time and binance delay function localDelayBinance() { let delay = 0 for (let i = 0; i < 6; i++) { let ts = 0 // 1 - 4 ignore first time if (i> 0 && i < 5) { ts = new Date().getTime() } let res = HttpQuery("https://fapi.binance.com/fapi/v1/time") let now = new Date().getTime() if (ts > 0) { delay += now - ts } if (i == 5) { return now - JSON.parse(res).serverTime + Math.ceil(delay / 2 / 4) } } } function main() { let timestamp = ntp_client() Log(_D(timestamp) + '.' + timestamp%1000, timestamp) }