mql4でデータをハッシュ化する方法を教える - ページ 3 1234567 新しいコメント Alexandr Bryzgalov 2013.09.28 13:01 #21 Reshetov:問題は、諸経費は計算できても、その奥にある利益が見えないことです。 私はすでに利益が出ており、悪いものではありません、すべては暗号化の問題です。 Alexandr Bryzgalov 2013.09.28 13:03 #22 TheXpert:まず、SHA256ではなく、HMAC SHA512です。 BTC-eに掲載されました。 Yury Reshetov 2013.09.28 13:09 #23 sanyooooook: すでに儲かっているし、悪くはない、暗号化の問題だけだ。このメッセージの後、利益を暗号化するには遅すぎます。郊外の屋根のない家が、サンユウクの 暗号化された利益場所なのだ。 Alexandr Bryzgalov 2013.09.28 13:20 #24 Reshetov:そのメッセージの後では、利益を暗号化するには遅すぎるのです。ガラクタ屋はすでにそれを知っていて、すぐに立ち寄るでしょう。郊外の屋根のない家が、サンユウクの 暗号化された利益場所なのだ。"灰色の狼を恐れない") TheXpert 2013.09.28 14:06 #25 sanyooooook: BTC-eにあります。了解です。ところで、怖がってはいけない。ちなみにwinapiでは、まず動くコードを作って、それをmqlに変換する必要があります。そして、独立したプログラムであるmqlで何かを書くということは...。要は?Sharpを学びたくないなら、Pythonを学ぶしかない。お金が欲しいなら、勉強するしかないでしょう。 Alexandr Bryzgalov 2013.09.28 14:48 #26 TheXpert:了解です。ところで、怖がってはいけない。ちなみにwinapiでは、まず動くコードを作って、それをmqlに変換する必要があります。そして、独立したプログラムであるmqlで何かを書くということは...。要は?Sharpを学びたくないなら、Pythonを学べばいい。生地が欲しいなら、勉強しないとね。クソッ!これ見ろよ 1. exchange apiで、json形式のpostリクエストを送る(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); } //+------------------------------------------------------------------+ Alexandr Bryzgalov 2013.09.28 14:50 #27 リクエストを送れるようになると、すぐに取引機能の 一式が用意されます。ひまわりの種、でも何も返してくれない((( ;゚Д゚)))文字列はリクエスト時に正しく送信されますが、間違ったPOST関数を使用している可能性があります。 TheXpert 2013.09.28 14:57 #28 sanyooooook: だから、普通の言語で書いて、どこが問題なのかを考えて、それをMQLに翻訳してくださいということなんです。 Yury Reshetov 2013.09.28 19:15 #29 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もパラメータに対応する値を渡すために同じサイズの配列であるべきではないでしょうか? Alexandr Bryzgalov 2013.09.28 19:34 #30 Reshetov:すなわち,params配列に渡されるパラメータの識別子が格納されていると仮定すれば,s変数もパラメータに対応する値を渡すために同じサイズの配列でなければならないはずです.?と聞いているのでしょうか? 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
問題は、諸経費は計算できても、その奥にある利益が見えないことです。
まず、SHA256ではなく、HMAC SHA512です。
すでに儲かっているし、悪くはない、暗号化の問題だけだ。
このメッセージの後、利益を暗号化するには遅すぎます。郊外の屋根のない家が、サンユウクの 暗号化された利益場所なのだ。
そのメッセージの後では、利益を暗号化するには遅すぎるのです。ガラクタ屋はすでにそれを知っていて、すぐに立ち寄るでしょう。郊外の屋根のない家が、サンユウクの 暗号化された利益場所なのだ。
BTC-eにあります。
了解です。ところで、怖がってはいけない。ちなみにwinapiでは、まず動くコードを作って、それをmqlに変換する必要があります。そして、独立したプログラムであるmqlで何かを書くということは...。要は?
Sharpを学びたくないなら、Pythonを学ぶしかない。お金が欲しいなら、勉強するしかないでしょう。
了解です。ところで、怖がってはいけない。ちなみにwinapiでは、まず動くコードを作って、それをmqlに変換する必要があります。そして、独立したプログラムであるmqlで何かを書くということは...。要は?
Sharpを学びたくないなら、Pythonを学べばいい。生地が欲しいなら、勉強しないとね。
クソッ!これ見ろよ
1. exchange apiで、json形式のpostリクエストを送る(jsonは難しくない)。
2. このクエリではデータの一部がハッシュ化されていますが、ここで問題が発生しました。 私はそれを理解しました(一時的に私は入力データの愚かなハッシュによってコードの実装を延期しています)。
3.これでは何も送れない、もしかして投稿の仕方が間違っているのか?
リクエストを送れるようになると、すぐに取引機能の 一式が用意されます。
ひまわりの種、でも何も返してくれない((( ;゚Д゚)))
文字列はリクエスト時に正しく送信されますが、間違ったPOST関数を使用している可能性があります。
sanyooooook:
3.このインフェクションは何も送ろうとしない、もしかしてポストのやり方が間違ってる?
実際、GETとPOSTのどちらのリクエストでも、すべてはid=valueという形式で渡されます。つまり、パラメータ名と値に等号をつけたものです。さらに、ラテン文字と数字以外のすべての文字は、%(文字コード)でコード化されています。
つまり、配列paramsに渡されたパラメータの識別子が格納されていると仮定すれば、変数sもパラメータに対応する値を渡すために同じサイズの配列であるべきではないでしょうか?
すなわち,params配列に渡されるパラメータの識別子が格納されていると仮定すれば,s変数もパラメータに対応する値を渡すために同じサイズの配列でなければならないはずです.?
と聞いているのでしょうか?