MT sürümlerinin arşivi. - sayfa 3

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

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.

Ve işte görmek istediğiniz seçenek.

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

Bu bağlamda bir kontrol yapamaz mıyız?

Ve zaten çalışıyorsa, zorunlu bir kapatma nasıl önlenir/iptal edilir? Örnekleriniz biraz başka bir operadan.
 
Alexey Viktorov :
Ve zaten çalışıyorsa, zorunlu bir kapatma nasıl önlenir/iptal edilir? Örnekleriniz biraz başka bir operadan.

Kapatmaya zorlamayın. O zaman iptal etmene gerek yok.

Muhtemelen zaten zorunlu sonlandırma çalışıyor, olası yazılım aksaklıkları nedeniyle iptal etmek mantıklı değil.
Bu nedenle, büyük olasılıkla böyle bir olasılık yoktur. tam olarak söyleyemem.
Bundan, zorunlu sonlandırma başlatıldıktan sonra tekrar çalışan koda geri dönmeye gerek kalmaması için kodu mantıksal olarak oluşturmanın gerekli olduğu sonucu çıkar.
Tamamlarsak, açıkça tamamlarız.

 
Roman :

Muhtemelen zaten zorunlu sonlandırma çalışıyor, olası yazılım aksaklıkları nedeniyle iptal etmek mantıklı değil.
Bu nedenle, bu büyük olasılıkla mümkün değildir. tam olarak söyleyemem.
Bundan, zorunlu sonlandırma başlatıldıktan sonra tekrar çalışan koda geri dönmeye gerek kalmaması için kodu mantıksal olarak oluşturmanın gerekli olduğu sonucu çıkar.
Tamamlarsak, açıkça tamamlarız.

Bazı nedenlerden dolayı, konudaki her şeyi okumamışsınız gibi görünüyor. Fikriniz olmayan bir şey tartışılan sorunla örtüşüyor.

not; Hayır olmasına rağmen. Görünüşe göre bu konudaki ilk mesajınızda sözlerimi tam olarak alıntılamışsınız, ancak tamamen değil. Belki de bu nedenle, sorunun tüm sunumu değişti.
 
Ne sorular, ne gibi cevaplar. Kendinle tartış o zaman Sorunun içine girmeye çalışıyorsunuz ama insanlar hala bundan hoşlanmıyor. Sorunu bulmada iyi şanslar.
 
Alexey Viktorov :

Ve işte görmek istediğiniz seçenek.

Her şey doğru.

Ama

 if (недопустимый параметр)          tester_stop = TesterStop ();

bundan daha kolay ve net değil

 if (недопустимый параметр)
       {
         TesterStop ();
        tester_stop = true ;
         return ;
       }

?

Ama şimdi tam olarak önerdiğin gibi yaptım.

 
Roman :
Ne sorular, ne gibi cevaplar. Kendinle tartış o zaman Sorunun içine girmeye çalışıyorsunuz ama insanlar hala bundan hoşlanmıyor. Sorunu bulmada iyi şanslar.

Gerçekten kırgınsın. İçeri girmek için tüm cümle gerekliydi

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

MT sürümlerinin arşivi.

Alexey Viktorov , 2019.06.16 15:25

Sergey, bunda beklenmedik bir şey yok. Aksine, her şey doğal ve tutarlıdır. Farklı durumlar var. Bazen danışman bitmeden olayın işlenmesini tamamlamak gerekir, bazen de sizin durumunuzda olduğu gibi acilen tamamlamanız gerekir. Bu nedenle, geliştiricilerin önünde, yapılacak doğru şeyin ne olduğu, kesin olarak kesintiye uğratılması, yürütmeyi tamamlaması gerekenlerden memnuniyetsizlik alması veya olay işlemenin tamamlanmasından sonra durması sorusu ortaya çıkıyor . Aynı zamanda, herhangi bir programcının cephaneliğinde bir geri dönüş ifadesi vardır ve zorla sonlandırılan hiçbir şey yoktur.

Ve void türünü hangi amaçla bool olarak değiştirmeniz gerekiyordu, çünkü yine programcının cephaneliğinde TesterStop()'tan önce veya sonra değiştirilebilen statik değişkenler var ve prensipte her şey istediğiniz gibi olacak. Ve nedense onu örneğimden attın.

ve ilkine dikkat etmeden sadece ikinci kısmı bağlamdan çıkardınız.
 
Сергей Таболин :

Her şey doğru.

Ama

bundan daha kolay ve net değil

?

Ama şimdi tam olarak önerdiğin gibi yaptım.

Daha basit ve net olabilir, ancak geliştiricilerden kendi başlarına kolayca yazılanları talep etmek yanlıştır. Nedense C++ hakkında yazdıklarına ve dile bazı eklemeler gerektirdiğine inanmıyorum. Ve eminim ki birçok insan yeterince yorum yapmıştır.

 
Alexey Viktorov :

Daha basit ve net olabilir, ancak geliştiricilerden kendi başlarına kolayca yazılanları talep etmek yanlıştır. Nedense C++ hakkında yazdıklarına ve dile bazı eklemeler gerektirdiğine inanmıyorum. Ve eminim birçok kişi yeterince yorum yapmıştır.

Sürümünüzü kontrol ettim. Her şey şu mesajla sona erdi:

 2019.06 . 16 18 : 49 : 25.464 Core 1    TesterStop () called on 0 % of testing interval

Genel olarak - bir çıkmaz ...

 
Alexey Viktorov :

Gerçekten kırgınsın. İçeri girmek için tüm cümle gerekliydi

ve ilkine dikkat etmeden sadece ikinci kısmı bağlamdan çıkardınız.

IsStopped() ile örnek vererek sadece ilk kısma cevap vermeye çalışıyordum.
Bazen danışman bitmeden olayın işlenmesini tamamlamak gerekir, bazen de sizin durumunuzda olduğu gibi acilen tamamlamanız gerekir.
Belgelerdeki bu IsStopped() işlevinin açıklamasını okuyun, size bazı fikirler verebilir.
Ama sana başka bir operadan gibi geldi. Bir başkasından ise, olası varsayım için üzgünüm.
Ancak olası önerilerde dedikleri gibi, sorun arayışı çözüldü.
Hiç kimse, kodunun tüm mantığını bilmediğinden ve muhtemelen onu incelemeyeceğinden, kesin bir çözüm söylemeyecek.

Neden: