Kütüphaneler: MultiTester - sayfa 56

 

Bazen fiyat geçmişinin bir kısmını tablo şeklinde görüntülemek gerekir. Bu, CTRL+U ile Çubuklar/Tickler sekmesi seçilerek yapılabilir. Gerekli aralığı oraya elle girmek. Bu sıkıcı bir işlemdir.


Bu nedenle, aşağıdaki Uzman Danışman tarafından gösterilen ek bir işlevsellik oluşturdum.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/tr/code/26132
#include <fxsaber\Keyboard\Keyboard.mqh> // https://www.mql5.com/tr/code/48393

input bool inTicks = true; // true - Ticks, false - Bars
input int inBefore = -60; // Saniye cinsinden önce
input int inAfter = 60;   // Saniye cinsinden sonra
input ENUM_TIMEFRAMES inPeriod = PERIOD_CURRENT; // Periyot (Çubuklar modu)

datetime GetTime( const int X )
{
  int Window;
  datetime Res;
  double Price;
    
  return(ChartXYToTimePrice(0, X, 0, Window, Res, Price) ? Res : 0);
}

void OnChartEvent( const int32_t id, const long &lparam, const double&, const string& )
{
  if ((id == CHARTEVENT_CLICK) && KEYBOARD::IsControl())
  {
    const datetime Time = GetTime((int)lparam);

    if (Time)
    {
      if (inTicks)
        MTTESTER::CopyTicks(_Symbol, Time + inBefore, Time + inAfter);
      else
        MTTESTER::CopyRates(_Symbol, inPeriod, Time + inBefore, Time + inAfter);      
    }    
  }
}


Grafiğin gerekli yerine tıklarsınız (CTRL basılıyken) ve ilgili tablo verilerini bir kerede otomatik olarak alırsınız.

Seçilen işlevler sadece belirli veri alanlarını doldurur ve sorgular. Ardından GUI aracılığıyla neyle ilgilendiğinizi görürsünüz. Genel olarak otomasyon.

 
Belki de çeşitli kullanışlı özellikleri bir araya getiren bir EA aracı yazma fikri iyi bir fikir olabilir.
 

5430 Bir görev hazırlanırken pencereler hala yanıp sönüyor.

Bunu nasıl düzeltebilirsiniz?

 
Aleksei Skrypnev #:

5430 Bir ödev hazırlanırken Windows hala yanıp sönüyor.

Bunu nasıl düzelteceksin?

Bu şekilde.
Попробуйте загрузить все файлы в архиве.
Попробуйте загрузить все файлы в архиве.
  • 2025.12.22
  • www.mql5.com
если бы время файлов в архиве совпадало со временем модификации в кодобазе. Не соответствует времени изменения конкретного файла. Я вижу корректную структуру после разархивирования а ведь сам редактор позволяет загрузить все эти файлы именно так
 
fxsaber #:
Böylece.

Harika bir tema. Ama her şey ayrı ayrı hala yanıp sönmeden önce indirdim.

Bunu MultiTester_Example.mq5 dosyasında gördüm

MultiTester_Example.mq5 dosyasına satırlar eklendi.

#define  FAKE // Kaldır - kodu KB'ye yerleştirmek için atlayın.

#ifdef  FAKE
  void OnStart() {}
#else // #ifdef SAHTE
#endif // #ifdef SAHTE #else

Bu şekilde mi yorumladım yoksa farklı mı yapmalıyım? Ya da bu 4 satırın hepsini silebilir miyim?

//#define FAKE // Kaldır - KB'ye kod yerleştirmek için bypass.

#ifdef FAKE// void OnStart() {}

#else // #ifdef SAHTE

#endif // #ifdef SAHTE #else


Not: Bu satırlar olmadan eski görev listesini aldığımda titrediğini gördüm. Yeni satırlarla yanıp sönmüyor.

Ama sadece 1 satırı doğru yorumladım mı?

 
Aleksei Skrypnev #:

Bu harika bir tema. Ancak bundan önce indirdiğim her şey ayrı ayrı hala yanıp sönüyor.

Bunu MultiTester_Example.mq5 dosyasında gördüm

eklenen çizgiler

Bu şekilde mi yorumladım yoksa farklı mı yapmalıyım? Yoksa bu 4 satırı genel olarak silebilir miyim?


Not: Eski görev listesini bu satırlar olmadan aldığımda yanıp söndüğünü gördüm. Yeni hatlarda göz kırpmaz.

Ama sadece 1 satırı doğru yorumladım mı?

Anlayışınız doğru: yorumları kaldırın veya bu 4 satırı tamamen silin.
 
