기고글 토론 "MQL5에서 ICQ 와 Expert Advisor 사이의 연결"

 

새로운 기고글 MQL5에서 ICQ 와 Expert Advisor 사이의 연결 가 게재되었습니다:

본 문서는 Expert Advisor와 ICQ 사용자 간의 정보 교환 방법을 설명하고 있으며, 몇 가지 예가 제시되어 있습니다. 고객 단말기에서 원격으로 ICQ 클라이언트를 통해 휴대폰이나 PDA로 거래 정보를 제공받으려는 분들에게 흥미로운 자료가 될 것입니다.

1번 그림. ICQ 클라이언트와 문자 메시지를 교환할 수 있게 해주는 Expert Advisor를 시연중

1번 그림. MetaTrader5와 ICQ2Go간에 텍스트 메세지 보내기

작성자: Andrey Voytenko

 

기사 작성해 주셔서 감사합니다. 흥미로 웠습니다.

ModIcq는 수정 없이도 완벽하게 사용할 수 있지만 수정된 버전으로 작업하는 것이 더 쉽습니다 :)

 
GarF1eld писал(а) :

수정 없이 완벽하게 사용할 수 있는 ModIcq

IcqMod.dll은 Ansi 문자열로 작동하고 MT5에서는 문자열이 유니코드 형식이기 때문에 MT5에서 직접 사용할 수 없습니다. 따라서 유니코드 메시지와 함께 작동하도록 프로젝트를 재설계해야 했습니다(이를 위해 프로토콜은 바이너리가 아닌 HTML 형식을 사용합니다). 이제 전 세계 모든 언어로 메시지를 주고받을 수 있습니다! 이 프로젝트가 수요가 많아서 여러분의 희망에 따라 개선될 수 있기를 바랍니다.

 
avoitenko:

IcqMod.dll은 Ansi 문자열로 작동하고 MT5에서는 문자열이 유니코드 형식이기 때문에 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[];
         // 메시지 수신: 앞에 추가하고 다시 보냅니다.
         StringToCharArray("수신됨: " + msgStr, msgS);
         ICQSendMsg(client, uinR, msgS); 
      }

      Sleep(100);
   }
  }

하지만 매번 변환하는 것은 불편하기 때문에 라이브러리가 훨씬 더 유용합니다.

프록시에 대해서도 생각해봤습니다. 로컬 컴퓨터에서 적절하게 작동하는 몇 가지 설정이 있을까요? 즉, 프록시를 사용하지 않으면 일부 기본 설정이 프록시에 설정되어 모든 것이 작동합니다. 프록시가 있는 변형과 없는 변형에 대해 라이브러리에서 2 개의 연결 기능을 만드는 옵션으로 다음을 수행합니다.

 
GarF1eld писал(а) :

StringToCharArray를 사용하여 변환할 수 있습니다.

라이브러리에서 변경된 사항은 문자열의 전달된 값 유형에만 영향을 미쳤을 뿐만 아니라(char*였다가 wchar_t*가 됨). 너무 간단합니다. 전송된 메시지의 형식이 변경되어(dll의 소스 코드에서 BuildQuery_SendMsg_Unicode 함수 참조) 네이티브(바이너리)가 아닌 범용(HTML)이 되었습니다. IcqMod를 통해 전송된 러시아어 리터럴이 올바르게 수신된다는 사실은 테스트 중인 네이티브 ICQ 프로그램의 장점입니다. http://wap.ebuddy.com/ 또는 대체 ICQ 관리자에서 러시아어 메시지 수신을 테스트하면 키릴 문자 대신 낙서가 표시됩니다. 내 프로젝트가 키릴 문자뿐만 아니라 전 세계의 다른 언어에서도 올바르게 작동하는 12 개의 ICQ 관리자를 시도했습니다. 물론 광고에 대해 죄송합니다.

GarF1eld 썼다 (a) :

또한 프록시에 대해 생각하고 있습니다 ...

프록시에 대해. 나는 테스트했지만 로컬이 아니라 원격 SOCK4 / SOCK5를 테스트했습니다. 나는 그들과 함께 일하지 못했습니다. 그래서 프로젝트에서 전혀 사용하지 않기로 결정했습니다. 필요한 경우 시도해 보겠습니다.

 

감사합니다! 아주 명확했습니다.

 

그래서 오랫동안 이 스레드를 방문하지 않았습니다. 내 icq_power.mqh가 컴파일되지 않고 *2 Cpp 컴파일러 02:50:00 MS Visual Studio 컴파일러가 시스템에 설치되어 있지 않거나 컴파일러 초기화에 실패했습니다*라고 표시됩니다.

무슨 뜻일까요?

 
sv_design:

그래서 오랫동안 이 스레드를 방문하지 않았습니다. 내 icq_power.mqh가 컴파일되지 않고 *2 Cpp 컴파일러 02:50:00 MS Visual Studio 컴파일러가 시스템에 설치되어 있지 않거나 컴파일러 초기화에 실패했습니다*라고 표시됩니다.

무슨 뜻일까요?

다음을 의미합니다.

MS Visual Studio 컴파일러가 시스템에 설치되어 있지 않습니다.

또는

컴파일러 초기화에 실패했습니다.

 
sv_design:

무슨 뜻일까요?

업데이트하거나 관리자 또는 서비스 센터에서 ME를 실행하세요.
 
avoitenko:

http://wap.ebuddy.com/ 또는 대체 ICQ 관리자에서 러시아어 메시지 수신을 테스트해 보면 키릴 문자 대신 낙서가 표시됩니다. 나는 내 프로젝트가 키릴 문자뿐만 아니라 세계의 다른 언어에서도 올바르게 작동하는 12 개의 ICQ 관리자를 시도했습니다. 물론 광고에 대해 죄송합니다.

키릴 문자는 그다지 필요하지 않지만 메시지의 html 태그는 스트레스가 많습니다 (Quip과 최신 버전의 기본 ICQ 모두에서). 엄격하게 영어로 되어 있지만 태그가 없는 것이 더 좋을 것입니다....
 

두 가지 질문이 있습니다:

1) x32 시스템에서도 여전히 작동하나요? (확인할 기회가 없습니다).

2) 아무도 x64 용으로 재 설계하지 않았습니까? (x64 미만에서는 작동하지 않음) .

나는 대답에 매우 감사 할 것입니다. 나는 그것을 다시 만들려고 노력했다 - 그것은 작동하지 않았다 - 내가 일할 때, 그것은 충돌한다.

2013.11.07 02:14:24     icq_demo (EURUSD.m,M1)  Status_RECV_ERROR
추신 : 정확히 ICQ가 필요합니다 ...