MT sürümlerinin arşivi.

 

Sevgili, burada MT sürümlerinin bir arşivini oluşturmayı öneriyorum. Ve sonra, bazen, güncelleme ile beklenmedik hatalar ortaya çıkabilir ve önceki sürüme geri dönmeniz gerekebilir ...

Şimdi 2007 yapımına ihtiyacım var. Elinde olan var mı? Lütfen paylaşın.

 
Сергей Таболин :

Sevgili, burada MT sürümlerinin bir arşivini oluşturmayı öneriyorum. Ve sonra, bazen, güncelleme ile beklenmedik hatalar ortaya çıkabilir ve önceki sürüme geri dönmeniz gerekebilir ...

Şimdi 2007 yapımına ihtiyacım var. Elinde olan var mı? Lütfen paylaşın.

Burada koleksiyonu toplayan bir adam var. Ancak hatırladığım kadarıyla, ilerlemenin yavaşlamaması için MT sürümlerinin arşivlerine bağlantı içeren gönderileri bazen siliniyor. ))

 


bağlantım burada öldürüldü,

geliştiriciler yalnızca güvenilir kaynaklardan indirmeyi önerir

Test etmek için derlememi riske atmak istiyorsan, kişisel olarak yaz

çalışma ahırlarını taşınabilir veya arşive kaydetmeniz ve genellikle test yapıları için farkındalıkla güncelleme yapmanız gerekir

DC'de şimdi 2007 derlemesi

 
Fast235 :

bağlantım burada öldürüldü,

geliştiriciler yalnızca güvenilir kaynaklardan indirmeyi önerir

Test etmek için derlememi riske atmak istiyorsan, kişisel olarak yaz

çalışma ahırlarını taşınabilir veya arşive kaydetmeniz ve genellikle test yapıları için farkındalıkla güncelleme yapmanız gerekir

DC'de şimdi 2007 derlemesi

Eski sürümleri kaldırarak doğru olanı yapıyorlar.

Programları normal bir şekilde yazmak gerekir. Uyarıları göz ardı etmeyin. Değişkenleri sıfırlayın ve mümkün olduğunca global kullanmayın. Kodda potansiyel olarak tehlikeli anlardan kaçının.

On binlerce satır kodum var - katı modda tek bir uyarı yok. CodeBase'den gelen el sanatlarının yarısı - strict'a olmadan bile, bin satırları bile olmasa da uyarı veriyorlar. Ve sonra, "eski yapıda her şey çalıştı, ancak yenisinde durdu" gerçeği hakkında konuşmalar başlıyor ...

 
Georgiy Merts :

Eski sürümleri kaldırarak doğru olanı yapıyorlar.

Programları normal bir şekilde yazmak gerekir. Uyarıları göz ardı etmeyin. Değişkenleri sıfırlayın ve mümkün olduğunca global kullanmayın. Kodda potansiyel olarak tehlikeli anlardan kaçının.

On binlerce satır kodum var - katı modda tek bir uyarı yok. CodeBase'den gelen el sanatlarının yarısı - strict'a olmadan bile, bin satırları bile olmasa da uyarı veriyorlar. Ve sonra, "eski yapıda her şey çalıştı, ancak yenisinde durdu" gerçeği hakkında konuşmalar başlıyor ...

Bu bir gezici programı mı? Bu kadar satırda ne anlatılabilir???

 
Sergey Basov :

Burada koleksiyonu toplayan bir adam var. Ancak hatırladığım kadarıyla, ilerlemenin yavaşlamaması için MT sürümlerinin arşivlerine bağlantı içeren gönderileri bazen siliniyor. ))

Teşekkür ederim. İndirildi.

Hızlı235 :

bağlantım burada öldürüldü,

geliştiriciler yalnızca güvenilir kaynaklardan indirmeyi önerir

Test etmek için derlememi riske atmak istiyorsan, kişisel olarak yaz

çalışma ahırlarını taşınabilir veya arşive kaydetmeniz ve genellikle test yapıları için farkındalıkla güncelleme yapmanız gerekir

