English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Expert Advisor'ın MQL5'te ICQ ile Bağlantısı

Expert Advisor'ın MQL5'te ICQ ile Bağlantısı

MetaTrader 5Entegrasyon | 15 Aralık 2021, 09:43
60 0
Andriy Voitenko
Andriy Voitenko

Giriş

ICQ, OSCAR protokolünü kullanan bir çevrimdışı mod ile metin mesajlarının anında değiş tokuşunun merkezi bir hizmetidir. Bir yatırımcı için ICQ, bir kontrol panelinin yanı sıra bilgileri zamanında görüntüleyen bir terminal görevi görebilir. Bu makalede, bir Expert Advisor içinde minimum işlev kümesiyle bir ICQ istemcisinin nasıl uygulanacağına ilişkin bir örnek gösterilecektir.

Açık bir orijinal kod içeren IcqMod projesinin taslağı, makale için temel olarak kullanılmış ve işlenmiştir. ICQ sunucusuyla değiş tokuş protokolü, DLL modülünde icq_mql5.dll uygulanır. C++ ile yazılmış olup tek Windows kitaplığı olan winsock2'yi kullanır. Bu makaleye, Visual Studio 2005 için derlenmiş bir modül ve bir kaynak kodu eklenmiştir.

Bu istemcinin uygulanmasının ayırt edici özellikleri ve sınırlamaları şu şekildedir:

  • Aynı anda çalışan maksimum istemci sayısı teorik olarak sınırsızdır.
  • Gelen mesajların maksimum boyutu 150 karakterdir. Daha uzun mesajların alınması desteklenmez.
  • Unicode desteği.
  • Yalnızca doğrudan bağlantıyı destekler. Bir proxy sunucusu (HTTP / SOCK4 / SOCK5) üzerinden yapılan bağlantı desteklenmez.
  • Çevrimdışı mesajlar işlenmez.

Kitaplık işlevlerinin açıklaması

dll modülünün sabitlerinin ve işlevlerinin açıklamaları, icq_mql5.mqh yürütülebilir dosyasında yer alır.

ICQConnect işlevi, sunucuya bağlanmak için kullanılır:

