Hatalar, hatalar, sorular - sayfa 452

 

Teşekkür ederim!

 
alexvd :

Evet, ilk noktada yanlış anladım. Açıklamada tam olarak neyin yanlış olduğunu açıklayın, bir kopya ne iade edilmelidir?

Ve birleştirme pahasına, sizin durumunuzda şöyle bir şey yazmanız gerekir.

Açıklarım. Metinde yazılı " Belirtilen konumdaki karakterin değiştirilmiş değeriyle dizenin bir kopyasını döndürür. " Fonksiyonun prototipi bool StringSetCharacter (...). Açıkçası, bir bool içine bir dize dolduramazsınız. Bir boole gerçekten döndürülürse, bu muhtemelen bir başarı/hata işaretidir. Kural olarak, belgelerin diğer sayfalarının ayrı bir Dönüş değeri bölümü vardır, ancak bu sayfada yoktur. Dönüş değeri değil, işlevin anlamı ile ilgili bir teklif formüle etmek için metin açıklamasına eklenmesi gerekir.


Birleştirme ile ilgili olarak, yazdıklarınız doğruysa, StringConcatenate işlevinin açıklamasını da değiştirmelisiniz. Açıklama, string_var parametresinin [in][out] olduğunu söylüyor Birleştirme sonucunda oluşturulacak dize. Bu parametrenin sadece [out] olduğunu belirtiyorsunuz.

 
Yeni soru. BarsCalculated 0 döndürdüğünde durum ne anlama geliyor? Bu bir hata değil gibi görünüyor, ancak 0 çubuk nasıl hesaplanabilir? Aslında hiçbir şey sayılmazdı. Hata ne değildir?
 
MoneyJinn :

Ne yazık ki sorun, terminalin bir pozisyonu kapatmak için yalnızca "Sonuçlar" sekmesinde bir yorumla bir emir yayınlamasıdır.

İlgili sipariş, HistoryDealsTotal() listesine eklenmez.

Ayrıca HistoryOrdersTotal() emirlerinin genel listesinde, dönem bir marj ile seçilse bile herhangi bir emir yoktur.

'Test sonunda' kapanma durumunda hem siparişlerin hem de anlaşmaların geçmişte mevcut olduğundan emin olabilirsiniz. Çoklu para birimimde, her bir sembol için alınan kar hesaplanır. Test cihazında 'test sonu' itibariyle kapatılan işlemleri hesaba katmak için, de-in'de bu işlemler için bir ayarlama yapılır. Tüm enstrümanlar için toplam kâr, test raporundaki verilerle eşleşir. İşte kod;

       if ( HistorySelect ( 0 , TimeTradeServer ()))   // Поправка для 'end of test'
        {
         int DeelsTotal= HistoryDealsTotal ();
         for ( int i= 0 ;i<SymbolsNumber;i++)
           {
             ulong ticket= HistoryDealGetTicket (DeelsTotal- 1 -i);
             string comment= HistoryDealGetString (ticket, DEAL_COMMENT );
             if (comment!= "end of test" && StringSubstr (comment, 0 , 3 )!= "so " )
               break ;
             for ( int j= 0 ;j<SymbolsNumber;j++)
              {
               if ( HistoryDealGetString (ticket, DEAL_SYMBOL )!=m_expert[j].Name())
                 continue ;
               m_Profit[j]=m_Profit[j]+ HistoryDealGetDouble (ticket, DEAL_PROFIT )+   // Добавим профит закрытой позиции для "end of test" и "so"
                           HistoryDealGetDouble (ticket, DEAL_SWAP )+ HistoryDealGetDouble (ticket, DEAL_COMMISSION );
              }
           }
        }
 

Meslektaşlarım, söyleyin bana, SymbolInfoSessionTrade'i strateji test cihazında çalıştırmanın herhangi bir yolu var mı?

Banal kaydı çalışmıyor:

 void OnTick () {
   datetime from, to;
   if ( SymbolInfoSessionTrade ( _Symbol , FRIDAY , 0 , from, to)) Print ( "WOW!" );
}
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 

Mümkünse, başka bir soru. Operatörün ne anlama geldiğini anlamak istiyorum new ??? Onun fikri nedir? Neden her zamanki gibi bir nesne yaratmıyorsunuz??? Sonuçta, bloğun tamamlanmasından sonra, new aracılığıyla bildirilen nesneye erişim kaybedilecek, o zaman neden buna ihtiyaç duyuluyor ???

PS dürüst olmak gerekirse, belgelerde bulamadım :)

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
 
220Volt :

Mümkünse, başka bir soru. Operatörün ne anlama geldiğini anlamak istiyorum new ??? Onun fikri nedir? Neden her zamanki gibi bir nesne yaratmıyorsunuz??? Sonuçta, bloğun tamamlanmasından sonra, new aracılığıyla bildirilen nesneye erişim kaybedilecek, o zaman neden buna ihtiyaç duyuluyor ???

