Научите хешировать данные на mql4 - страница 3

 
Reshetov:

Трабла в том, что накладные расходы можно просчитать, а профита за ними не видно. 

я уже в профите и не плохом, весь вопрос в шифровании.
 
TheXpert:

Во-первых не SHA256, а HMAC SHA512.

это на BTC-e
 
sanyooooook:
я уже в профите и не плохом, весь вопрос в шифровании.

После такого сообщения уже поздно профит шифровать: рэкетиры ведь уже в курсе и скоро заглянут на огонёк. И искать им долго не надо: дом на окраине без крыши - там sanyooooook профит шифрует.

 
Reshetov:

После такого сообщения уже поздно профит шифровать: рэкетиры ведь уже в курсе и скоро заглянут на огонёк. И искать им долго не надо: дом на окраине без крыши - там sanyooooook профит шифрует.

"нам не страшен серый волк" )
 
sanyooooook:
это на BTC-e

Понял. Зря кстати боишься. С винапи кстати в любом случае вначале сделать рабочий код, потом переводить его на mql. А писать что-то на mql что представляет собой самостоятельную программу... смысл?

Не хочешь шарп учи питон. Хочешь бабла придется учиться.

 
TheXpert:

Понял. Зря кстати боишься. С винапи кстати в любом случае вначале сделать рабочий код, потом переводить его на mql. А писать что-то на mql что представляет собой самостоятельную программу... смысл?

Не хочешь шарп учи питон. Хочешь бабла придется учиться.

блин вот смотри:

1. на бирже апи, отправка пост запросов в формате json(json слепил это не сложно)

2. в этотм запросе часть данных хешируется, вот в этом у меня проблема, но и это не проблема вроде как разобрался(временно отложил реализацию кода тупым подставлением готового хеша из введённых данных)

3. эта зараза не хочет ни чего отправлять, может я пост не правильно делаю?

//+------------------------------------------------------------------+
//|                                                     POSTBTCE.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <stdlib.mqh>

#import "wininet.dll"

#define INTERNET_OPEN_TYPE_DIRECT       0
#define INTERNET_OPEN_TYPE_PRECONFIG    1
#define INTERNET_OPEN_TYPE_PROXY        3

// Had to cut the following two defines because of silly MQL4 identifier limits

#define _IGNORE_REDIRECT_TO_HTTP        0x00008000
#define _IGNORE_REDIRECT_TO_HTTPS       0x00004000

#define INTERNET_FLAG_KEEP_CONNECTION   0x00400000
#define INTERNET_FLAG_NO_AUTO_REDIRECT  0x00200000
#define INTERNET_FLAG_NO_COOKIES        0x00080000
#define INTERNET_FLAG_RELOAD            0x80000000
#define INTERNET_FLAG_NO_CACHE_WRITE    0x04000000
#define INTERNET_FLAG_DONT_CACHE        0x04000000
#define INTERNET_FLAG_PRAGMA_NOCACHE    0x00000100
#define INTERNET_FLAG_NO_UI             0x00000200

#define HTTP_ADDREQ_FLAG_ADD            0x20000000
#define HTTP_ADDREQ_FLAG_REPLACE        0x80000000

#define INTERNET_SERVICE_HTTP           3
#define INTERNET_DEFAULT_HTTP_PORT      80

#define ICU_ESCAPE                      0x80000000
#define ICU_USERNAME                    0x40000000
#define ICU_NO_ENCODE                   0x20000000
#define ICU_DECODE                      0x10000000
#define ICU_NO_META                     0x08000000
#define ICU_ENCODE_PERCENT              0x00001000
#define ICU_ENCODE_SPACES_ONLY          0x04000000
#define ICU_BROWSER_MODE                0x02000000

#define AGENT                           "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)"
#define BUFSIZ                          128

#define REQUEST_FILE                    "_req.txt"

////////////// PROTOTYPES

bool InternetCanonicalizeUrlA(string lpszUrl, string lpszBuffer, int& lpdwBufferLength[], int dwFlags);

int InternetOpenA(string sAgent, int lAccessType, string sProxyName="", string sProxyBypass="", int lFlags=0);

int InternetOpenUrlA(int hInternetSession, string sUrl, string sHeaders="", int lHeadersLength=0, int lFlags=0,
   int lContext=0);

int InternetReadFile(int hFile, string sBuffer, int lNumBytesToRead, int& lNumberOfBytesRead[]);

int InternetCloseHandle(int hInet);

int InternetConnectA(int handle, string host, int port, string user, string pass, int service, int flags, int context);

bool HttpSendRequestA(int handle, string headers, int headersLen, int& optional[], int optionalLen);

