記事"MQL5でICQを用いたExpert Advisorの連携"についてのディスカッション

 

新しい記事 MQL5でICQを用いたExpert Advisorの連携 はパブリッシュされました:

本稿は、Expert Advisor と ICQ ユーザー間の情報交換について述べていきます。いくつかの例を提供します。ICQ クライアントを使用し、携帯電話やPDAでクライアント端末から遠隔でトレーディング情報を受け取りたい方には興味を引かれる資料を提供することとなるでしょう。

図4 ICQ コンポーネントのカラーデザイン

作者: Andrey Voytenko

 

記事をありがとう。面白かったよ。

ModIcqはそのままでも十分使えるけど、改造した方が作業しやすいんだ :)

 
GarF1eld писал(а) :

ModIcqは変更なしで完全に使用可能です。

IcqMod.dllは、Ansi文字列で動作し、MT5の文字列はUnicode形式であるため、MT5で直接使用することはできません。そのため、Unicode形式のメッセージで動作するようにプロジェクトを再設計する必要がありました(この目的のために、プロトコルはバイナリではなくHTML形式を使用します)。これで、世界中のどの言語でもメッセージを送受信できるようになりました!私は、このプロジェクトに需要があり、あなたの希望に応じて改良できることを願っています。

 
avoitenko:

IcqMod.dllは Ansi文字列で動作し、MT5の文字列はUnicode形式であるため、MT5で直接使用することはできません。

正確ではありません。StringToCharArrayを使って 変換することができます。例えば、このコードは私のために動作します。

struct ICQ_CLIENT
{
        uchar status;
        ushort sequence;
        ulong sock;
};

#import "IcqMod.dll"
   ulong ICQConnect(ICQ_CLIENT& client, uchar& host[], ushort port, uchar& login[], uchar& pass[], int proxy);
   void  ICQClose(ICQ_CLIENT& client);
   ulong ICQSendMsg(ICQ_CLIENT& client, uchar& uin[], uchar& message[]);
   ulong ICQReadMsg(ICQ_CLIENT& client, uchar& uin[], uchar& msg[], int& msglen);
#import

void OnStart()
{
   // 文字列を文字の配列に変換してDLLに渡す
   uchar login[], password[], server[];
   StringToCharArray("123456789", login);
   StringToCharArray("password", password);
   StringToCharArray("login.icq.com", server);
   
   // 接続する
   ICQ_CLIENT client;
   ICQConnect(client, server, 5190, login, password, 0);
   
   for (;;)
   {
      uchar uinR[10], msgR[512];
      int len = 0;
      
      // 受信メッセージをチェックする
      ICQReadMsg(client, uinR, msgR, len);
      
      if (len > 0)
      {
         string uinStr = CharArrayToString(uinR), // 送信者のUIN
            msgStr = CharArrayToString(msgR);     // メッセージ
            
         uchar msgS[];
         // メッセージReceived: の前に追加し、送り返す。
         StringToCharArray(「受信: " + msgStr, msgS);
         ICQSendMsg(client, uinR, msgS); 
      }

      Sleep(100);
   }
  }

しかし、常に変換するのは不便なので、この意味ではあなたのライブラリの方がずっと使いやすい。

プロキシについても考えました。おそらく、ローカル・マシンで十分に機能する設定があるのではないでしょうか?つまり、プロキシを使わなければ、プロキシにいくつかのデフォルト設定が設定され、すべてが機能する。オプションとして、ライブラリに2つのConnect関数を作ることができます。

 
GarF1eld писал(а) :

StringToCharArrayを使って変換することも可能である。

ライブラリに加えられた変更は、文字列に渡される値の型に影響するだけではない。単純すぎるだろう。送信されるメッセージの形式が変わり(dllのソースコードのBuildQuery_SendMsg_Unicode関数を参照)、ネイティブ(バイナリ)ではなくユニバーサル(HTML)になった。IcqMod を通して送信されたロシア語リテラルが正しく受信されるという事実は、あなたがテストしているネイティブ ICQ プログラムのメリットです。http://wap.ebuddy.com/ や別の ICQ マネージャーでロシア語メッセージの受信をテストしてみると、キリル文字の代わりに走り書きが表示されるでしょう。キリル文字だけでなく、世界中のどの言語でも私のプロジェクトが正しく動作するICQマネージャーを十数個試しました。もちろん、宣伝で申し訳ない。

GarF1eld wrote(a) :

プロキシについても考えています。

プロキシについて。ローカルではなく、リモートのSOCK4/SOCK5をテストしてみた。うまくいかなかった。だからプロジェクトでは一切使わないことにしたんだ。必要であればやってみるつもりだ。

 

ありがとう!とても分かりやすかった。

 

このスレッドにお邪魔するのは久しぶりです。私のicq_power.mqhがコンパイルできません。*2 Cpp compiler 02:50:00 MSVisual Studio compiler is not installed in the system or failed initializing the compiler*と表示されます。

どういう意味でしょうか?

 
sv_design:

久しぶりにこのスレッドにお邪魔します。私のicq_power.mqhがコンパイルできません。*2 Cpp compiler 02:50:00 MS Visual Studio compiler is not installed in the system or failed initializing the compiler*と表示されます。

これはどういう意味でしょうか?

それは

MSVisual Studio コンパイラがシステムにインストールされていない。

または

コンパイラの初期化に失敗しました。

 
sv_design:

それはどういう意味ですか?

アップデートをするか、MEを管理者権限で実行するか、あるいはservicedkにするか。
 
avoitenko:

http://wap.ebuddy.com/、または別のICQマネージャーでロシア語のメッセージの受信をテストしてみると、キリル文字の代わりに走り書きが表示されます。私は十数種類のICQマネージャーを試しましたが、私のプロジェクトはキリル文字だけでなく、世界中のどの言語でも正しく動作しました。もちろん、宣伝のために申し訳ありません。

キリル文字はそれほど必要ではありませんが、メッセージ内のhtmlタグはストレスになります(Quipでも最新版のネイティブICQでも)。厳密には英語でもタグがない方がいいのですが...。
 

2つの質問があります:

1) x32システムでも動作しますか?

2) 誰もx64用に再設計していないのですか? (x64では動作しません) .

私は答えを非常に感謝されるでしょう。私はそれを作り直すことを試みた-それは働かなかった-私が働くとき、それは落ちる

2013.11.07 02:14:24     icq_demo (EURUSD.m,M1)  Status_RECV_ERROR
PS: 正確にICQが必要...