Her şey geçer. Bu, hiçbir şey yapılması gerekmediği anlamına mı geliyor...?


PS dürüst olmak gerekirse, belgelerde bulamadım :)

Sana inanıyorum... :))
 
Valmars :

Teşekkür ederim! Anladım. TimeCurrent() yerine TimeTradeServer ( ) kullanılması gerekli ve yeterlidir.

İşlem haftasının sonunda yeni kotasyon yoktur ve bu nedenle TimeCurrent() uzun süre güncellenmez.

Expert Advisor sıfırlandığında, TimeCurrent() 23:00 saatini döndürür; TimeTradeServer() - 23:59, testin bitiş zamanı ile çakışıyor.

 
MoneyJinn :

Teşekkür ederim! Anladım. TimeCurrent() yerine TimeTradeServer ( ) kullanılması gerekli ve yeterlidir.

İşlem haftasının sonunda yeni kotasyon yoktur ve bu nedenle TimeCurrent() uzun süre güncellenmez.

Mesele tırnak içinde değil, 'test sonu' anlaşmalarının test süresinin bitiminden sonra yapılmasıdır. Dolayısıyla ne 'OnTick'te ne de 'OnTimer'da geçmişten elde edilemezler. En azından bir yıl önce durum buydu, ben de çeklerini 'OnDeinit'e taşıdım.
 
220Volt :

Mümkünse, başka bir soru. Operatörün ne anlama geldiğini anlamak istiyorum new ??? Onun fikri nedir? Neden her zamanki gibi bir nesne yaratmıyorsunuz??? Sonuçta, bloğun tamamlanmasından sonra, new aracılığıyla bildirilen nesneye erişim kaybedilecek, o zaman neden buna ihtiyaç duyuluyor ???

PS dürüst olmak gerekirse, belgelerde bulamadım :)

Dinamik nesneler yaratmayın - şimdi ve bu nesnelerle ilgili diğer her şeyi kullanmak zorunda kalmayacaksınız (Doğru, o zaman fazla bir şey yapamazsınız).

Görünüşe göre, şimdinin ne anlama geldiğini değil, dinamik nesnelerle çalışmanın ne anlama geldiğini anlamak istiyorum ...

Dinamik olarak tahsis edilmiş nesnelerin başlatılması ve sıfırlanması

Nesne işaretçileri özel bir durumdur, çünkü bir işaretçi bildirmek karşılık gelen nesneyi başlatmayı gerektirmez . Dinamik olarak tahsis edilen nesneler, yalnızca new operatörüyle sınıfın bir örneği oluşturulduğunda başlatılır . Bir nesnenin başlatılması, ilgili sınıfın yapıcısının çağrılmasını içerir . Sınıfta karşılık gelen bir kurucu yoksa, basit bir türe sahip üyeleri otomatik olarak başlatılmaz; string , dinamik dizi ve karmaşık nesne türlerinin üyeleri otomatik olarak başlatılacaktır.

İşaretçiler yerel veya genel olarak bildirilebilir ve NULL olarak veya aynı veya türetilmiş türden bir işaretçi değerine başlatılabilir . Yeni operatör yerel düzeyde bildirilen bir işaretçi üzerinde çağrıldıysa, bu düzeyden ayrılmadan önce o işaretçi için silme operatörü de yürütülmelidir. Aksi takdirde, işaretçi kaybolur ve nesne açıkça silinemez.

object_pointer = new Class_Name ifadesi tarafından oluşturulan tüm nesneler, daha sonra delete ( object_pointer ) operatörü tarafından yok edilmelidir. Herhangi bir nedenle böyle bir değişken programın sonunda silme operatörü tarafından yok edilmemişse, "Uzmanlar" günlüğünde bununla ilgili bir mesaj görüntülenecektir. Birden çok değişken bildirebilir ve hepsine aynı nesneye bir işaretçi atayabilirsiniz.

Dinamik olarak oluşturulmuş bir nesnenin bir yapıcısı varsa, yeni operatör yürütüldüğünde bu yapıcı çağrılır . Nesnenin bir yıkıcısı varsa, silme ifadesi yürütüldüğünde yıkıcı çağrılacaktır .

Böylece, dinamik olarak tahsis edilen nesneler yalnızca yeni operatör tarafından yaratıldığı anda oluşturulur ve ya silme operatörü tarafından ya da programın boşaltıldığı anda otomatik olarak çalışan MQL5 sistemi tarafından imha edilmeleri garanti edilir. Dinamik olarak oluşturulan nesnelerin işaretçilerinin bildirilme sırası, başlatıldıkları sırayı etkilemez. Başlatma ve başlatmadan kaldırma sırası tamamen programcı tarafından kontrol edilir.