Hatalar, hatalar, sorular - sayfa 249

 


alexluek :

Bağlantı kaybı olmadı, keneler üzerinde yeniden çizim yapıldı ve daha fazla zaman dilimi, daha az sıklıkta.

Ve hesaplama yönteminde başlangıç tarihinden bitiş tarihine (3 tane olduğunu öğrendim) olmadan

çubuk sayısını belirlerken, muhtemelen olan budur (yeniden hesaplar

tüm çubuklar) ama bu hala yansıma - kontrol edeceğiz ...

Belki bunu aşmanın başka bir yolu vardır...


Yedelkin :

Elbette bir yaklaşım var. if(prev_calculated==0) ise tüm çubuklar için ilk hesaplamayı yaparız. Ardından, her yeni tik için (if 0 < prev_calculated < Rates_total) for(int i=prev_calculated-1;i<rates_total;i++) gibi sadece son görünen çubuklar için hesaplamalar yaparız.


Chegos hala yeniden çiziyor. Bu şekilde uygulandı:


int hesaplanmış1=ÇubuklarHesaplanmış(StdDev1Handle);

...................

if( CopyBuffer (StdDev1Handle,0,0,to_copy,ExtStdDev1Buffer)<to_copy)return(0);

......................

int data1=CopyOpen(Symbol1,0,0,rates_total,Open1Buffer);

...................

for(int i=rates_total-2; i>=0; i--)
{
if(time[i]>=DateStart)

{


Ya yeniden çizer ya da çizmez, ama yine de mesele muhtemelen kodun doğruluğundadır.

ve terminalde değil (ama en azından yeniden çizim şimdi o kadar etkileyici değil ...)

Keneler olsun ya da olmasın, yine de yeniden çizilebilir.

Bağlantı yok gibi görünüyor (nedensellik)

Akla gelen tek şey zayıf bir işlemci veya donma

terminali (MT5). MT4'te her şey yeniden boyama olmadan çalışır.

 

alexluek :

...................

Ya yeniden çizer ya da çizmez, ama yine de mesele kodun doğruluğudur.

ve terminalde değil (ama en azından yeniden çizim şimdi o kadar etkileyici değil ...)

kaynak kodu ile servis masasına bir istek oluşturun, biz hallederiz.
 

ChartGetInteger işlevinin ikinci türeviyle çalışan var mı:

 2 . Возвращает true или false в зависимости от успешности выполнения функции.
В случае успеха значение свойства помещается в приемную переменную, 
передаваемую по ссылке последним параметром.

bool   ChartGetInteger(
   long     chart_id,         // идентификатор графика
   int      prop_id,         // идентификатор свойства
   int      sub_window,       // номер подокна
   long &   long_var         // сюда примем значение свойства
   );

? Görünen o ki, mülkün değeri alıcı değişkene aktarılmıyor. En azından yapı kullanılırken bu davranış gözlemlenir

 if (! ChartGetInteger (Chart, CHART_WINDOWS_TOTAL ,windows))
İşlev true değerini döndürür, ancak windows alma değişkeni, bu değişken başlatıldığında alınan değeri içerir. Bu durumda, fonksiyonun ilk versiyonu doğru değeri üretir. (Önemli değil: alıcı değişken long türüyle bildirilirse, derleyici bir uyarı verir).
 
Yedelkin :

ChartGetInteger işlevinin ikinci türeviyle çalışan var mı:

? Görünen o ki, mülkün değeri alıcı değişkene aktarılmıyor. En azından yapı kullanılırken bu davranış gözlemlenir

İşlev true değerini döndürür, ancak windows alma değişkeni, bu değişken başlatıldığında alınan değeri içerir. Bu durumda, fonksiyonun ilk versiyonu doğru değeri üretir. (Önemli değil: alıcı değişken long türüyle bildirilirse, derleyici bir uyarı verir).
Evet var. Sadece bir arka plan rengi istemeye çalıştım. Servis masasına yazmak istedim ama unuttum.
 
Lizar :
Evet var. Sadece bir arka plan rengi istemeye çalıştım. Servis masasına yazmak istedim ama unuttum.
Tamam, yazacağım.
 
Yedelkin :

ChartGetInteger işlevinin ikinci türeviyle çalışan var mı:

? Görünen o ki, mülkün değeri alıcı değişkene aktarılmıyor. En azından yapı kullanılırken bu davranış gözlemlenir

İşlev true değerini döndürür, ancak windows alma değişkeni, bu değişken başlatıldığında alınan değeri içerir. Bu durumda, fonksiyonun ilk versiyonu doğru değeri üretir. (Önemli değil: alıcı değişken long türüyle bildirilirse, derleyici bir uyarı verir).

Yanlış işlevi kullanıyorsunuz gibi görünüyor. Bu, işlevin ilk sürümüdür (üç parametreli). Doğru değil (düşündüğünüz gibi), ancak parametrenin değerini döndürür

 if (! ChartGetInteger (Chart, CHART_WINDOWS_TOTAL ,windows))

Kodunuzu göremiyorum, ancak doğru yol şöyle olacak gibi görünüyor:

 long Chart=0,windows;
if (! ChartGetInteger (Chart, CHART_WINDOWS_TOTAL ,0,windows))
  {
   //--- всё плохо
  }
 
uncleVic :

Yanlış işlevi kullanıyorsunuz gibi görünüyor. Bu, işlevin ilk sürümüdür (üç parametreli). Doğru değil (düşündüğünüz gibi), ancak parametrenin değerini döndürür

Kodunuzu göremiyorum, ancak doğru yol şöyle olacak gibi görünüyor:

Hmm..., evet, tam olarak bu söve vardı - bu işlevi kullanmaya çalıştığım eski koduma baktım.
 
uncleVic :

Yanlış işlevi kullanıyorsunuz gibi görünüyor. Bu, işlevin ilk sürümüdür (üç parametreli). Doğru değil (düşündüğünüz gibi), ancak parametrenin değerini döndürür

TAMAM. Anlayalım.

1. Örneğiniz ile aynı isimde bir fonksiyon verdiğiniz için fonksiyon "ta" kullanılmıştır. Bu fonksiyonun sadece hangi versiyonunun (birinci veya ikinci) kullanıldığı hakkında konuşabiliriz.

2. Gerçekten de, resmen fonksiyonun ilk versiyonunun üç parametresi ve ikincisi - dört. Ancak aynı zamanda, çağrının her iki varyantında da bulunan sub_window parametresinin açıklamasında, "Çoğu özelliğin bir alt pencere numarası belirtmeyi gerektirmediği" açıkça belirtilmiştir. Soru ortaya çıkıyor, CHART_WINDOWS_TOTAL ( gösterge alt pencereleri dahil toplam grafik penceresi sayısı) gibi bir özellik için pencere numarasının belirtilmesi gerekli mi yoksa gerekli mi?

3. Grafiğin toplam pencere/alt pencere sayısını elde etmek için ayrı bir alt pencere numarasının belirtilmesinin gerekmediğini varsaymak mantıklıdır. Bu sonuç, doğrudan El Kitabının kendisinden bir örnekle desteklenir (bölüm Arsa Özellikleri ):

   int windows= ChartGetInteger ( 0 , CHART_WINDOWS_TOTAL );
   Print ( "CHART_WINDOWS_TOTAL = " ,windows);

Benzer bir yaklaşım, Chart Operations / ChartWindowOnDropped bölümünde özetlenmiştir.

Bu örneklerden, El Kitabının yazarlarının pozisyonunun, bir grafiğin toplam pencere/alt pencere sayısını elde etmek için ayrı bir alt pencere numarasının belirtilmesi gerekmediği şeklinde olduğu anlaşılmaktadır. Tabii ki, örnekler fonksiyonun ilk versiyonunu kullanır, ancak aynı özellikten (yani: CHART_WINDOWS_TOTAL ) bahsettiğimiz için, bu sonucun fonksiyonun ikinci versiyonu için geçerli olduğunu varsaymak mantıklı olacaktır. Özellikle Dizinin, işlevin ikinci sürümü için sıfır alt pencere numarası belirtme ihtiyacıyla ilgili herhangi bir çekince içermediğini düşünüyorsanız.

4. Verdiğiniz örnekten, fonksiyonun ikinci versiyonu için, özelliğin kendisi alt pencere numarasının belirtilmesini gerektirmese bile, her zaman üçüncü parametreyi ( sub_window ) belirtmeniz gerektiğini izler. Onlar. (hem iki hem de üç parametreyle kullanılabilen) işlevin ilk sürümünün aksine, işlevin ikinci sürümü her zaman dört parametrenin tamamının belirtilmesini gerektirir. Doğru şekilde?

5. Eğer doğruysa, o zaman iki şey öğrendik. İlk olarak, sorunun ilk sürümünün hatalı olduğu ortaya çıktı. İkincisi, bu hatalı versiyonun ortaya çıkmasının nedeni, Rehber'e yansıyan bilgilerin eksikliğinde yatmaktadır. Bu nedenle, Dizine bir açıklama eklemeyi öneriyorum, buna göre "İkinci seçenek için varsayılan bir değer yoktur ve bu nedenle alt pencere numarası her zaman belirtilmelidir. Alt pencere numarasının belirtilmesini gerektirmeyen çoğu özellik için, 0 (tablonun ana penceresi) belirtmek için gereklidir". Ya da böyle bir şey.

Örnek için teşekkürler. Kısaca ve açıkça.

 
Yedelkin :
Fonksiyonun ilk versiyonunda int parametresi     sub_window=0 varsayılan bir değere sahiptir, bu nedenle atlanabilir, ikincisinde böyle bir varsayılan değer yoktur, bu nedenle belirtilmelidir.

 
Yedelkin :

TAMAM. Anlayalım.

1. Örneğiniz ile aynı isimde bir fonksiyon verdiğiniz için fonksiyon "ta" kullanılmıştır. Bu fonksiyonun sadece hangi versiyonunun (birinci veya ikinci) kullanıldığı hakkında konuşabiliriz.

2. Gerçekten de, resmen fonksiyonun ilk versiyonunun üç parametresi ve ikincisi - dört. Ancak aynı zamanda, çağrının her iki varyantında da bulunan sub_window parametresinin açıklamasında, "Çoğu özelliğin bir alt pencere numarası belirtmeyi gerektirmediği" açıkça belirtilmiştir. Soru ortaya çıkıyor, CHART_WINDOWS_TOTAL ( gösterge alt pencereleri dahil toplam grafik penceresi sayısı) gibi bir özellik için pencere numarasının belirtilmesi gerekli mi yoksa gerekli mi?

3. Grafiğin toplam pencere/alt pencere sayısını elde etmek için ayrı bir alt pencere numarasının belirtilmesinin gerekmediğini varsaymak mantıklıdır. Bu sonuç, doğrudan El Kitabının kendisinden bir örnekle desteklenir (bölüm Arsa Özellikleri ):


1. Fonksiyonun aslında aşırı yüklenmiş olduğu gerçeğini göz önünde bulundurursak, bunun aynı olmadığı ileri sürülebilir (tartışmalı konuyu anladığınız halde birinci ve ikinci seçeneğe odaklanalım);

2. Demek bütün mesele bu. MQL5'te fonksiyon aşırı yüklemelerinin mantığını doğru anlarsam, ilk seçenek 2 veya 3 parametre ile, ikincisi ise sadece 4 parametre ile kullanılabilir.

Daha doğrusu, fonksiyon iki veya üç parametre alıyorsa, MQL5 ilk seçeneği, 4 ile, ikincisi her zaman kullanılacaktır.

Sonuç olarak, ikinci seçeneği 4'e eşit olmayan bir parametre numarasıyla kullanırsak, derleyicinin çağrılarda kafası karışır.

3. Referans kitabında küçük bir yanlışlık var (ya da daha doğrusu biraz yanlış bir ifade). Genel anlamı şudur - Çoğu özellik, pencere numarasının belirtilmesini gerektirmez , bu tür özellikler için ilk seçenekte pencere numarası atlanabilir ( ikincisinde belirtilmelidir, ancak yoksayılacaktır).

4. Yukarıdakilerden, bu örnek için derleyicinin işlevin ilk sürümünü seçeceği sonucu çıkar.

   int windows= ChartGetInteger ( 0 , CHART_WINDOWS_TOTAL );
   Print ( "CHART_WINDOWS_TOTAL = " ,windows);
Derleyici, birinci varyanttaki üçüncü parametrenin atlanabileceği ve ikincisinde mevcut olması gerektiği gerçeğine dayanarak böyle bir sonuca varacaktır !!!