ChaGPT APIを使っているんですか?
それならAPIをインポートして、それを通じて接続しないと無理なのと違いますか?
私は ChaGPTを使ってないし、通信用のAPIをMT5で使った経験もないので分かりません。
英語フォーラムで質問したほうが回答を得やすいと思います。
こちらライブラリを自作することで解決いたしました。ありがとうございました。
原因、ほぼこれです。
Authorizationヘッダが長いからではなく、 WebRequest() の呼び出し方が別オーバーロードになっていて、 headers がヘッダとして送られていません。
あなたのコードだとこの形になっています。
WebRequest( "POST", openai_url, headers, "", timeoutMs, data, size, resultBuf, cookie );
これは MQL5 側では、 headers ではなく cookie引数 として解釈される形です。
つまり OpenAI には Authorization: Bearer ... がヘッダとして届いていないので、401「APIキーが無い」が返ります。
OpenAI API は Authorization: Bearer OPENAI_API_KEY をHTTPヘッダで渡す必要があります。
修正版コード
これで試してください。
#property script_show_inputs void OnStart() { string openai_api_key = "sk-proj-XXXXXXXXXXXXXXXXXXXXXXXX"; string json_body = "{\"model\":\"gpt-4o-mini\"," "\"messages\":[{\"role\":\"user\",\"content\":\"Hello!\"}]," "\"max_tokens\":50}"; char data[]; int len = StringToCharArray(json_body, data, 0, WHOLE_ARRAY, CP_UTF8); // null終端を送らない if(len > 0) ArrayResize(data, len - 1); string headers = "Content-Type: application/json\r\n" "Authorization: Bearer " + openai_api_key + "\r\n"; char result[]; string result_headers; int timeout = 10000; int res = WebRequest( "POST", "https://api.openai.com/v1/chat/completions", headers, timeout, data, result, result_headers ); Print("HTTP status = ", res); Print("Response headers = ", result_headers); string response = CharArrayToString(result, 0, -1, CP_UTF8); Print("Response body = ", response); if(res == -1) Print("MQL5 error = ", GetLastError()); }
重要ポイント
WebRequest() はこの形で使ってください。
WebRequest(method, url, headers, timeout, data, result, result_headers); あなたの元コードのように headers, "", timeout, data, size... と書くと、headersがHTTPヘッダとして扱われません。
あと、 gpt-3.5-turbo は今後の互換性や利用可否で引っかかりやすいので、まずは gpt-4o-mini など現在使えるモデルで疎通確認した方が安全です。
結論:MetaTraderのアップデート待ちではなく、WebRequestのオーバーロード指定ミスが本命です。
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
かなり困っております・・・
MQL5(MetaTrader 5)で WebRequest() を使い、ChatGPT(gpt-3.5-turbo) に接続しようとしています。具体的には、 https://api.openai.com/v1/chat/completions にアクセスしているのですが、常に 401 エラーが返ってきて、以下のメッセージが表示されます。
つまり、 Authorization: Bearer ヘッダが、OpenAI側で認識されていないようなのです。
ポイント:
新しい “sk-proj” APIキーの長さ
WebRequest の許可設定
複数のMT5ビルドを試した
Fiddler / Wireshark を使った解析
一方で、同じキーを curl や Pythonスクリプト で使うと、問題なくChatGPTにアクセスできます。
つまり、キー自体は有効なのに、MQL5 の WebRequest() では常に「APIキーが無い」とOpenAIに言われる状態です。
質問:
以下サンプルコード
結果:
もし何か解決策や、 Authorization: Bearer ヘッダを長いキーでも正常に送る方法が分かる方がいれば、ぜひアドバイスをいただきたいです。
よろしくお願いいたします。