2017-02-12 4 views
-1

Fondamentalement, je veux que mon terminal MetaTrader 5 local fasse des requêtes POST à ​​chaque fois qu'une paire EUR/USD change de taux BID.Comment créer un script de terminal MetaTrader 5 pour POSTER un débit BID EURUSD sur mon serveur nodejs sur le port 443?

Et je vais console.log dans mon serveur 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}`); 
}); 

Voici mon script MQ5 qui est compilé sans erreurs. Mais quand je l'exécute, je ne vois rien de connecté dans mon terminal serveur nodejs.

Et je vois l'impression Print("Test:",b); script à l'intérieur Meta Trader Experts Tab

J'ai également ajouté dans MetaTrader 5 Terminal -> Outils -> Options -> Expert Advisors

http://localhost:443/fxrates 

et

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

Script 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

Avez-vous au moins ** essayé de donner mon avis précédent + le code source pour consigner/montrer le contenu de la transaction http-POST dans une console python? >>> http://stackoverflow.com/a/39966404/3666197 le relancer + afficher les sorties, ce qui a été enregistré, ok? ** – user3666197

Répondre

2

Et pourquoi croyez-vous que tout doit aller bien?
En tant que programmeur, vous êtes prêt à attraper les erreurs ... essayez ceci:

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 
} 

Alors nous allons voir ce qui se passe mal.

À l'avenir, vous voudrez peut-être étendre ce bloc avec un autre type de notifications (par exemple, e-mail) afin de savoir si une erreur est survenue.

Comme pour maintenant - s'il vous plaît vérifier la fonction WebRequest(), votre paramètre de délai d'attente est NULL.

Vous avez besoin de WebRequest#2 pour POST -methods.