Insegnare come fare l'hash dei dati in mql4 - pagina 3

 
Reshetov:

Il problema è che le spese generali possono essere calcolate, ma non si può vedere il profitto dietro di esse.

Sono già redditizio e non male, è tutta una questione di crittografia.
 
TheXpert:

Prima di tutto, non è SHA256, è HMAC SHA512.

è su BTC-e
 
sanyooooook:
Sto già guadagnando, e non male, è solo una questione di crittografia.

Dopo questo messaggio, è troppo tardi per criptare i profitti: i racket lo sanno già e passeranno presto. E non ci mettono molto a trovarla: la casa in periferia senza tetto è dove sanyooooook cripta i profitti.

 
Reshetov:

Dopo quel messaggio, è troppo tardi per criptare i profitti: i racket lo sanno già e passeranno presto. E non devono cercare a lungo: la casa in periferia senza tetto è dove sanyooooook cripta i profitti.

"non abbiamo paura del lupo grigio")
 
sanyooooook:
È su BTC-e.

Capito. A proposito, non dovresti avere paura. Con winapi, tra l'altro, devi prima fare del codice funzionante, poi tradurlo in mql. E per scrivere qualcosa in mql che sia un programma indipendente... il punto?

Se non volete imparare Sharp, dovete imparare Python. Se volete soldi, dovrete imparare.

 
TheXpert:

Capito. A proposito, non dovresti avere paura. Con winapi, tra l'altro, devi prima fare del codice funzionante, poi tradurlo in mql. E per scrivere qualcosa in mql che sia un programma indipendente... il punto?

Se non vuoi imparare Sharp, impara Python. Se vuoi la pasta, dovrai imparare.

Merda, guarda qui:

1. l'api di scambio, inviare una richiesta di post in formato json (json non è difficile)

2. in questa query una parte dei dati è in hash, qui ho un problema, ma non è un problema, l'ho capito (temporaneamente ho rimandato l'implementazione del codice per uno stupido hash dei dati di input).

3. questa cosa non invia nulla, forse sto sbagliando il post?

//+------------------------------------------------------------------+
//|                                                     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);
  }
//+------------------------------------------------------------------+
 

non appena si può inviare una richiesta, si è pronti con una serie di funzioni di trading

semi di girasole ma non mi restituisce nulla ((!

la stringa va correttamente sulla richiesta ma devo usare la funzione POST sbagliata

 
sanyooooook:
Quindi dico di scriverlo in qualsiasi linguaggio normale e capire dove è il problema e poi tradurlo in MQL.
 

sanyooooook:

3. questa infestazione non vuole inviare nulla, forse sto facendo male il post?

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

In realtà, nelle richieste GET e POST tutto viene passato nella forma: id=valore, cioè nome del parametro e valore con un segno uguale. Inoltre, tutti i caratteri che non sono lettere latine e numeri sono codificati con % (codice carattere).

Cioè, se assumiamo che l'array params memorizza gli identificatori dei parametri passati, allora sicuramente la variabile s dovrebbe anche essere un array della stessa dimensione per passare i valori corrispondenti ai parametri?

 
Reshetov:


Cioè, se supponiamo che l'array params memorizzi gli identificatori dei parametri da passare, allora sicuramente anche la variabile s deve essere un array della stessa dimensione per passare i valori corrispondenti ai parametri?

lo stai chiedendo a me?