Как заставить скрипт терминала MetaTrader 5 отправлять курс EURUSD BID на мой сервер nodejs через порт 443?

По сути, я хочу, чтобы мой локальный терминал MetaTrader 5 выполнял POST-запросы каждый раз, когда меняется курс BID пары EUR/USD.

И я собираюсь console.log сделать это на своем сервере nodejs:

const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const path = require('path');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');

let env = process.env.NODE_ENV || 'development';

const port = 443;
const connection = 'mongodb://localhost:27017/db';

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));

mongoose.connect(connection)
    .then((db) => {
        console.log('MongoDB up and running!');

        app.post('/fxrates', (req, res) => {
            console.log(req);
        });
         // MY ROUTES for the client
    })
    .catch(console.log);

http.listen(port, () => {
    console.log(`listening on ${port}`);
});

Вот мой скрипт MQ5, который скомпилирован без ошибок. Но когда я запускаю его, я не вижу ничего зарегистрированного в моем терминале сервера nodejs.

И я вижу, как Print("Test:",b); скрипт печатается внутри Meta Trader Experts Tab

Я также добавил в Терминал MetaTrader 5 -> Инструменты -> Параметры -> Советники

http://localhost:443/fxrates

а также

http://localhost/fxrates
http://localhost

MQ5-скрипт

//+------------------------------------------------------------------+
//|                                                      fxrates.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
      //-   string headers;
      string headers;

      char data[], result[];

      string str = "data=value"; // post data variables to send

      StringToCharArray(str,data);

      string b = CharArrayToString(data);

      Print("Test:",b); // just test if good ... it is.

      WebRequest("POST","http://localhost:443/fxrates",NULL,NULL,3000,data,ArraySize(data),result,headers); 

 }


//+------------------------------------------------------------------+

person Georgi Antonov    schedule 12.02.2017    source источник
comment
Вы хотя бы попробовали мой предыдущий совет + исходный код для регистрации/отображения содержимого транзакции, обернутой http-POST, в консоли Python? ››› stackoverflow.com/a/39966404/3666197 перезапустите его + опубликуйте выходные данные, что было зарегистрировано, хорошо?   -  person user3666197    schedule 13.02.2017


Ответы (1)


И почему вы считаете, что все должно пройти нормально?
Как программист вы готовы ловить ошибки... попробуйте так:

int  res  = WebRequest( "POST", ... );
if ( res != 200 ){
     Print( "failed to send. result="
          + (string) res
          + ", LastError="
          + (string) GetLastError()
            );
     return( False );                          //+redefine void F(){} into a bool
}

Тогда давайте посмотрим, что происходит не так.

В будущем вы можете захотеть расширить этот блок другим видом уведомлений (например, по электронной почте), чтобы знать, произошла ли какая-то ошибка.

А пока - пожалуйста, проверьте функцию WebRequest(), ваш параметр времени ожидания равен NULL.

Вам нужно WebRequest#2 для POST-методов.

person Daniel Kniaz    schedule 13.02.2017