bool HttpAddRequestHeadersA(int handle, string headers, int headersLen, int modifiers);

int HttpOpenRequestA(int hConnect, string lpszVerb, string lpszObjectName, string lpszVersion,
 string lpszReferer, string& lplpszAcceptTypes[], int dwFlags, int dwContext);

#import

//////// CODE

bool HttpGET(string strUrl, string& strWebPage)
{
  int hSession = InternetOpenA(AGENT, INTERNET_OPEN_TYPE_DIRECT, "0", "0", 0);

  int hReq = InternetOpenUrlA(hSession, strUrl, "0", 0,
        INTERNET_FLAG_NO_CACHE_WRITE |
        INTERNET_FLAG_PRAGMA_NOCACHE |
        INTERNET_FLAG_RELOAD, 0);

  if (hReq == 0) {
    return(false);
  }

  int     lReturn[]  = {1};
  string  sBuffer    = "";

  while (TRUE) {
    if (InternetReadFile(hReq, sBuffer, BUFSIZ, lReturn) <= 0 || lReturn[0] == 0) {
      break;
    }
    strWebPage = StringConcatenate(strWebPage, StringSubstr(sBuffer, 0, lReturn[0]));
  }

  InternetCloseHandle(hReq);
  InternetCloseHandle(hSession);

  return (true);
}

/////////// POST

bool HttpPOST(string host, string script, string params[][], string filenames[][], string& strWebPage)
{
  int hIntrn = InternetOpenA(AGENT, INTERNET_OPEN_TYPE_DIRECT, "0", "0", 0);
  if (hIntrn == 0) {
    return (false);
  }

  int hConn = InternetConnectA(hIntrn,
                              host,
                              INTERNET_DEFAULT_HTTP_PORT,
                              NULL,
                              NULL,
                              INTERNET_SERVICE_HTTP,
                              0,
                              NULL);

  if (hConn == 0) {
    return (false);
  }

  int dwOpenRequestFlags =   // _IGNORE_REDIRECT_TO_HTTP |
                             // _IGNORE_REDIRECT_TO_HTTPS |
                             // INTERNET_FLAG_KEEP_CONNECTION |
                             // INTERNET_FLAG_NO_AUTO_REDIRECT |
                             // INTERNET_FLAG_NO_COOKIES |
                             // INTERNET_FLAG_NO_CACHE_WRITE |
                             INTERNET_FLAG_NO_UI |
                             INTERNET_FLAG_RELOAD;

  string accept[] = {"Accept: text/*\r\n"};

  int hReq = HttpOpenRequestA(hConn,
                             "POST",
                             script,
                             "HTTP/1.0",
                             NULL,
                             accept,
                             dwOpenRequestFlags,
                             NULL);

  string strBoundary = "---------------------------HOFSTADTER";
  string strContentHeader = "Content-Type: multipart/form-data; boundary=" + strBoundary;

  HttpAddRequestHeadersA(hReq, strContentHeader, StringLen(strContentHeader), HTTP_ADDREQ_FLAG_REPLACE);

  int i     = 0,
      idx   = 0,
      r     = 0,
      len   = 0
  ;

  string hdr = "";

  int _req = FileOpen(REQUEST_FILE, FILE_BIN|FILE_WRITE);
  if(_req <= 0) {
    return (false);
  }

  // Add parameters to request body

  for (i = ArrayRange(params, 0) - 1; i >= 0; i--) {
    hdr = StringConcatenate(
      "--", strBoundary, "\r\n",
      "Content-Disposition: form-data; name=\"", params[i][0], "\"\r\n\r\n",
      params[i][1], "\r\n");
    FileWriteString(_req, hdr, StringLen(hdr));
  }

  // Add files to request body
  
  for (i = ArrayRange(filenames, 0) - 1; i >= 0; i--) {
    hdr = StringConcatenate(
      "--", strBoundary, "\r\n",
      "Content-Disposition: form-data; name=\"", filenames[i][0], "\"; filename=\"", filenames[i][1], "\"\r\n",
      "Content-Type: application/octet-stream\r\n\r\n");

    FileWriteString(_req, hdr, StringLen(hdr));

    int handle = FileOpen(filenames[i][1], FILE_BIN|FILE_READ);
    if(handle <= 0) {
      return (false);
    }
    len = FileSize(handle);
    for (int b = 0; b < len; b++) {
      FileWriteInteger(_req, FileReadInteger(handle, CHAR_VALUE), CHAR_VALUE);
    }
    FileClose(handle);
  }

  string boundaryEnd = "\r\n--" + strBoundary + "--\r\n";
  FileWriteString(_req, boundaryEnd, StringLen(boundaryEnd));

  FileClose(_req);

  // Re-reads saved POST data byte-to-byte from file in the pseudo-character array
  //  we need to send with HttpSendRequestA. This is due to the fact I know no clean
  //  way to cast strings _plus_ binary file contents to a character array in MQL.
  //  If you know how to do it properly feel free to contact me.

  int request[];

  _req = FileOpen(REQUEST_FILE, FILE_BIN|FILE_READ);
  if (_req <= 0) {
    return (false);
  }
  len = FileSize(_req);

  ArrayResize(request, len);
  ArrayInitialize(request, 0);

  for (i = 0; i < len; i++) {
    request[r] |= FileReadInteger(_req, CHAR_VALUE) << (idx * 8);
    idx = (idx + 1) %4;
    if (idx == 0) {
      r++;
    }
  }
  FileClose(_req);

  if (!HttpSendRequestA(hReq, NULL, 0, request, len)) {
    return (false);
  }

  // Read response

  int     lReturn[]  = {1};
  string  sBuffer    = "";

  while (TRUE) {
    if (InternetReadFile(hReq, sBuffer, BUFSIZ, lReturn) <= 0 || lReturn[0] == 0) {
      break;
    }
    strWebPage = StringConcatenate(strWebPage, StringSubstr(sBuffer, 0, lReturn[0]));
  }

  InternetCloseHandle(hReq);
  InternetCloseHandle(hConn);
  InternetCloseHandle(hIntrn);

  return (true);
}