uint  ICQConnect (ICQ_CLIENT & cl,  // Variable for storing data about the connection  
string  host,  // Server name, such as login.icq.com  
ushort  port,  // Server port, eg 5190  
string  login, // Account Number (UIN)  
string  pass   // Account password for)

ICQConnect aracılığıyla dönüş değerinin açıklaması:

Sabitin Adı
    Değeri
Açıklama
 ICQ_CONNECT_STATUS_OK
0xFFFFFFFF  Bağlantı kuruldu
 ICQ_CONNECT_STATUS_RECV_ERROR
0xFFFFFFFE
 Veri okuma hatası
 ICQ_CONNECT_STATUS_SEND_ERR
0xFFFFFFFD
 Veri gönderme hatası
 ICQ_CONNECT_STATUS_CONNECT_ERROR
0xFFFFFFFC
 sunucu bağlantı hatası
 ICQ_CONNECT_STATUS_AUTH_ERROR 0xFFFFFFFB  Yetkilendirme hatası: Yanlış parola veya bağlantı sınırı aşıldı

 

Bağlantı hakkında veri depolamak için yapı:

 struct  ICQ_CLIENT (
uchar  status;     // connection status code  
ushort  sequence;  // sequence meter  
uint  sock;        // socket number  )

 Uygulamada, bu yapıdaki bağlantı durumunun analizini yapmak için aşağıdaki değerleri alabilen değişkeninin durumunu kullanırız:

Sabitin Adı
Değeri 
Açıklama
 ICQ_CLIENT_STATUS_CONNECTED 0x01  Sunucuyla bağlantı kuruldu
 ICQ_CLIENT_STATUS_DISCONNECTED
0x02  Sunucuya bağlanılamadı

 

Sunucuya sık sık bağlanma girişimleri, hesabınıza erişimin geçici olarak engellenmesine yol açabilir. Bu nedenle, sunucuya bağlantı denemeleri arasında bir zaman aralığı beklemek gerekir.

Önerilen zaman aşımı 20-30 saniyedir.

ICQClose işlevi, sunucuyla bağlantının sonlandırılmasını sağlar:

 void  ICQClose (
ICQ_CLIENT & cl  // Variable for storing connection data)

ICQSendMsg işlevi, metin mesajları göndermek için kullanılır:

 uint  ICQSendMsg (
ICQ_CLIENT & cl,  // Variable to store data about the connection.  
string  uin,        // Account number of the recipient  
string  msg         // Message)

Mesaj başarıyla gönderilirse dönüş değeri 0x01'e, gönderme hatası varsa 0x00'a eşittir. 

ICQReadMsg işlevi gelen mesajları kontrol eder:

 uint  ICQReadMsg (
ICQ_CLIENT & cl,  // Variable for storing connection data  
string  & Uin,     // Account number of the sender  
string  & Msg,     // Message  
uint  & Len        // Number of received symbols in the message

Gelen mesaj varsa dönüş değeri 0x01'e, mesaj yoksa 0x00'a eşittir.

COscarClient sınıfı

MQL5'in nesne yönelimli ortamında ICQ ile çalışmanın rahat olması için COscarClient sınıfı geliştirilmiştir. Yukarıda açıklanan temel işlevlerin yanı sıra, belirli bir zaman aralığından sonra otomatik olarak sunucuya yeniden bağlanan bir mekanizma içerir (autocon = true olduğunda). Sınıfın açıklaması ekteki icq_mql5.mqh dosyasına dahil edilmiş olup aşağıda verilmiştir: 

//+------------------------------------------------------------------+
class COscarClient
//+------------------------------------------------------------------+
{
private:
  ICQ_CLIENT client;        // storing connection data
          uint connect;     // flag of status connection
      datetime timesave;     // the time of last connection to the server
      datetime time_in;      // the time of last reading of messages

public:
      string uin;            // buffer for the storage of the uin of the sender for a received message
      string msg;            // buffer for the storage of text for a received message
        uint len;            // the number of symbols in the received message
     
      string login;          // number of the sender's account (UIN)
      string password;       // password for UIN 
      string server;         // name of the server
        uint port;           // network port  
        uint timeout;        // timeout tasks (in seconds) between attempts to reconnect to the server
        bool autocon;        // automatic connection resume
        
           COscarClient();   // constructor for initialization of variable classes
      bool Connect(void);     // establishment of a connection with a server
      void Disconnect(void);  // breaking a connection with a server
      bool SendMessage(string  UIN, string  msg); // sending a message 
      bool ReadMessage(string &UIN, string &msg, uint &len); // receiving a message
};

COscarClient tabanlarında Expert Advisor

COscarClient sınıfı kullanılarak ICQ ile çalışmak için gereken minimum Expert Advisor kodu, icq_demo.mq5 dosyasında ve aşağıda yer alır:

#include <icq_mql5.mqh>

COscarClient client;

//+------------------------------------------------------------------+
int OnInit()
//+------------------------------------------------------------------+
  {
   printf("Start ICQ Client");
   
   client.login      = "641848065";     //<- login
   client.password   = "password";      //<- password
   client.server     = "login.icq.com";
   client.port       = 5190;
   client.Connect();
   
   return(0);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
//+------------------------------------------------------------------+
  {
   client.Disconnect();
   printf("Stop ICQ Client");
  }
//+------------------------------------------------------------------+
void OnTick()
//+------------------------------------------------------------------+
  {
   string text;
   static datetime time_out;
   MqlTick last_tick;

   // reading the messages
   while(client.ReadMessage(client.uin,client.msg,client.len))
     printf("Receive: %s, %s, %u", client.uin, client.msg, client.len);

   // transmission of quotes every 30 seconds
   if((TimeCurrent()-time_out)>=30)
     {
      time_out = TimeCurrent();
      SymbolInfoTick(Symbol(), last_tick);
      
      text = Symbol()+" BID:"+DoubleToString(last_tick.bid, Digits())+
                  " ASK:"+DoubleToString(last_tick.ask, Digits()); 
      
      if (client.SendMessage("266690424",        //<- number of the recipient 
                                        text)) //<- message text 
         printf("Send: " + text);
     }
  }
//+------------------------------------------------------------------+

Şekil 1'de ICQ istemcisi ile metin mesajlarının değiş tokuşuna olanak tanıyan Expert Advisor'ın çalışmasının bir gösterimi sunulmuştur.

Şekil 1 MetaTrader5 ve ICQ2Go arasındaki SMS mesajlaşması

Şekil 1. MetaTrader 5 ve ICQ2Go arasındaki SMS mesajlaşması

Kapasite oluşturma

Görevi pratik uygulamaya yaklaştırarak karmaşıklaştıralım. Örneğin, bir cep telefonu veya internete bağlı başka bir bilgisayar kullanarak Expert Advisor'ımızın çalışmalarını yönetmemiz ve gerekli bilgileri uzaktan almamız gerekiyor. Bunu yapmak için, ilerde Expert Advisor'ı kontrol etmek için bir dizi komut tanımlıyoruz. Ayrıca, gelen komutların kodunu çözmek için advisor'ı bir ayrıştırma işleviyle tamamlayalım.

Tüm komutlar için ortak olan biçim aşağıdaki gibi olacaktır: 

[? |!] [komut] [parametre] [değer] ,

burada? - Komut okuma sembolü, ! - Bir işlem yazma sembolü.

Aşağıdaki tabloda komutların listesi verilmiştir:

     
 yardım  okuma  Sözdizimi referansını ve komutların listesini görüntüleme
 bilgi  okuma  Hesap hareketi verilerini görüntüleme
 sembol  okuma  Verilen para birimi çifti için piyasa fiyatı
 talimatlar  okuma/yazma  Açık talimatları yönetme
 parametre  okuma/yazma  Expert Advisor'ın parametrelerini yönetme
 kapat  kayıt  Expert Advisor'ın çalışmasını sonlandırma ve terminali kapatma
 kapatma  kayıt  Bilgisayarı kapatma


Bu komut kümesinin işlenmesini uygulayan Expert Advisor, icq_power.mq5 dosyasında yer alır.

Şekil 2'de, Expert Advisor'ın çalışmasının açık bir gösterimi sunulmuştur. Komutlar, yüklü bir ICQ istemcisi ile CCP'den (Şekil 2a) ve ICQ ile çalışmayı uygulayan WAP sunucusu http://wap.ebuddy.com aracılığıyla alınır (Şekil 2b). İkinci seçenek, cep telefonlarında ICQ için yazılım arama, yükleme ve yapılandırma ile uğraşmak istemeyen kişiler için tercih edilebilir.

  

Şekil 2. Pocket PC için ICQ istemcisi (Şekil 2a) ve ayrıca wap.ebuddy.com wap sitesi (Şekil 2b) aracılığıyla bir advisor ile çalışma.

Görsel ICQ bileşeni

Bu bölümde, görsel görünümü Şekil 3'te gösterilen bir bileşeni uygulayan bir icq_visual.mq5 script dosyasının bir örneği kısaca ele alınacaktır.

Şekil 3 Görsel ICQ bileşeni

Şekil 3. Görsel ICQ bileşeni

Bileşenin biçimi bir Windows penceresine benzer ve düğmeler, metin kutuları ve metin etiketleri gibi kontrol öğeleri dizilerinden oluşturulmuştur.

Kolaylık sağlamak için, biçimde hesapların ve ilgili kişilerin listesini depolamak için entegre bir kontrol öğesi uygulanır. Değerler, uygun gezinti düğmeleri kullanılarak listeden seçilir.

ICQ 6.5 stilinde bir pencere oluşturmak için düğmeleri resim etiketleriyle değiştirebiliriz. Şekil 4'te, bileşenin icq_visual_skin.mq5 script dosyasında uygulanan görsel görünümü gösterilmiştir. Kendi bileşen tasarımını oluşturmak isteyen kişilerin pencerenin görünümünden sorumlu olan skin.bmp dosyasını geliştirip değiştirmeleri yeterlidir.

Şekil 4. ICQ'nun görsel bileşeninin renk tasarımı

Şekil 4. ICQ'nun görsel bileşeninin renk tasarımı

Sonuç

Bu makalede, gömülü bir programlama dili kullanılarak MetaTrader 5 için bir ICQ istemcisi uygulamanın en kolay yollarından biri gösterilmiştir.


MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/64

Ekli dosyalar |
icq_mql5_doc.zip (406.44 KB)
icq_mql5.zip (98.31 KB)
MQL5'te "Yılan" Oyunu Oluşturma MQL5'te "Yılan" Oyunu Oluşturma
Bu makalede, bir "Yılan" oyun programlama örneği açıklanmaktadır. MQL5'te oyun programlama, öncelikle olay işleme özellikleri nedeniyle mümkün hale geldi. Nesne yönelimli programlama bu süreci büyük ölçüde basitleştirir. Bu makalede olay işleme özelliklerini, Standart MQL5 Kitaplık sınıflarının kullanım örneklerini ve periyodik işlev çağrılarının detaylarını öğreneceksiniz.
Alım Satım için MQL5'te Aktif Kontrol Panelleri Oluşturma Alım Satım için MQL5'te Aktif Kontrol Panelleri Oluşturma
Makalede, MQL5'te aktif kontrol panellerinin geliştirilmesi sorunu ele alınmaktadır. Arayüz öğeleri, olay işleme mekanizması tarafından yönetilir. Ayrıca, kontrol öğeleri özelliklerinin esnek bir şekilde ayarlanması seçeneği de mevcuttur. Aktif kontrol paneli, pozisyonlarla çalışılmasına ve piyasa ve bekleyen talimatların ayarlanmasına, değiştirilmesine ve silinmesine izin verir.
Göstergeleri MQL4'ten MQL5'e Aktarma Göstergeleri MQL4'ten MQL5'e Aktarma
Bu makale, MQL4'te yazılan fiyat yapılarının MQL5'e aktarılmasına ilişkin özelliklere ayrılmıştır. Gösterge hesaplamalarını MQL4'ten MQL5'e aktarma işlemini kolaylaştırmak için mql4_2_mql5.mqh işlevler kitaplığı önerilir. Kullanımı MACD, Stokastik ve RSI göstergelerinin aktarımı temelinde açıklanmıştır.
Alım Satım Raporları ve SMS Bildirimi Oluşturma ve Yayınlama Alım Satım Raporları ve SMS Bildirimi Oluşturma ve Yayınlama
Yatırımcıların her zaman alım satım terminalinde saatlerce oturma yeteneği ve arzusu yoktur. Özellikle, alım satım sistemi az çok resmileştirilmişse ve bazı piyasa durumlarını otomatik olarak tanımlayabiliyorsa. Bu makalede, alım satım sonuçları raporunun (Expert Advisor, Gösterge veya Script Dosyası kullanılarak) HTML dosyası olarak nasıl oluşturulacağı ve FTP yoluyla WWW-sunucusuna nasıl yükleneceği açıklanmaktadır. Ayrıca alım satım etkinliklerine ilişkin bildirimlerin cep telefonuna SMS olarak gönderilmesini de değerlendireceğiz.