Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Çerçevelerle çalışma hakkında bilgiedinin.
İşte bu kod:
inNum=0;
{ // İlgili optimize edilmiş giriş parametrelerini okuyun
Print("GLOC = ",GLOC);
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerini test etme üzerine forum.
Kütüphaneler: TesterCache
fxsaber, 2019.11.11 04:45 pm.
Bir bayt dizisi içinde bir opt dosyası aldınız. Ardından, bunu Cache'e aktarmanız gerekir.
Dediğiniz gibi düzelttim:
string Sohran,Contr;
MTTESTER::GetSettings(Sohran); // Robotun mevcut başlangıç ayarları Sohran'da geçici olarak kaydedilmek üzere okunur.
prWrite = MTTESTER::SetSettings2(Odinar); // Odinar'ı robot ayarlarına ayarla
prRead = MTTESTER::GetSettings(Contr); // Az önce ayarlanmış olan robot ayarlarını okuyun.
Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);
Print("SettingBeg OdinarContr ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);
Run(Contr[0]); // Seçilen Y parametresinin değerleri üzerinde optimizasyonu çalıştırın
int GLOC = MTTESTER::GetLastOptCache(Bytess); // Opt dosyasını Bytess bayt dizisine al
TESTERCACHE<ExpTradeSummary> Cache;
bool CL = Cache.Load(Bytess); // Bytess bayt dizisini Cache'e besleyin
ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // Maksimum kar
int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // Maksimum karlı geçiş sayısı
int IndexMaxProfit = GetMaxProfitPos(Cache); // https://www.mql5.com/ru/forum/318998/page2#comment_13846951 parametresinin değerini içeren dizinin indeksi
Cache.GetInputs(IndexMaxProfit,Paramas);
ParamMax = Paramas[0,1].double_value; // Maksimum kârın elde edildiği parametrenin değeri
Alert("CL=",CL," GLOC = ",GLOC," GLOC," ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber);
return;
Sonuç hala yanlış.
Bazı nedenlerden dolayı, önceki bazı çalıştırmalardan ProfitNow ve ParamMax verileri önbellekten okunuyor.
Saygılarımla, Alexander
Bazı nedenlerden dolayı, önceki bir çalıştırmaya ait ProfitNow ve ParamMax verileri önbellekten okunur.
Bu komut dosyası Optimizasyondan sonra doğru değerleri gösteriyor mu?
Evet ise, sorun büyük olasılıkla Optimizasyondan hemen sonra opt dosyasının hazır olmamasıdır. Çalıştır'dan sonra Uyku'yu koymayı deneyebilirsiniz. Ya da Run düzgün çalışmıyor.
Bu komut dosyası Optimizasyondan sonra doğru değerleri gösteriyor mu?
Evet ise, sorun büyük olasılıkla Optimizasyondan hemen sonra opt dosyasının hazır olmamasıdır. Çalıştır'dan sonra Uyku'yu koymayı deneyebilirsiniz. Ya da Run düzgün çalışmıyor.
Teşekkürler! Tüm bunları yarın kontrol edeceğim.
Ancak şimdi, optimizasyonu yeni bir parametre ile ayarlarsam, her şeyin doğru çalıştığını öğrendim.
Bana öyle geliyor ki bütün mesele, daha önce çalışmış olan bir optimizasyonu yeniden ayarlarsanız, test cihazının aslında onu yeniden işlememesi, sadece önceki sonucu hafızadan almasıdır.
Test cihazının bu hafızasını önceden yok edecek bir şey icat edilemez mi?
Bana öyle geliyor ki bütün mesele, daha önce çalışan bir optimizasyonu yeniden ayarladığınızda test cihazının aslında bunu yeniden işlememesi, sadece geçmiş sonucu bellekten almasıdır.
Hipotezleriniz yanlış. Sorun yazdığınız kodda.
Hipotezleriniz yanlış. Sorun yazdığınız kodda.
İyi günler!
"Sorunun yazdığım kodda olduğu" konusunda size katılıyorum. Hata kodun içinde ve henüz nasıl düzelteceğimi bilmiyorum.
Ancak, deneysel olarak, Çalıştır'ı çalıştırmadan önce tüm opt dosyalarını manuel olarak kaldırırsanız.
"C:\Users\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" klasöründen,
o zaman kodum doğru çalışır ve seçilen parametre üzerinde optimizasyon gerçekleştirir.
Bu klasör temizlenmezse, Test Cihazı tekrarlanan optimizasyonları gerçekleştirmez (aynı değişmemiş verilerle), ancak şunları okur
bu klasörden zaten mevcut opt dosyası. Bu, aynı optimizasyon manuel olarak tekrar tekrar çalıştırıldığında açıkça görülebilir.
Gerçek optimizasyonun yalnızca ilk kez gerçekleştirildiği ve ardından yalnızca opt dosyasını klasörden okuduğu görülebilir.
Bu tekrarlanan okuma, önbelleğin içeriğini güncellemiyor gibi görünüyor ve kodumdaki hataya neden olan da bu.
Söz konusu klasörü temizlemek hatayı çözmeye yardımcı olabilir. Tabii ki bu kötü bir çözüm ve önbellekteki doğru verileri geri yükleyebilmek daha şık olurdu.
Ama bunu nasıl yapacağımı bilmiyorum. Şimdilik, önceki gerçek optimizasyondan gelen veriler önbellekte asılı duruyor (klasörden yeniden okuma ile eşleşmiyor).
Ne yazık ki, bu klasör FolderClean kullanılarak koddan temizlenemez, çünkü MQL5'te yasaklanmıştır.
"sanal alan" dışındadır ve yalnızca Strateji Test Cihazı tarafından doldurulur.
Belki de C++ aracılığıyla harici bir eklenti oluşturmalı ve bunu komut dosyasından çalıştırmalısınız.
Saygılarımla, Alexander