İyi günler, sevgili fxsaber! Lütfen bir sorunu çözmeme yardım edin. Scriptimde, harika MTTESTER kütüphanesinin yardımıyla geliştirdiğim bir arşiv fonksiyonu var. Aşağıdaki satırda Settin'i Tester klasörüne yazıyor: if(!kernel32::CopyFileW(SrcPath,DstPath,false)) // Files sanal alanından Tester klasörüne Settin'in üzerine yaz. "Arşivlemeden sonra" adında bir set elde ederiz. Ancak, görünüşe göre kodlama nedeniyle daha fazla yeniden çalışma için uygun değildir. Bununla birlikte, Strateji Test Cihazında robota manuel olarak yazarsanız ve ardından "Robota manuel olarak yazdıktan ve kaydettikten sonra" adıyla kaydederseniz, bu set zaten uygundur. Ve bu sadece başlığı değiştirme meselesi değil, başka bir şey. Demir adamlardan (Qwen, Deep Seek) yardım istedim ve bir "ReloadSetsFromCommonFixed" betiği oluşturdular. Birçok harika özelliği var ve şu satır dışında çalışıyor: if(!FileCopy(source_path, FILE_COMMON, dest_path, FILE_COMMON)) Set kopyalandı, ancak daha sonra doğrulama çıktısında çıktı, görünüşe göre kodlama nedeniyle abrakadabra. Demir 4 çözüm önerdi, ancak hiçbiri işe yaramadı (metinde hepsi var). Son umudum deri olanlar. Arşivleme işlevindeki şu satırı değiştirmenin bir yolu var mı: if(!kernel32::CopyFileW(SrcPath,DstPath,false)) robota elle yazmayı ve ardından gerekli biçimde kaydetmeyi simüle etmek için "Robota elle yazdıktan ve kaydettikten sonra"? Saygılarımla, Alexander
 
klycko #:
Arşivleme işlevinde bu satırı değiştirmenin bir yolu var mı

Buraya baktım (açılan pencerede adres çubuğunda ENTER tuşuna basın) ayarlanmış kayıt. Büyük olasılıkla bu bayraklara ihtiyaç vardır.

FileOpen(FileName, FILE_WRITE | FILE_UNICODE | FILE_TXT);
 

Bu bayraklar çok yardımcı oldu ve arşivleme sorunu çözüldü. Şimdi sonuç doğru formatta.

Çok teşekkür ederim!

Ancak Nocturne komut dosyamda komut düzgün çalışmıyor :

prWrite0 = MTTESTER::SetSettings2(Settings); // Ayarları robota yaz

Yürütüldükten sonra prWrite0 = true olmasına rağmen.

Muhtemelen klasörden Ayarlar setini okurken yine bir bayrak meselesidir.

Bu, şu satıra sahip olan GetKthFileContent işlevi tarafından yapılır:

int handle = FileOpen(full_path, FILE_READ | FILE_WRITE | FILE_UNICODE | FILE_TXT | FILE_COMMON);

Aşağıdaki satırın varyantları da çalışmaz:

// int handle = FileOpen(full_path, FILE_READ | FILE_TXT | FILE_COMMON); // Kaynak varyant satırı

// int handle = FileOpen(full_path, FILE_READ | FILE_UNICODE | FILE_TXT | FILE_COMMON);

Sonraki komut:

prRead0 = MTTESTER::GetSettings(Control); // Yeni yüklenen robot ayarlarını okur

doğru çalışır ve yürütüldükten sonra prRead0 = true olur.

Ancak Kontrol ağında prMFI=true, çünkü başlangıçta robota manuel olarak yüklenmiştir. Bu, prWrite0 = true yazma işaretine rağmen robota yazma işleminin aslında gerçekleşmediği anlamına gelir.

Orijinal ağda, prHEX=true

Robotun orijinal ağında prMFI=true

MTTESTER::SetSettings2(Ayarlar) komutu çalışıyor, ancak bu ayarlar robotta görünmüyor.

Buradaki sorun nedir?

Saygılarımla, Alexander

 
klycko #:

Peki buradaki sorun nedir?

Bayrakları incelemekle uğraşmadım ve Tester set dosyalarını kaydetmek ve yüklemek için çalışan bir kod yazmaya karar verdim.

// Test cihazının set dosyasını yükleyin/kaydedin.
#property script_show_inputs

input bool inLoad = true; // Ayarlar Yükle/Kaydet - true/false

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/tr/code/26132

void OnStart()
{
  const string FileName = __FILE__ + ".set";
  
  string Settings;
  ushort Words[];  
      
  if (inLoad) // Ayarları yükle.
  {
    Print("Load: " + (string)FileLoad(FileName, Words));
    Settings = ShortArrayToString(Words, 1); // 1 - Unicode
    
    Print(MTTESTER::SetSettings(Settings));
  
  }
  else if (MTTESTER::GetSettings(Settings)) // Ayarları kaydet.
  {
    Words[ArrayResize(Words, 1) - 1] = 0xFEFF; // 1 - Unicode
    
    StringToShortArray(Settings, Words, ArraySize(Words));    
    Print("Save: " + (FileSave(FileName, Words) ? (string)ArraySize(Words) : "error"));
  }
}


Kod aracılığıyla bir set dosyasını kaydedebilir(inLoad = false), ardındaniçindeki bir şeyi elle değiştirebilir ve kod aracılığıyla Tester'a yükleyebilirsiniz(inLoad = true).

Çalışırsa, kaynağın ilgili parçalarını kendiniz için alın.