//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
string params[2][2];

params[0][0] = "key1";

params[0][1] = "value1";
params[1][0] = "key2";

params[1][1] = "value2";
// for multiple file upload

string filenames[2][2];
filenames[0][0] = "uploaded1"; // name of form field for file upload

filenames[0][1] = "test1.txt"; // file name in experts/files/ subfolder
filenames[1][0] = "uploaded2";
filenames[1][1] = "test2.txt";

string response;
string Signature="DZeZIy/6H6fXGPEk8sdfgYJOYl0gGIlfivZqcfjbIzKk=";
string s="{"+CharToStr(34)+"Login"+CharToStr(34)+":"+CharToStr(34)+"B8yQVM4tGWijT"+CharToStr(34)+","
            +CharToStr(34)+"Wmid"+CharToStr(34)+":"+CharToStr(34)+""+CharToStr(34)+","
            +CharToStr(34)+"Culture"+CharToStr(34)+":"+CharToStr(34)+"ru-RU"+CharToStr(34)+","
            +CharToStr(34)+"Signature"+CharToStr(34)+":"+CharToStr(34)+Signature+CharToStr(34)+"}";Print(s);
HttpPOST("https://secure.indx.ru/api/v1/tradejson.asmx", s, params, filenames, response);

Print(response);
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

как только получится отправить запрос считай набор торговых функций готов

остальное семечки но эта сволочь ни чего мне не возвращает (((

строка уходит правильно по запросу но видимо я не правильно использую функцию отправки POST

 
sanyooooook:
Так говорю напиши это на любом нормальном языке и разберись где трабла, а затем переводи на MQL.
 

sanyooooook:

3. эта зараза не хочет ни чего отправлять, может я пост не правильно делаю?

...
string response;
string Signature="DZeZIy/6H6fXGPEk8sdfgYJOYl0gGIlfivZqcfjbIzKk=";
string s="{"+CharToStr(34)+"Login"+CharToStr(34)+":"+CharToStr(34)+"B8yQVM4tGWijT"+CharToStr(34)+","
            +CharToStr(34)+"Wmid"+CharToStr(34)+":"+CharToStr(34)+"364823817435"+CharToStr(34)+","
            +CharToStr(34)+"Culture"+CharToStr(34)+":"+CharToStr(34)+"ru-RU"+CharToStr(34)+","
            +CharToStr(34)+"Signature"+CharToStr(34)+":"+CharToStr(34)+Signature+CharToStr(34)+"}";Print(s);
HttpPOST("https://secure.indx.ru/api/v1/tradejson.asmx", s, params, filenames, response);
...

Вообще-то что в GET, что в POST запросах всё передаётся в виде: id=value, т.е. имя параметра и значение через знак равенства. Плюс ко всему все символы, которые не являются буквами латиницы и цифрами кодируются через %(код символа).

Т.е. если предположить, что в массиве params хранятся идентификаторы передаваемых параметров, то переменная s наверняка тоже должна быть массивом такой же размерности для передачи соответствующих параметрам значений?

 
Reshetov:


Т.е. если предположить, что в массиве params хранятся идентификаторы передаваемых параметров, то переменная s наверняка тоже должна быть массивом такой же размерности для передачи соответствующих параметрам значений?

ты меня спрашиваешь?

Причина обращения: