Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1358

 

Merhaba!

Belki bilen biri vardır... WebRequest kullanılarak alınan bir ZIP dosyasının bayt dizisini bir ZIP arşivine dönüştürmek ve MQL5 kullanarak diske açmak için bir çözüm arıyorum.

Bir çözüm arayışı beni 2015'ten "Üçüncü taraf kitaplıkları kullanmadan MQL5 kullanarak ZIP arşivleriyle çalışma" makalesine götürdü ( https://www.mql5.com/en/articles/1971 ). Burada yazar çözümü gösterdi ve ZIP arşivleriyle çalışmak için CZip sınıfını yayınladı. Ancak bu çözüm başarısız olur - derleme sırasında MetaEditor yürütülebilir dosyayı CZip sınıf kitaplığındaki hatalara atıfta bulunarak derleyemez.

Sorumun özü şuna indirgenebilir: - CZip sınıfının yöntemlerini, özellikle de CreateFromCharArray() ve UnpackZipArchive() yöntemlerini doğrudan komut dosyası kodunda nasıl ayrı ayrı kullanabilirim?

 //+------------------------------------------------------------------+
//|                                                     ZipTask2.mq5 |
//|                                 Copyright 2015, Vasiliy Sokolov. |
//|                                               https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Vasiliy Sokolov."
#property link        " https://www.mql5.com "
#property version    "1.00"
#include <Zip\Zip.mqh>

CZip Zip;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   string cookie,headers;
   string mql_url= " https://www.mql5.com/ru/code/download/9 " ;
   int timeout= 5000 ;
   uchar data[],zip_array[];
   if (! WebRequest ( "GET" ,mql_url,cookie, NULL ,timeout,data, 0 ,zip_array,headers))
     {
       printf ( "Unable to download ZIP archive from " +mql_url+ ". Check request and permissions EA." );
       return ;
     }
   if (!Zip.CreateFromCharArray(zip_array))
     {
       printf ( "Loaded bad ZIP archive. Check results array." );
       return ;
     }
   printf ( "Archive successfully loaded. Total files: " +( string )Zip.TotalElements());
   Zip.UnpackZipArchive( "Alligator" , FILE_COMMON );
  }
//+------------------------------------------------------------------+
Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек
Работаем с ZIP-архивами средствами MQL5 без использования сторонних библиотек
  • www.mql5.com
Язык MQL5 развивается, и в него постоянно добавляются новые функции для работы с данными. С некоторых пор, благодаря нововведениям, стало возможно работать с ZIP-архивами штатными средствами MQL5 без привлечения сторонних библиотек DLL. Данная статья подробно описывает, как это делается, на примере описания класса CZip — универсального инструмента для чтения, создания и модификации ZIP-архивов.
 
Soruyu tekrar edeceğim.
Periyodik olarak dosya oluşturan bir servis var ( FileClose ile her şeyi doğru kapatıyorum).
Başlattıktan sonra, genellikle ilk dosya normal olarak oluşturulur, ardından FileOpen 5001 hatasını döndürmeye başlar.
Ancak tüm bunlar rastgele - bazen işe yarıyor, bazen çalışmıyor. Aynı zamanda bir scriptte veya Expert Advisor'da aynı kodu çalıştırdığımda problemin farkına varmadım.
Bu yasak nasıl aşılır?
 
Evgeny Dyuka # :
Soruyu tekrar edeceğim.
Periyodik olarak dosya oluşturan bir servis var ( FileClose ile her şeyi doğru kapatıyorum).
Başlattıktan sonra, genellikle ilk dosya normal olarak oluşturulur, ardından FileOpen 5001 hatasını döndürmeye başlar.
Ancak tüm bunlar rastgele - bazen işe yarıyor, bazen çalışmıyor. Aynı zamanda bir scriptte veya Expert Advisor'da aynı kodu çalıştırdığımda problemin farkına varmadım.
Bu yasak nasıl aşılır?

Birinin sizinkiyle aynı hatalarla benzer bir hizmet yazmasını ve neyin düzeltilmesi gerektiğini size söylemesini ister misiniz?

 
Alexey Viktorov # :

Birinin sizinkiyle aynı hatalarla benzer bir hizmet yazmasını ve neyin düzeltilmesi gerektiğini size söylemesini ister misiniz?

Kodu düzenleyebilmem için fazlalığı kesmeye başladım ve hepsi işe yaradı))
Dosya arama fonksiyonunda, arama FileFindClose() ile kapatılmadı.
Her durumda, cevap için teşekkürler.
 
Evgeny Dyuka # :
Kodu düzenleyebilmem için fazlalığı kesmeye başladım ve hepsi işe yaradı))
Dosya arama fonksiyonunda, arama FileFindClose() ile kapatılmadı.
Her durumda, cevap için teşekkürler.

Evet, dosyayı kullanan her şey onu açar (dosyaya erişimi açar)))) Ve dosyanın (erişim) kapatılması gerekir.

Fazladan bir kapatma, sonuçsuz olarak -1 döndürür ve unutulmuş bir açık dosya birçok sorun yaratabilir)

 

Giriş bloğunda robotun parametrelerinde bir yorum göstermemenin mümkün olduğunu hatırlat?

 sinput long    MagicNumber= 123 ;       // Магический номер

böylece MagicNumber, parametrelerde - Sihirli sayı yerine açılır (bu sadece bir örnektir)

 
Fast235 # :

Giriş bloğunda robotun parametrelerinde bir yorum göstermemenin mümkün olduğunu hatırlat?

böylece parametrelerde - Sihirli sayı yerine MagicNumber'ı alırsınız (bu sadece bir örnektir)

'sinput' bir parametre çıktısı verir, ancak onu optimizasyona dahil edemezsiniz.

Sinput değiştiricili değişkenler   #

Değiştirici Değişkenler   giriş   programları başlatırken yalnızca harici parametrelerin değerlerini ayarlamanıza izin vermekle kalmaz, aynı zamanda test cihazında ticaret stratejilerini optimize etmede önemli bir rol oynar. Dize türü dışında Expert Advisor'da bildirilen her giriş değişkeni optimizasyona katılabilir.

Bazı durumlarda, test cihazında olası tüm geçişlerin alanının oluşumundan programın bazı harici parametrelerinin çıkarılması gerekebilir. Bu tür durumlar için özel olarak bir bellek değiştirici vardır.   giriş . sinput, statik harici değişken bildiriminin kısaltmasıdır: sinput = statik girdi. Yani, danışman kodunda böyle bir beyan

 sinput        int layers= 6 ;   // Количество слоев

tam bir beyana eşdeğer olacaktır

 static input int layers= 6 ;   // Количество слоев

Sinput değiştiricisi ile bildirilen bir değişken, bir MQL5 programının giriş parametresidir, bu parametrenin değeri başlatıldığında değiştirilebilir. Ancak aynı zamanda, bu değişken girdi parametrelerini optimize etme sürecine katılmaz, yani belirli bir kritere göre en iyi parametre kümesini ararken değerlerini numaralandırmaz.

giriş

Şekil, Expert Advisor'ın "Katman sayısı" parametresi olarak bildirildiği 5 harici parametreye sahip olduğunu göstermektedir.   giriş   ve eşittir 6. Bu parametre, bir ticaret stratejisini optimize etme prosedüründe değiştirilemez, bunun için kullanılacak olan istenen değeri ayarlamak mümkündür. Böyle bir değişken için Başlat, Adım ve Durdur alanları, değerlerin ayarlanması için kullanılamaz.

Böylece, bir değişken için bir giriş değiştirici ayarlayarak, kullanıcının bu parametreyi optimize etmesini engelleriz. Bu, strateji test cihazında, terminal kullanıcısının optimizasyon işlemi sırasında belirtilen aralıkta otomatik numaralandırma için ilk ve son değerleri ayarlamasının imkansız hale geldiği anlamına gelir.

Ancak aynı zamanda, bu kuralın bir istisnası vardır - giriş değişkenleri, fonksiyon kullanılarak optimizasyon problemlerinde değiştirilebilir.   ParameterSetRange() . Bu işlev, herhangi biri için mevcut değerlerin alanının programlı kontrolü için özel olarak oluşturulmuştur.   olarak bildirilenler de dahil olmak üzere girdi değişkenleri   statik giriş   (sinput). Diğer işlev   ParametreGetRange()   optimizasyonu başlatırken izin verir (işleyicide   OnTesterInit() ) giriş değişkenlerinin değerlerini alır ve gerekirse değişiklik adımını ve optimize edilen parametrenin değerinin yineleneceği aralığı geçersiz kılar.

Bu nedenle, giriş parametreleriyle çalışmak için giriş değiştiricisi ve iki işlevin birleşimi, diğer giriş değişkenlerinin değerine bağlı olarak bazı giriş değişkenleri için optimizasyon aralıklarını ayarlamak için esnek kurallar oluşturmanıza olanak tanır.

Документация по MQL5: Основы языка / Переменные / Input переменные
Документация по MQL5: Основы языка / Переменные / Input переменные
  • www.mql5.com
Input переменные - Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

sinput hatırlıyorum, soru yorumun ekranında, danışmanın parametrelerinde yorum yerine değişkenin adını görüntülemek mümkün mü?

örneğin yanlışlıkla yakalanan sinput ile ps satırı)

 
Fast235 # :

sinput hatırlıyorum, soru yorumun ekranında, danışmanın parametrelerinde yorum yerine değişkenin adını görüntülemek mümkün mü?

örneğin yanlışlıkla yakalanan sinput ile ps satırı)

';' den sonra hiçbir şey yazmayın.

Örnek - açıklama :

 input group     "Buy Saucer"
input uchar        InpBuySaucerCode     = 174 ;   // Buy Saucer: Arrow code (font Wingdings) 

ve şimdi açıklamayı kaldırın:

 input group     "Buy Saucer"
input uchar        InpBuySaucerCode     = 174 ;    


ve değişken adını görün

 

';' den sonra hiçbir şey yazmayın.

soru buydu, bir yorum var ve parametrelerde değişkenin adını görüntülemeniz gerekiyor,

belki bunun bir hilesi vardır...