Alım-satım robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Twitter üzerinde bulun!
Fan sayfamıza katılın
Komut dosyasını ilginç mi buldunuz?
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
Komut dosyasını beğendiniz mi? MetaTrader 5 terminalinde deneyin
Kütüphaneler

CBitBuffer Class - Data Serialization in MQL5 - MetaTrader 5 için kütüphane

Görüntülemeler:
37
Derecelendirme:
(7)
Yayınlandı:
MQL5 Freelance Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git

CBitBuffer Sınıfı - MQL5'te Bit Düzeyinde Veri Serileştirme

CBitBuffer sınıfı, MQL5'te bit düzeyinde veri serileştirme için sağlam bir temel sağlar ve veri depolama ve alma üzerinde ince taneli kontrol sunar. Sınıf, değişken uzunluklu tamsayılar (ZigZag kodlamalı VLQ) ve alan optimizasyonu için mükemmel olan dizelerin ve yapıların serileştirilmesi dahil olmak üzere çeşitli veri türleri için destek içerir. Sınıf, performansı artırmak için dahili tamponlama ve üstel dizi büyümesi gibi optimizasyonlar kullanır ve kapsamlı bir hata işleme sistemi sağlar. Özellikle veri boyutunu en aza indirmenin çok önemli olduğu ağ iletişimi veya dosya depolama için kullanışlıdır (örneğin, kene verilerinin sıkıştırılması).

Temel Özellikler:

  • Bit düzeyinde İşlemler: Verilerin bit bit veya 64 bite kadar belirli bit uzunluklarında yazılmasına ve okunmasına izin verir.
  • Veri Türü Desteği: Bool, char, uchar, short, ushort, int, uint, long, ulong, datetime, float, double, string ve struct için yöntemler içerir.
  • Değişken Uzunluklu Tamsayılar (VLQ): int, uint, long ve ulong değerleri için VLQ kodlamasını uygular, bu da sıklıkla küçük tamsayı değerleri için önemli ölçüde yer tasarrufu sağlayabilir.
  • Hata İşleme: Sağlam hata yönetimi için ENUM_BIT_BUFFER_ERROR enum ve GetLastError()/GetLastErrorString() yöntemleri sağlar.
  • Tampon Yönetimi: Ham tampon içeriğini temizlemek, sonlandırmak, ayarlamak, dosyaya kaydetmek ve dosyadan yüklemek için işlevler sunar.
  • Dahili Tamponlama: Ana ulong[] dizisine yazmadan veya bu diziden okumadan önce bitleri biriktirerek bit seviyesi işlemleri optimize etmek için dahili 64 bit tamponlar (m_writeBufferInternal, m_readBufferInternal) kullanır.
//+------------------------------------------------------------------+
//| CBitBuffer Sınıfı|
//| Tek tek bitleri veya bit dizilerini ulong[] tamponuna okur/yazar. |
//| Verimli bit manipülasyonunu ve karışık okuma/yazma işlemlerini destekler.
//+------------------------------------------------------------------+
class CBitBuffer
  {
public: // Çekirdek bit işlemleri
   bool              WriteBit(bool bit);                   // Tek bir bit yazar
   bool              WriteBits(ulong value, int numberOfBits); // Bir ulong'dan N bit yazar
   bool              ReadBit();                            // Tek bir bit okur
   ulong             ReadBits(int numberOfBits);           // N biti ulong olarak okur
   ulong             PeekBits(int numberOfBits);           // Pozisyonu ilerletmeden N bit okur

public: // Pozisyon ve boyut yönetimi
   bool              SetReadPosition(long bitPosition);    // Okuma konumunu bit cinsinden ayarlar
   long              GetReadPosition();
   bool              ResetReadPosition();                  // Okuma konumunu 0'a sıfırlar
   bool              SkipBits(long bitsToSkip);            // Geçerli okuma konumundan N bit atlar
   long              GetTotalWrittenBits();                // Yazılan toplam bit
   long              GetTotalBytesWritten();               // Yazılan toplam bayt
   long              GetTotalBytesAllocated();             // Tahsis edilen toplam bayt
   long              GetRemainingReadBits();               // Okunacak kalan bitler

public: // Veri türüne özgü okuma/yazma işlemleri
   bool              WriteBool(bool value);
   bool              WriteChar(char value);
   bool              WriteUChar(uchar value);
   bool              WriteShort(short value);
   bool              WriteUShort(ushort value);
   bool              WriteInt(int value);
   bool              WriteUInt(uint value);
   bool              WriteLong(long value);
   bool              WriteULong(ulong value);
   bool              WriteDatetime(datetime value);
   bool              WriteFloat(float value);              // 32 bitlik bir float yazar
   bool              WriteDouble(double value);            // 64 bitlik bir çift yazar
   bool              WriteString(string value);            // Uzunluk önekli dize yazar
   template<typename T>
   bool              WriteStruct(T &struct_object);        // Uzunluk önekli yapıyı yazar

   bool              ReadBool();
   char              ReadChar();
   uchar             ReadUChar();
   short             ReadShort();
   ushort            ReadUShort();
   int               ReadInt();
   uint              ReadUInt();
   long              ReadLong();
   ulong             ReadULong();
   datetime          ReadDatetime();
   float             ReadFloat();                          // 32 bitlik bir float okur
   double            ReadDouble();                         // 64 bitlik bir çift okur
   string            ReadString();                         // Uzunluk önekli dizeyi okur
   template<typename T>
   T                 ReadStruct();                         // Uzunluk önekli yapıyı okur

public: // Tamsayılar için değişken uzunluklu kodlama (VLQ)
   bool              WriteVarInt(int value);               // ZigZag + VLQ kullanarak işaretli int yazar
   bool              WriteVarUInt(uint value);             // VLQ kullanarak unsigned int yazar
   bool              WriteVarLong(long value);             // ZigZag + VLQ kullanarak işaretli uzun yazar
   bool              WriteVarULong(ulong value);           // VLQ kullanarak işaretsiz uzun yazar
   int               ReadVarInt();                         // ZigZag + VLQ kullanarak işaretli int okur
   uint              ReadVarUInt();                        // VLQ kullanarak işaretsiz int okur
   long              ReadVarLong();                        // ZigZag + VLQ kullanarak işaretli uzun okur
   ulong             ReadVarULong();                       // VLQ kullanarak işaretsiz uzun okur

public: // Tampon yönetimi
   void              Clear();                              // Tampon içeriğini temizler ve durumu sıfırlar
   bool              GetFinalizedBuffer(ulong &destinationArray[]); // Arabellek içeriğini diziye kopyalar
   bool              SetRawBuffer(const ulong &sourceBuffer[]);     // Tampon içeriğini diziden ayarlar
   bool              Save(string filename);                // Arabelleği dosyaya kaydeder
   bool              Load(string filename);                // Tamponu dosyadan yükler

public: // Hata işleme
   ENUM_BIT_BUFFER_ERROR GetLastError();                   // Son hata kodunu döndürür
   string            GetLastErrorString();                 // Hata açıklama dizesini döndürür
   void              ClearLastError() ;                    // Son hatayı temizler

   void              PrintHex();                           // Ana arabelleği onaltılık olarak yazdırır (hata ayıklama)
  };


Yukarıdaverilen tam test örneği " CBitBuffer_Test.mq5" , hataları tespit etmenin ve sınıfın yeteneklerini doğrulamanın en iyi yoludur.


Güncellemeler:

2025.07.21 - v.1.01 :

  • CBitBuffer sınıfı, bir okuma işlemi başladıktan sonra yasadışı yazma girişimlerini etkin bir şekilde önler ve bu da veri bütünlüğünün korunmasına yardımcı olur.
  • Kullanıcılar işlemleri karıştırmaya çalıştıklarında belirli bir hata (BIT_BUFFER_MIXED_OPERATION_ERROR) alırlar.

2025.07.22 - v.1.02 :

  • Okuma ve yazma modları arasında geçiş yaparken veri bütünlüğünün korunmasına yardımcı olankısmi yıkama/yeniden doldurmaişlemlerinin doğru şekilde ele alınmasıyla sınıfın tasarımı karışık okuma/yazma işlemlerine izin verecek şekilde değiştirildi .
  • Değişken (m_operationMode) ve hata kodu (BIT_BUFFER_MIXED_OPERATION_ERROR) kaldırıldı.
  • Amacın daha iyi anlaşılması için kod yorumları temizlendi.
  • "CBitBuffer_Test.mq5" içindeki örnekler daha fazla test vakasını kapsayacak şekilde güncellendi.




MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/61728

Boom Index Spike Pattern Boom Index Spike Pattern

Bu MetaTrader 5 (MT5) özel göstergesi, boomSpikeBoxMitigationFinal.mq5, grafikte belirli bir yükseliş yükseliş modeli algılar ve dikdörtgenler ve yatay çizgiler kullanarak giriş bölgelerini işaretler. Fiyat giriş seviyesine döndüğünde ("hafiflettiğinde"), giriş çizgisi hafifletme noktasına kısaltılır.

DailyPivot Vardiya DailyPivot Vardiya

DailyPivot_Shift göstergesi, ana seviyelerin günün başlangıcında bir kayma ile hesaplanabilmesi açısından normal DailyPivot göstergesinden farklıdır.

EMA_RSI_RISK-EA EMA_RSI_RISK-EA

Expert Advisor for MetaTrader 5 that combines Exponential Moving Averages (EMA) and Relative Strength Index (RSI) to generate trading signals. Includes risk management features and trading time filter.

TardioBot TardioBot

TardioBot V1.05, named after of a historical figure Giuseppe Tardio, is an Expert Advisor designed for MetaTrader 5 that employs a triangular arbitrage strategy.