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

TickCompressor - 1 tikin ortalama 2-3 bayta sıkıştırılması ile - MetaTrader 5 için kütüphane

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

.tcs MQ dosyalarından 3,5 kata kadar daha kompakt bir biçimde depolamak için tik verilerinin sıkıştırılması. Ve onlarla hızlı çalışmak için, 3 baytı okumak 60 baytlık MqlTick yapısından daha az zaman alır.

Veri bloklarının ek ZIP sıkıştırması ile Ask, Bid, time ile 2023 için dosya boyutu ekran görüntüsünde görülebilir:

2023 için .tcs formatında dosya boyutu:

3,56 kat sıkıştırma.

Tikleri saklamak için, Alış ve Satış fiyatlarının bir önceki fiyattan farkları kullanılır. Genellikle (tüm tiklerin %50...70'ine kadar) (-8...7) puanı geçmez ve 4 bit ile kaydedilebilir. Alış ve Satış 1 baytta birleştirilir.
Artı 0 ila 255 milisaniye arasındaki zaman farkını saklamak için 1 bayt (229'a kadar olan kodda, 229'un üzerindeki değerler -8...7 puanın ötesindeki tikleri kodlamak için kullanılır).

Fiyatlar veya zamanlar daha büyük değerlerle farklılık gösteriyorsa, daha fazla sayıda bayta paketlenirler.

Ek sıkıştırma için ZIP arşivleme uygulayabilirsiniz. Verilerin boyutu 2 kata kadar azaltılır.

Alternatif olarak, -129 ila 128 arasındaki Satış ve Teklif 8 bit veya her biri 1 bayta sıkıştırılarak 3 bayta sıkıştırma yapılabilir. Artı zaman için 1 bayt - çoğu tik için toplam 3 bayt.
Bazen(https://www.mql5.com/ru/forum/499639/page6#comment_58544810), 2 bayta sıkıştırılmış tik sayısı 4 bayta sıkıştırılmış tik sayısından fazlaysa, 3 bayta sıkıştırmak daha verimli olur. Enstrüman istatistiklerine bakmanız gerekir.
Komutu ile maksimum sıkıştırmayı 3 bayt olarak değiştirebilirsiniz:

#define  compressTo3Bytes // tikleri 2 yerine 3 bayta sıkıştırın.


Sıkıştırılmış biçimde depolanacak tik öğeleri

Depolama için 3 çeşit tik elemanı programlanmıştır:

  1. Satış, Teklif, time_msc
  2. Satış, Teklif, time_msc, volume_real
  3. Tüm öğeler Ask, Bid, Last, time_msc, volume_real, flags (int volume volume_real'den hesaplanır).

Ayrıca ZIP olarak da sıkıştırılabilirler. Toplamda 6 varyant olacaktır

method=1;//1...6 BidAsk_=1, BidAskVolume_=2, All_=3, BidAsk_Zipped=4, BidAskVolume_Zipped=5, All_Zipped=6

Sıkıştırmaya başlamadan önce, kene depolama varyantını ve hesaplamalar ve fiyatların normalleştirilmesi için kullanılan bazı standart parametreleri sınıfa aktarmanız gerekir.

    TickCompressor Compressor2;
    double VolumeStep_=SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP);
    Compressor2.Start(method,_Point,VolumeStep_,_Digits);

Uzman Danışman bayrak kullanıyorsa, bunlar fiyat değişikliklerinden şu komutla geri yüklenebilir

#define  RestoreFlags // change ask, bid, volume'den tick bayraklarını geri yükle - tick oluşturma süresine 869ms yerine 931% ekleyecektir

Sıkıştırma testi için Uzman Danışman eklenmiştir, hız ve sıkıştırma oranı hakkında istatistikler verecektir. İçinde kenelerin sıkıştırma ve açma örneğini görebilirsiniz.

Ticaret için Uzman Danışman örneği buradan görüntülenebilir https://www.mql5.com/tr/code/65821.

2 ve 3 bayt sıkıştırma için istatistikler:

2 bayta sıkıştırma: 3 bayta sıkıştırma
Tik: 47707712
Sıkıştırılmış boyut: 135718404
Sıkıştırılmış 2862666420 baytları 135718404 baytlarına ==> %4,74
Sıkıştırma performansı: 764 MB/s
Sıkıştırma performansı: 13,4 Tik (milyon)/sn.
Sıkıştırma performans kriteri: 281,7
Sıkıştırma performansı: 3550 MB/s
Sıkıştırma performansı: 62,0 Tik (milyon)/sn.
Sıkıştırma performansı kriteri: 1308,8


Uzman https://www istatistikleri. mql5.com/en/code/65821
BTCUSDT için

-------------------- İstatistikler: --------------------
2 bayt: %70,1, 50705359 tik
4 bayt: %17,1, 12350966 tik
5 bayt: %12,7, 9185484 tik
6 bayt: %0.0%, 15274 tik
11 bayt: 0.1%, 46214 tik
12 bayt: 0.0%, 1 tik
24 bayt: 0.0%, 1 tik
Toplam: 72303299 tik, 197342036 bayt.
Ortalama: tik başına 2.729 bayt
Sıkıştırılmamış boyut: 197342036. Sıkıştırılmış boyut: 108302550. ZIP sıkıştırma: %54,9
Ortalama: tik başına 1,498 bayt

EURUSD için

-------------------- İstatistikler: --------------------
2 bayt: %66,2, 29694779 tik
4 bayt: %2,3, 1022937 tik
5 bayt: %31,5, 14106637 tik
6 bayt: %0.0%, 25 tik
7 bayt: 0.0%, 8 tik
11 bayt: 0.0%, 800 tik
12 bayt: 0.0%, 3 tik
13 bayt: 0.0%, 4 tik
24 bayt: 0.0%, 1 tik
Toplam: 44825194 tik, 134023609 bayt.
Ortalama: tik başına 2.99 bayt
Sıkıştırılmamış boyut: 134023609. Sıkıştırılmış boyut: 95495454. ZIP sıkıştırması: %71,3
Ortalama: tik başına 2,13 bayt
Tik: 47707712
Sıkıştırılmış boyut: 169378137
Sıkıştırılmış 2862462720 baytları 169378137 baytlarına ==> %5,92
Sıkıştırma performansı: 623 MB/s
Sıkıştırma performansı: 10,9 Tik (milyon)/sn.
Sıkıştırma performansı ölçütü: 183.9
Açma performansı: 3225 MB/s
Açma performansı: 56,4 Tik (milyon)/sn.
Açma performansı ölçütü: 952,6
Doğru = true

Uzman İstatistikleri https://www.mql5.com/en/code/65821
BTCUSDT için

-------------------- İstatistikler: --------------------
3 bayt: %86,6, 62644158 tik
4 bayt: %0,6, 412167 tik
5 bayt: %12,7, 9185484 tik
6 bayt: %0.0%, 15274 tik
11 bayt: 0.1%, 46214 tik
12 bayt: 0.0%, 1 tik
24 bayt: 0.0%, 1 tik
Toplam: 72303299 tik, 236108596 bayt.
Ortalama: tik başına 3.266 bayt
Sıkıştırılmamış boyut: 236108596. Sıkıştırılmış boyut: 105802525. ZIP sıkıştırması: %44,8
Ortalama: tik başına 1,463 bayt

EURUSD için

3 bayt: %66,5, 29801633 tik
4 bayt: %2,0, 916083 tik
5 bayt: %31,5, 14106637 tik
6 bayt: %0,0, 25 tik
7 bayt: %0.0, 8 tik
11 bayt: %0.0, 800 tik
12 bayt: %0.0, 3 tik
13 bayt: %0.0, 4 tik
24 bayt: %0.0, 1 tik
Toplam: 44825194 tik, 163611534 bayt.
Ortalama: tik başına 3.65 bayt
Sıkıştırılmamış boyut: 163611534. Sıkıştırılmış boyut: 96541155. ZIP sıkıştırma: %59,0
Ortalama: tik başına 2,154 bayt

Kod örnekleri

Kene sıkıştırma

Blok blok:

    int ZIPpos=0;//sıkıştırılmış bayt sayacı
    if(Amount>ticks_per_block){// > 1 blok - blokları tmp'den Ticks2'ye yapıştırma
       for(int start=0; start<Amount; start+=ticks_per_block){
          Compressor2.Compress(Ticks, tmp, start, (Amount > start + ticks_per_block ? ticks_per_block : Amount - start));
          ZIPpos+=ArrayCopy(Ticks2,tmp,ZIPpos); //copy to end of Ticks2
       }
    }else{//1 blok - doğrudan Ticks2'ye açma
       Compressor2.Compress(Ticks, Ticks2, 0, Amount);
    } 

Eğer 1 bloktaki tik sayısını dizideki toplam tik sayısından büyük olarak ayarlarsanız, 1 bloğa sıkıştırılacaktır.

Eğer her zaman 1 bloğa sıkıştırmaya ihtiyacınız varsa

Compressor2.Compress(Ticks,Ticks2); 

Ancak bu kadar büyük veya çok büyük bir bloğun dekompresyon hızı 2 kat daha yavaş olabilir. Ayrıca büyük bir blok için büyük bir bellek tüketimi olacaktır.


Tiklerin paketten çıkarılması

Paketi açarken, paketlenmiş tik sayısının bilinmesi arzu edilir. Alıcı dizisi bu boyuta sahip olmalıdır.

ArrayResize(Ticks3,Amount);

Boyut, örneğin bir dosyaya kaydedilebilir. Ve sonra paketten çıkarırken kullanın.

Boyut bilinmiyorsa, döngü içindeki boyutu bloktaki tik sayısına göre değiştirebilirsiniz

       //yavaşla 
ArrayResize(Ticks3,total_ticks+ticks_per_block,10000000); //büyük bir diziyi yeniden boyutlandırma - küçük bir bloğun üzerine yazmaktan daha yavaş çalışır


Bu kod blok blok tik alır. Yalnızca 1 büyük blok varsa, onu da doğru şekilde sayar. Keneler büyük bir dizide toplanmaz, ancak Strategy(Ticks3[j]) stratejiniz tarafından hemen işlenebilir;

    while (ZIPpos<ArraySize(Ticks2)){
       nextSize=Compressor3.ArrToInt(Ticks2,ZIPpos);//sonraki bloğu boyutlandırın, ZIPpos'u 4 artırın

       uint s = ArrayCopy(tmp,Ticks2,0,ZIPpos,nextSize); // yeni bloğu nextSize boyutuyla tmp'ye kopyala
       //3 kat daha yavaş ArrayResize(Ticks3,total_ticks+ticks_per_block,10000000); //büyük bir diziyi yeniden boyutlandırır - küçük bir bloğun üzerine yazmaktan daha yavaş çalışır
       //total_ticks=Compressor3.DeCompress(tmp,Ticks3,nextSize,total_ticks);//bloku paketinden çıkarın ve Ticks3'e ekleyin.
       
       total_ticks+=Compressor3.DeCompress(tmp,Ticks3,nextSize,0); //bloku paketinden çıkarın ve Ticks3'te üzerine yazın
       ZIPpos+=nextSize;
       for (int j = 0; j < ticks; j++){ Strategy(Ticks3[j]);}//strateji
    };


Tüm bloklardan gelen tikleri tek bir büyük dizide toplar:

    while (ZIPpos<ArraySize(Ticks2)){
       nextSize=Compressor3.ArrToInt(Ticks2,ZIPpos);//sonraki bloğu boyutlandırın, ZIPpos'u 4 artırın

       uint s = ArrayCopy(tmp,Ticks2,0,ZIPpos,nextSize); // yeni bloğu nextSize boyutuyla tmp'ye kopyala
       //daha yavaş ArrayResize(Ticks3,total_ticks+ticks_per_block,10000000); //büyük bir diziyi yeniden boyutlandırır - küçük bir bloğun üzerine yazmaktan daha yavaş çalışır
       total_ticks=Compressor3.DeCompress(tmp,Ticks3,nextSize,total_ticks);//bloku paketinden çıkarın ve Ticks3'e ekleyin
       
       //total_ticks+=Compressor3.DeCompress(tmp,Ticks3,nextSize,0); //bloku paketinden çıkarın ve Ticks3'ün üzerine yazın
       ZIPpos+=nextSize;
       //for (int j = 0; j < ticks; j++){ Strateji(Ticks3[j]);}//strateji
    };


Veya bir satır. Yalnızca 1 blok kaydedilmelidir. Daha fazla ise - yukarıdaki 2 kod varyantını kullanın.

total_ticks=Compressor3.DeCompress(Ticks2,Ticks3);



MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal kod: https://www.mql5.com/ru/code/66201

MARSICD MARSICD

İki RSI göstergesine dayalı trend göstergesi.

MA_NRTR MA_NRTR

NRTR formunda basit trend göstergesi

Titik Impas Breakeven Titik Impas Breakeven

Tek bir işlemin stop-loss'unu açık fiyatına uyacak şekilde manuel olarak ayarlamak nispeten basit bir görev olsa da, çok sayıda pozisyonu ayrı ayrı yönetmek zahmetli ve zaman alıcı olabilir. MT4/MT5 için Titik Impas Breakeven komut dosyası, bu süreci kolaylaştırarak birden fazla pozisyonla uğraşan tüccarlar için verimlilik ve kolaylık sağlar.

Inter Inter

Çok para birimli çoklu çerçeve göstergesi.