DC'de şimdi 2007 derlemesi

Test sürümüne yükseltme yapmıyorum. Ve şimdi kurtaracağım

George Merts'in fotoğrafı.

Eski sürümleri kaldırarak doğru olanı yapıyorlar.

Programları normal bir şekilde yazmak gerekir. Uyarıları göz ardı etmeyin. Değişkenleri sıfırlayın ve mümkün olduğunca global kullanmayın. Kodda potansiyel olarak tehlikeli anlardan kaçının.

On binlerce satır kodum var - katı modda tek bir uyarı yok. CodeBase'den gelen el sanatlarının yarısı - katı olmadan bile, bin satırları olmasa da uyarı veriyor. Ve sonra "eski yapıda her şey çalıştı ama yenisinde durdu" gerçeğinden bahsetmeye başlarlar...

George, başlıktaki son mesajımı oku. Sorunun kaynağını buldum. Kodumda yok.

 
Сергей Таболин :

Teşekkür ederim. İndirildi.

Test sürümüne yükseltme yapmıyorum. Ve şimdi kurtaracağım

George, konudaki son yazımı oku. Sorunun kaynağını buldum. Kodumda yok.

Okudum.

Sorunun kaynağı, geliştiricilerin ve sizin duruma biraz farklı yaklaşmış olmanızdır. Kabaca söylemek gerekirse, "birbirlerini anlamadılar." İşte bu yüzden, belirsizliğin olabileceği yerler dışında, kodun her zaman mümkün olduğunca basit ve açık olması gerektiğinde ısrar ediyorum.

MT5'in yoluna devam ettiği günleri hatırlıyorum - herkes şaşırmıştı, insanlar değişkenleri kitlesel olarak sıfır olacaklarına inanarak başlatmadan kullanıyorlar.

Burada bir anekdotu nasıl hatırlamam:

Malvina, Pinokyo'ya üç elma verdi. İki tane yedi. Pinokyo'nun kaç elması kaldı?

Programcı N1 :
- Ne kadar olduğu bilinmiyor. Daha önce kaç elması olduğunu kimse bilmiyor!

Ahlaki : ilk değişkenleri sıfıra ayarlayın.


programcı N2
- Ne kadar olduğu bilinmiyor. Belki Malvina elma verirken Pierrot da onları yemiştir?

Ahlaki : genel değişkenler kullanmayın.

programcı N3
- Ne kadar olduğu bilinmiyor. Pinokyo elma yedi demiyor, iki tane yediği söyleniyor ama ne olduğu belli değil. Ayrıca "Pinokyo" isminin eğimli olmadığı gerçeği göz önüne alındığında - Pinokyo ve Pinokyo farklı değişkenlerdir.


Ahlaki : sözdizimini izleyin

 
Сергей Таболин :

Teşekkür ederim. İndirildi.

Test sürümüne yükseltme yapmıyorum. Ve şimdi kurtaracağım

George, konudaki son yazımı oku. Sorunun kaynağını buldum. Kodumda yok .

Ancak sorunun kaynağı yeni yapı değil, "belgeleri okumadı" idi. Bu nedenle, kurnazsınız, kodunuz hakkında değil.

1:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Pekala, bundan sonra ne yapmak istiyorsun?

Sergey Tabolin , 2019.06.16 00:17

Bu dağınıklığın sebebini buldum.

Mesele şu:

 //--- пропустить бесполезные проходы оптимизации
//*
   if (!check_init && ( MQLInfoInteger ( MQL_OPTIMIZATION ) || MQLInfoInteger ( MQL_TESTER )))
   {
       if (period_HMA7C == 0 && move_profit)                                                             TesterStop ();
       if (period_HMA7C == 0 && move_stop)                                                               TesterStop ();
       if (period_HMA7C == 0 && shift_correction_HMA7C != 5 )                                             TesterStop ();
       if (indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0 )                               TesterStop ();
       if (indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0 )                               TesterStop ();
       if ((stop_loss_buy > 0 && stop_loss_buy < 700 ) || (stop_loss_sell > 0 && stop_loss_sell < 700 ))   TesterStop ();
      check_init = true ;
   }
//*/

Yeni sürümde, TesterStop()'tan sonra OnTester()'ın da başlatıldığı ortaya çıktı, ancak akla göre başlatılmaması gerekiyor.

Doğal olarak, hiçbir veri hazırlanmıyor, öyleyse ne halt oluyor.

Cant MT 2085.

2:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Pekala, bundan sonra ne yapmak istiyorsun?

Sergey Tabolin , 2019.06.16 09:02

Üzgünüm. Açıklama sadece OnTester() çağrıldıktan sonra olduğunu söylüyor. ((((

Hala orada kontrol etmek zorundasın. ExpertRemove() ile değiştirmeyi deneyeceğim ...

Ve sonra tekrar "deneyeceğim" ... Ve sonra, eğer testleriniz başarılı olmazsa, o zaman MQ tekrar suçlanacak mı?

Hatırlamıyorum ama bence "kötü" geçişleri atlamak için özel bir işlev var. Ve tam da denemek istediğiniz şeyi, geliştiriciler, hafızam bana doğru hizmet ediyorsa - tekrar - kullanmanızı önermediler.

Ancak mesajımda önemli olan, suçu geliştiricilere yüklemeden önce, önce belgeleri okumanız, forumdan bir çözüm istemeniz ve ancak o zaman ve yalnızca gerçekten bulunan bir hata durumunda bir hata raporu göndermeniz gerektiğidir. onu yeniden üreten minimum kodla. Bu ciddi olacak...

 
Artyom Trishkin :

Ancak sorunun kaynağı yeni yapı değil, "belgeleri okumadı" idi. Bu nedenle, kurnazsınız, kodunuz hakkında değil.

1:

2:

Ve sonra tekrar "deneyeceğim" ... Ve sonra, eğer testleriniz başarılı olmazsa, o zaman MQ tekrar suçlanacak mı?

Hatırlamıyorum ama bence "kötü" geçişleri atlamak için özel bir işlev var. Ve tam da denemek istediğiniz şeyi, geliştiriciler, hafızam bana doğru hizmet ediyorsa - tekrar - kullanmanızı önermediler.

Ancak mesajımda önemli olan, suçu geliştiricilere yüklemeden önce, önce belgeleri okumanız, forumdan bir çözüm istemeniz ve ancak o zaman ve yalnızca gerçekten bulunan bir hata durumunda bir hata raporu göndermeniz gerektiğidir. onu yeniden üreten minimum kodla. Bu ciddi olacak...

Artyom, sorun yeni yapıda!

Diyelim ki burada hatasız çalışan bir kod yazdınız. Uzun süre çalışır. Ve aniden, yeni bir MT sürümünden sonra, bir sürü hatayla çöküyor. Kim suçlu? Özellikle de birçok kişinin bildiği gibi dokümantasyonun her zaman yenilikleri tanımlamaya ayak uydurmadığını düşündüğünüzde.

Yani kodum hatasız çalıştı.

Bunu kullandım:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

INIT_PARAMETERS_INCORRECT nasıl değiştirilir? Bir çözüm buldum)))

Sergey Tabolin , 2019.04.24 08:48

Bu başlıkta kendi sorumun cevabını buldum:

Her şey oldukça basit çıktı. Geçersiz parametre kontrolünü OnInit()'ten OnTick()'e taşımak yeterlidir.

 bool                  check_init              = false ;                 // флаг проверки входных параметров
..........
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
//--- пропустить бесполезные проходы оптимизации
//*
   if (!check_init && ( MQLInfoInteger ( MQL_OPTIMIZATION ) || MQLInfoInteger ( MQL_TESTER )))
   {
       if (period_HMA7C == 0 && move_profit)                                 ExpertRemove ();
       if (period_HMA7C == 0 && move_stop)                                   ExpertRemove ();
       if (period_HMA7C == 0 && shift_correction_HMA7C != 5 )                 ExpertRemove ();
      check_init = true ;
   }
//*/ 
//+------------------------------------------------------------------+ 

Kontrol! İşler. Genetik başarısız olmaz

Şimdi, ortaya çıkan sorunlardan sonra birkaç satır daha ekledim:

 bool                  check_init              = false ;                 // флаг проверки входных параметров
bool                  tester_stop             = true ;                 // флаг проверки выхода по TesterStop
.............
void OnTick ()
{
//--- пропустить бесполезные проходы оптимизации
//*
   if (!check_init && ( MQLInfoInteger ( MQL_OPTIMIZATION ) || MQLInfoInteger ( MQL_TESTER )))
   {
       if (period_HMA7C == 0 && move_profit)                                                             TesterStop ();
       if (period_HMA7C == 0 && move_stop)                                                               TesterStop ();
       if (period_HMA7C == 0 && shift_correction_HMA7C != 5 )                                             TesterStop ();
       if (indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0 )                               TesterStop ();
       if (indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0 )                               TesterStop ();
       if ((stop_loss_buy > 0 && stop_loss_buy < 700 ) || (stop_loss_sell > 0 && stop_loss_sell < 700 ))
      {
         Print ( "Результат в OnTester() должен быть -99999999999.99" );
         TesterStop ();
      }
      check_init  = true ;
       tester_stop = false ;
   }
//*/
.........
}
Вызов TesterStop () считается нормальным завершением тестирования, и поэтому будет вызвана функция OnTester () 
с отдачей тестеру стратегий всей накопленной торговой статистики и значения критерия оптимизации.

Zihinsel olarak, aktarımın kodun geri kalanını çalıştırmadan hemen yapılması gerektiği varsayılır. Böyle?

Aslında, TesterStop() testi hiç durdurmaz!

 double OnTester ()
{
   if (tester_stop) return (- 99999999999. 99 );
   
   double    equity_dd_percent             = TesterStatistics ( STAT_EQUITY_DDREL_PERCENT );
   if (equity_dd_percent > 0.0 )
   {
      equity_dd_percent = 100.0 / equity_dd_percent;
   }
   else      equity_dd_percent    = 1.0 ;
   
   double    param                         = 0.0 ;
   double    profit                        = TesterStatistics ( STAT_PROFIT );
   double    stability                     = 0.0 ;
   int       balance_arr_size              = ArraySize (balance_arr) - 1 ;
   int       alpha_size                    = balance_arr_size - 1 ;
   int       beta_size                     = alpha_size - 1 ;
   double    trade2time                    = ratioTrades2Time( TesterStatistics ( STAT_TRADES ));
   double    max_balance                   = balance_arr[ 0 ];
//+-------------------   
   if (balance_arr[balance_arr_size- 1 ] - balance_arr[ 0 ] == 0.0 ) return (- 99999999999. 88 );
//+-------------------   

"Geçersiz" bir parametre girdim ve aşağıdaki sonucu aldım:

LL       0        11 : 30 : 20.816     Core 1    2016.10 . 01 00 : 00 : 00    Советник получил MAGIC = 153128312914612747 .
QN       0        11 : 30 : 20.816     Core 1    2016.10 . 03 00 : 00 : 00    Результат в OnTester () должен быть - 99999999999. 99
NJ       3        11 : 30 : 20.816     Core 1    TesterStop () called on 0 % of testing interval
CD       0        11 : 30 : 20.816     Core 1    final balance 10000.00 USD
QF       0        11 : 30 : 20.816     Core 1    OnTester result - 99999999999. 88

Yani bu bir hata! ve Cant, MQ'dur.

Bu senaryoda, TesterStop() ve ExpertRemove () 'un, kontrolü hemen OnTester()'a aktaramazlarsa true döndürmesi gerektiğini düşünüyorum. Böylece bir şekilde tepki verebilirsiniz, örneğin şöyle:

 bool                  tester_stop = false ;                 // флаг проверки выхода по TesterStop
.......
void OnTick ()
{
//--- пропустить бесполезные проходы оптимизации
   if (!check_init && ( MQLInfoInteger ( MQL_OPTIMIZATION ) || MQLInfoInteger ( MQL_TESTER )))
   {
       if (недопустимый параметр)          tester_stop = TesterStop ();
........
}
double OnTester ()
{
   if (tester_stop) return (- 99999999999.99 );

Bu durumda, mantıksal olarak beklenen sonucu tam olarak almak ve bir tef ile dansları düzenlememek ve testi durdurmanın bir sonucu olarak teorik olarak ortaya çıkabilecek tüm hataları sağlamak mümkün olacaktır.

 
Сергей Таболин :

Artyom, sorun yeni yapıda!

Diyelim ki burada hatasız çalışan bir kod yazdınız. Uzun süre çalışır. Ve aniden, yeni bir MT sürümünden sonra, bir sürü hatayla çöküyor. Kim suçlu? Özellikle de birçok kişinin bildiği gibi dokümantasyonun her zaman yenilikleri tanımlamaya ayak uydurmadığını düşündüğünüzde.

Yani kodum hatasız çalıştı.

Bunu kullandım:

Şimdi, ortaya çıkan sorunlardan sonra birkaç satır daha ekledim:

Zihinsel olarak, aktarımın kodun geri kalanını çalıştırmadan hemen yapılması gerektiği varsayılır. Böyle?

Aslında, TesterStop() testi hiç durdurmaz!

"Geçersiz" bir parametre girdim ve aşağıdaki sonucu aldım:

Yani bu bir hata! ve Cant, MQ'dur.

Bu senaryoda, TesterStop() ve ExpertRemove () 'un, kontrolü hemen OnTester()'a aktaramazlarsa true döndürmesi gerektiğini düşünüyorum. Böylece bir şekilde tepki verebilirsiniz, örneğin şöyle:

Bu durumda, mantıksal olarak beklenen sonucu tam olarak almak ve bir tef ile dansları düzenlememek ve testi durdurmanın bir sonucu olarak teorik olarak ortaya çıkabilecek tüm hataları sağlamak mümkün olacaktır.

Tüm hesaplamalarınız ve testleriniz bana gösterilmemeli ve belirli bir miktarda alay ve tahrişle değil, " Hatalar, hatalar, sorular " konusunda kuru ve özlü bir şekilde gösterilmemelidir. Tabii duyulmak ve bir cevap almak istemiyorsanız.

not. Ve hata raporlarında "söve", "şarap", "tef ile dans etmek" ve diğer "bok kodları" gibi kelimeleri unutmanız önerilir - tüm insanlar ve siz de hata yapmazsınız. Evet ve "çılgın" ifadeler çok ciddi ve yapıcı görünmüyor.

 
Artyom Trishkin :

Tüm hesaplamalarınız ve testleriniz bana gösterilmemeli ve belirli bir miktarda alay ve tahrişle değil, " Hatalar, hatalar, sorular " konusunda kuru ve özlü bir şekilde gösterilmemelidir. Tabii duyulmak ve bir cevap almak istemiyorsanız.

Böyle hissediyorsan özür dilerim. Tabii ki tahriş var, ama birdenbire sorunlar ortaya çıktığında nasıl olmasın? Ve alaycılık ... - bence bariz hakkında şaşkınlık, bence, gaflar. ))

Belirtilen konuya gelince, bana bir şey, sorunun orada kolayca "kaybedilebileceği" gibi görünüyor. Yani belirli bir sorunu olan yeni bir konunun daha etkili olduğunu düşünüyorum? Ya da değil?

Her durumda, bir moderatör olarak, varlıklarını kendiniz doğrularsanız, geliştiricilerin dikkatini bazı sorunlara çekmeniz daha olasıdır)))

Oraya bir soru eklemeye çalışacağım...

Neden: