Hatalar, hatalar, sorular - sayfa 1702

 
Açık. Teşekkür ederim.
 
Dmytro Zelenskyy :

Tamam, ancak işareti korurken double'ı int'ye nasıl doğru bir şekilde dönüştürebilirim (sayı önemli değildir, sınırın ötesine geçerse, o zaman int sınırıyla sınırlayın)

Uzun döküm.
 
fxsaber :
Cevaplandı ve hemen kapatıldı

Farklı giriş parametreleriyle de olsa en az bir kopya çalışıyorsa kendimi (göstergeyi) kaldırabilmem gerekiyordu. Bunu yapmak için, kendi sapını bulmak gerekiyordu. Ne yazık ki, o zamanlar MQL'de vakaların %100'ünde bunun imkansız olduğunu henüz bilmiyordum. Bu yüzden çok zor olmayan bir numaraya gitmeye karar verdim.

Tüm kolları geçiyorum. Ve bak, CopyBuffer aracılığıyla ilk tamponun son değeri, kontrol etmeden önce göstergemde yazdığım rastgelelikle eşleşirse, bu otomatik olarak tutamacı bana ait demektir ve gerekirse kendimi silebilirim.

Bu nedenlerden dolayı, geliştiricilerden bu kadar belirsiz, ancak açıkça olumsuz bir tepkiye neden olan bu tür zararsız kod yazıldı. Görüyorsun, bunu yapamazsın. Yasadışı ne yaptı? Tamponumun değerini CopyBuffer aracılığıyla okudum. Yasadışı?!

Geliştiricilerin cevabında "bunu yapamazsın" diye bir şey yok. Hiçbir yerde "yasadışı" demiyor.

Bu "zararsız kodun" sizin için kesinlikle gerekli olduğunu düşünüyorsanız - kullanın. Tamponu okuduktan sonra IndicatorRelease(handle)) öğesini OnCalculate() öğesine eklemeniz yeterlidir. Bunun "sizin" göstergeniz olduğunu her tikte kontrol etmenize gerek yok, değil mi?

Gösterge sorununuzu bu şekilde çözer ve "görünmez" olmaktan çıkar:

 #property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1

double Buffer[];

int handle= INVALID_HANDLE ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit ()
  {
   :: SetIndexBuffer ( 0 ,Buffer, INDICATOR_DATA );
   handle= ChartIndicatorGet ( 0 , 1 , ChartIndicatorName ( 0 , 1 , 0 ));
  }

#define TOSTRING(A) #A + " = " + ( string )A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   if (handle!= INVALID_HANDLE )
     {
      Buffer[rates_total- 1 ]= MathRand ();

       double BufferCopy[];

       if ( CopyBuffer (handle, 0 , 0 , 1 ,BufferCopy)> 0 )
         Print (TOSTRING(BufferCopy[ 0 ])+TOSTRING(Buffer[rates_total- 1 ]));
         
       if ( IndicatorRelease (handle)) 
         handle= INVALID_HANDLE ;
     }

   return (rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int Reason)
  {
   if (handle!= INVALID_HANDLE )
       IndicatorRelease (handle);
   return ;
  }


Topluluğun, bu şekilde, herhangi bir kodun arka planda kontrolsüz bir şekilde yürütülmesinin, hatta çizelgeleri olmayan bir terminalde bile oluşturulabileceğinin farkında olmasına izin verin. İşte bir hile. Ve bunu bir hata olarak kabul etmek ya da etmemek, görünüşe göre bir terminoloji sorunudur. Geliştiricilerin burada mimari olarak hiçbir şeyi değiştiremeyeceklerini anlıyorum. Bu nedenle, böyle bir öfke. Bu tepkiyi başka türlü açıklayamam.

Hizmet masası yanıtında "öfke" yok. Karşılaştığınız sorunları düzenli olarak abartma motivasyonunuzun yanlış anlaşılması var.

Geliştiriciler değişebilir. Ancak, açıkça zararlı olmadığı sürece, belgesiz davranışları bile "alın ve yasaklayın" önerilerine karşı çok ihtiyatlı olmak yaygındır. Bu "hack" oldukça spesifiktir, ancak belki biri onu kullanır.

Bununla ilgili terminalde hala düzenlemeler olabilir, ancak bu kesinlikle çok büyük bir sorun değil ve bu konunun minimum önceliği var.

Nasılsa kimse sesini çıkarmayacak. Yardım'da böyle bir komisyonu yansıtmak iyi olurdu.

Terminalin bu "ciddi hatasının" yalnızca sizi ilgilendirdiğini çok iyi anladığınız ortaya çıktı.

Bunun üzerine bu soruyu kapatacağız. Teknik detaylar konuşuldu ama bu başlıktaki duygular gereksiz.

 
Anton :

Geliştiricilerin cevabında "bunu yapamazsın" diye bir şey yok. Hiçbir yerde "yasadışı" demiyor.

Bu "zararsız kodun" sizin için kesinlikle gerekli olduğunu düşünüyorsanız - kullanın. Tamponu okuduktan sonra IndicatorRelease(handle)) öğesini OnCalculate() öğesine eklemeniz yeterlidir. Bunun "sizin" göstergeniz olduğunu her tikte kontrol etmenize gerek yok, değil mi?

Hayır, tabii ki böyle bir ihtiyaç yok.

Gösterge sorununuzu bu şekilde çözer ve "görünmez" olmaktan çıkar:

Geçenlerde meslektaşınızdan bu konuyla ilgili bir yanıt aldım.

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

Hatalar, hatalar, sorular

Slava , 2016.09.07 17:17

fxsaber :

iCustom'dan sonra IndicatorRelease yapmalı mıyım?

Ne için?

Gerek yok. IndicatorCreate'den sonra ayrıca yapmanız gerekmez

Ve bir cevap alamadım

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

Hatalar, hatalar, sorular

fxsaber , 2016.09.07 17:27

Sonra hemen demek değildir. Ama değilse, o zaman ne zaman ?

Hizmet masası yanıtında "öfke" yok. Karşılaştığınız sorunları düzenli olarak abartma motivasyonunuzun yanlış anlaşılması var.

Motivasyon tamamen bencildir. Belgelere göre her şeyin öngörülebilir şekilde çalışmasını istiyorum. Hatalar var, işte sonuç

Geliştiriciler değişebilir. Ancak, açıkça zararlı olmadığı sürece, belgesiz davranışları bile "alın ve yasaklayın" önerilerine karşı çok ihtiyatlı olmak yaygındır. Bu "hack" oldukça spesifiktir, ancak belki biri onu kullanır.

Bununla ilgili terminalde hala düzenlemeler olabilir, ancak bu kesinlikle çok büyük bir sorun değil ve bu konunun minimum önceliği var.

Öncelik konusunda katılıyorum.

Terminalin bu "ciddi hatasının" yalnızca sizi ilgilendirdiğini çok iyi anladığınız ortaya çıktı.

Bunun üzerine bu soruyu kapatacağız. Teknik detaylar konuşuldu ama bu başlıktaki duygular gereksiz.

Hayır, başka bir nedenle yorum yapmıyorlar. Hata ne kadar ciddi olursa olsun. Benim "ciddiliğim", RANDOMLY yapabileceğiniz ve aynı Markete koyabileceğiniz kirli numaralardaydı. Ve sonra VPS'nin yeterli bilgi işlem kaynağına sahip olmadığı gerçeğiyle yüzleşin. Genel olarak, anlıyorsunuz.
 
Vladimir Pastushak :

Yani buna gerek yok, gelecekte hayatımı kolaylaştırmak için çok fazla iş yapmaya çalışıyorum.

Sorunumun üstesinden geldim, böylece ebeveynde her şey korunur ve miras, korumalı daha fazla geçersiz kılma altına girer.

Ebeveynde her şey korunuyorsa, artık korumalı mirasın bir anlamı yoktur (halkı da bırakabilirsiniz). Ancak şimdi başlangıçta ne istediğiniz belli değil. Ebeveyn yöntemlerini sınıfın içinde (ve düşündüğüm gibi dışarıda değil) gizlemeniz gerekiyorsa, o zaman korumalı bununla ne ilgisi var? Burada mahremiyete ihtiyacımız var.
 
Alexey Navoykov :
Ancak şimdi başlangıçta ne istediğiniz belli değil.
Açılır listedeki kullanılamayan yöntemlerden kurtulmak kolay gibi görünüyor.
 
Sergei Vladimirov :
Açılır listedeki kullanılamayan yöntemlerden kurtulmak kolay gibi görünüyor.
Yani ulaşılmaz ve bu yüzden görünmüyor, değil mi?
 
Sergei Vladimirov :
Açılır listedeki kullanılamayan yöntemlerden kurtulmak kolay gibi görünüyor.

Sadece bu da değil, grafik nesnelerinin sınıflarını kendim için yeniden yazdım ve nesnelerin tüm özelliklerinin tanımlandığı bir sınıftan artık kolayca ve anlaşılır bir şekilde (en azından benim için) Button türünün mirasçıları yapıyorum. class, yalnızca düğmenin özelliklerini görüyorum ve TextLabel özelliklerini göremiyorum ..

Ayrıca, bu basit öğelerden, minimum hata olasılığıyla ve mümkün olduğunca çabuk ve açık bir şekilde (en azından benim için) daha karmaşık olanları şimdiden oluşturabilirim.

Belki beni tekmelemeye ve her şeyin standart İncil'de olduğunu söylemeye başlayacaksınız, her şeyi hemen söylemeyeceğim ve her şey net değil. Tam olarak anladığım şeyle çalışmaya alışığım ama her şeyin nasıl çalıştığını anlamak için her şeyi kendin gözden geçirmen gerekiyor..

 
Alexey Navoykov :
Yani ulaşılmaz ve bu yüzden görünmüyor, değil mi?

Hayır, ortaya çıkıyorlar.

Stüdyoda, bu arada, aynı şey.

 
Sergei Vladimirov :

Hayır, ortaya çıkıyorlar.

O halde Metaalıntılar buna dikkat etmelidir. Neden kullanılamayan yöntemler gösteriliyor? Sonuçta, olması gerektiği gibi, korunan bölüm için her şey gizlidir. Yani burada da aynı olmalı.