Загрузка файла на FTP сервер из MT4

Недавно у меня была задача реализовать выгрузку информации о сделках на сервер чаще 5 минут, данные необходимо было сохранять на сервер по ftp с частотой от 1 секунды.

Как оказалось в этом нет ничего сложного, достаточно воспользоваться системной библиотекой  в Windows wininet.dll, обычно данная библиотека входит в состав любой версии ОС Windows.

Я не буду приводить код работы т.к. это противоречит моим принципам, а приведу тестовый скрипт для осуществления загрузки файла, при желании вы можете использовать это для реализации своих задач.

//+------------------------------------------------------------------+
//|                                                  SendFtpFile.mq4 |
//|                                             Copyright 2012, DKeN |
//|                                           http://sovetnikov.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, DKeN"
#property link      "http://sovetnikov.net/"
#property show_inputs
/*
подключим библиотеку dll и импортируем нужные нам функции,
параметры и описание функций можно взять из MSDN (ну или google в помощь :-)
*/
#import "wininet.dll"

  int InternetAttemptConnect(
    int    dwReserved=0
  );
 
  int InternetOpenA(
    string lpszAgent,
    int    dwAccessType=0,
    string lpszProxyName="",
    string lpszProxyBypass="",
    int    dwFlags=0
  );
 
  int InternetConnectA(
    int    hInternetSession,
    string lpszServerName,
    int    nServerPort=21,
    string lpszUserName="",
    string lpszPassword="",
    int    nService=1,
    int    nFlags=0,
    int    dwContext=0    
  );
 
  bool InternetCloseHandle(
    int hInet
  );
 
  bool FtpPutFileA (
    int hFtpSession,
    string lpszLocalFile,
    string lpszRemoteFile,
    int dwFlags,
    int dwContext
  );
 
  bool FtpGetFileA (
    int hFtpSession,
    string lpszRemoteFile, 
    string lpszNewFile, 
    bool fFailIfExists,
    int dwFlagsAndAttributes,
    int dwFlags,
    int dwContext
  );
 
#import

int start()
  {
   int rv = InternetAttemptConnect(0); //проверим наличие интернет соединения
   if(rv!=0){
      Print("Нет связи!");
      return (0);
   }
   int rc = InternetOpenA("", 0, "", "", 0); 
 
   if(rc>0){
 
      int rs = InternetConnectA(rc, "ftp_server", "21", "login", "password", 1, 0, 0);//данная функция осуществляет подключение по ftp (21 порт)
 
      if(FtpPutFileA(rs, "C:\\test.html", "test.html", 2, 0)== false)  //функция отправляет заданный файл
         Print("Ошибка передачи файла!");
 
      InternetCloseHandle(rs); //закроем открытые потоки
      InternetCloseHandle(rc);
   } 
   return(0);
  }

скачать скрипт  SendFtpFile

Рекомендуем: