Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 51

 
fxsaber :

Hoş geldiniz. İşin püf noktası , şablonu TParent'e uygulamaktır . Daha önce böyle bir şey görmemiştim.

Şey, çoklu kalıtım değil. Bu aslında Base -> A -> B -> C -> X zinciridir. Yeterse direkt kullanmanıza kim engel olur?

 
Stanislav Korotki :

Şey, çoklu kalıtım değil. Bu aslında Base -> A -> B -> C -> X zinciridir. Yeterse direkt kullanmanıza kim engel olur?

Özlülük.

 
fxsaber :

Özlülük.

Burada anlaşamam. IMHO, doğrudan dört ardıl sınıf yazmak daha kısa ve daha net olurdu.

 
Stanislav Korotki :

Burada anlaşamam. IMHO, doğrudan dört ardıl sınıf yazmak daha kısa ve daha net olurdu.

Birden çok mirası tanıtırlarsa, tek bir satırda küçük bir değişiklik yapmanız yeterlidir.

 class X : public INHERIT3(A, B, C)  {  };   // Объявляем класс, наследуемый от A, B, C
 
fxsaber :

Birden çok mirası tanıtırlarsa, tek bir satırda küçük bir değişiklik yapmanız yeterlidir.

Ne yazık ki, anketlere ek olarak, forumun oranlar için bir formu yok - seçenekler içeren bir anket gibi, ancak cevap için hesapta birkaç "kopek" engelliyor. Etkinlikten sonra doğru seçeneği seçenler kaybeden bahislerini almış olacaktı ;-). Bence yapmayacaklar.

 
Stanislav Korotki :

Şey, çoklu kalıtım değil. Bu aslında Base -> A -> B -> C -> X zinciridir. Yeterse direkt kullanmanıza kim engel olur?

Evet, ancak burada tüm özellik, tüm kaynak sınıfların şablon olarak ayarlanması ve kullanılmasıdır. Bu nedenle, bu zincir herhangi bir sırada belirtilebilir. Ve aslında çoklu kalıtımla temel bir fark yoktur. Daha önce yazdığım gibi, sınıflarla ilgili tuzaklar olabilir. Ancak arayüzlerle her şey aynı. Görünen tek şey biraz koltuk değneği olacak, ama sonra damalı mı yoksa gitmeli mi herkes kendisi için karar veriyor)
 

Ve daha fazlasını ekleyeceğim. Cast operatörünün aşırı yüklenmesi yoluyla, çoklu kalıtımın (ve daha esnek seçeneklerle) tam teşekküllü bir alternatifi uygulanabilir. Ama uzun zamandır sormama rağmen MQ nedense bu aşırı yükleme kapasitesini eklemiyor. Ve onlardan belirli bir cevap bile duymadım, sadece görmezden geliyorlar ve hepsi bu.

 

durumlar var

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

Hatalar, hatalar, sorular

fxsaber , 2017.07.24 09:27

EA, ticaret geçmişi ile hızlı çalışmanın uygulandığı 1641 için derlenmiştir.

Optimize ederken, geçmişin ÇOK yavaş çalıştığı yapı 1596'nın Agent'ına ulaşmak ve buna bağlı olarak optimizasyonda önemli bir yavaşlama elde etmek mümkün müdür?

Daha genel bir durum olarak, Bulut üzerinde optimizasyon bazen sadece zaman açısından değil, hesaplamalar açısından da farklı sonuçlar vermektedir. Bazen optimizasyon sonucunun tek bir çalıştırmayla aynı olmadığını duyabilirsiniz.

Bunun nedeni, optimizasyona dahil olan Aracıların ve tek bir çalıştırmaya katılan yerel Aracının yapı numarasının farklı olabilmesi olabilir.

Ve her yapı kendi hatalarını içerir. Örneğin, şimdi alakalı olan bir hata var, ancak biraz daha önceki yapılarda yoktu.

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

Hatalar, hatalar, sorular

fxsaber , 2017.07.17 23:08

Bir kez daha, test cihazında HistorySelect hatası. 1626'da öyle görünmüyordu. 1629'da - var.

 #include <Trade\Trade.mqh>

void OnTick ()
{
   static CTrade Trade;

   const datetime NowTime = TimeCurrent ();
  
   if (Trade.Buy( 1 ) && Trade.PositionClose( _Symbol ) && HistorySelect (NowTime, NowTime))
  {
     Print ( HistoryDealsTotal ()); // 0 - это при том, что мы открыли и закрыли позицию в NowTime-время
      
     ExpertRemove ();
  }
}

Buna göre, Uzman Danışmanınız optimizasyon sırasında Ajan b1626'ya vurursa, bir sonuç gösterebilir ve yerel Ajan b1641 üzerinde tek bir çalıştırma çalıştırırken tamamen farklı bir sonuç gösterecektir.

Buradan, optimizasyondan önce, Uzman Danışmanınızı hangi yapılarda optimize etmek istediğinizi ve hangilerini istemediğinizi bilmeniz gerektiği sonucuna varabiliriz.

Neyse ki, geliştiriciler uygun olmayan Aracılar için bir kesici sağladı - INIT_AGENT_NOT_SUITABLE .


Bu nedenle, OnInit for Cloud optimizasyonlarında TerminalInfoInteger( TERMINAL_BUILD ) 'nin ihtiyacınız olan değerlere uygunluğu için bir kontrol kaydetmenizi tavsiye ederim.

Size uygun kontrollerin listesini bulmak neredeyse imkansızdır, bu nedenle büyük olasılıkla böyle bir reçete yazmanız gerekir.

 int OnInit ( void )
{
   // Если Агент не совпадает с билдом компиляции, отказываемся от его услуг
   if ( TerminalInfoInteger ( TERMINAL_BUILD ) != __MQLBUILD__ )
     return ( INIT_AGENT_NOT_SUITABLE );
//....

Ama bir o kadar da kötü bir karar. Optimizasyon sırasında yapınızın numarasını Aracılara göndermek daha esnektir.


Genel olarak, uyanık olun.


not. Aracının her çalışması için bir işlem raporu oluşturmak ve bunu Optimizasyon sırasında hemen almak mümkündür. Bu, gelecekte Cloud Agent'ın sonucunun tek bir çalıştırmada yerel olandan neden farklı olduğunu anlamaya yardımcı olabilir. Optimizasyon sırasında bu tür raporların otomatik olarak oluşturulması ve tek çalıştırma bu kütüphane ile mümkündür.

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

Hatalar, hatalar, sorular

Renat Fatkhullin , 2017.07.25 08:26

Buluttaki çalışmadan eski yapıları periyodik olarak kesiyoruz, çok hızlı ve fark edilmeden gerçekleşen güncellemelerini bekliyoruz.

Bu her sürümde yapılmaz, yapılan değişikliklerin önemine göre yapılır.
Report
Report
  • oylar: 12
  • 2017.07.19
  • fxsaber
  • www.mql5.com
Библиотека для MetaTrader 4/5, которая позволяет формировать отчеты по истории торгов.
 

Hata ayıklarken (mutlaka hata ayıklama değil), test cihazındaki test aralığını hızlı bir şekilde azaltmanız gerektiğinde, bu tür işlevleri kullanırım

 // Выгружает эксперт, если количество сделок в истории больше DealsNum.
void ConditionStopExpert( const int DealsNum = INT_MAX )
{
   if ((DealsNum != INT_MAX ) && :: HistorySelect ( 0 , :: TimeCurrent ()) && :: HistoryDealsTotal () > DealsNum)
    :: ExpertRemove ();

   return ;  
}

// Выгружает эксперт, если с момента запуска прошло AmountHours-часов.
void ConditionStopExpert( const double AmountHours )
{
   static datetime FirstTime = :: TimeCurrent ();
  
   if (:: TimeCurrent () > FirstTime + ( datetime )(AmountHours * 3600 ))
    :: ExpertRemove ();

   return ;  
}
 
fxsaber :

Hata ayıklarken (mutlaka hata ayıklama değil), test cihazındaki test aralığını hızlı bir şekilde azaltmanız gerektiğinde, bu tür işlevleri kullanırım

Kodu düzeltin, ilk fonksiyonda DealsNum yerine 5 numaranız var.