2017-02-12 2 views
-1

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

И я собираюсь 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 Terminal -> Сервис -> Параметры -> Советники

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); 

} 


//+------------------------------------------------------------------+ 
+0

Вы хотя бы ** попросили мой предыдущий совет + исходный код для регистрации/отображения содержимого транзакции, завершенной http-POST, в консоли python? >>> http://stackoverflow.com/a/39966404/3666197 повторить запуск + пост, что было зарегистрировано, нормально? ** – user3666197

ответ

2

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

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-способами.

Смежные вопросы