Hatalar, hatalar, sorular - sayfa 2931

 

10'da, Terminalin bellek tüketiminin büyük olduğu gösterilmiştir. Ve Windows Server'da - çok daha az.

Görünüşe göre, tüketilen belleğin hesaplanması işletim sistemine bağlıdır.

 
fxsaber :

Bu öyle bir özellik ki, bilseniz bile kafanızdaki tüm katmanı yeniden yükseltmeniz gerekiyor.

Burada kendi varlığının tespitini yaptı. TF'yi değiştirirken işe yarıyor gibi görünüyor.

Pek girmedim ama şu satırlara bakılırsa:

     const int Total = :: IndicatorParameters (handle, Type, Params);
    :: IndicatorRelease (handle);

     uchar Bytes[];

     for ( int i = 1 ; i < Total; i++)
    {
      :: ArrayCopy (Bytes, _R(Params[i].double_value).Bytes, :: ArraySize (Bytes));
      :: ArrayCopy (Bytes, _R(Params[i].integer_value).Bytes, :: ArraySize (Bytes));
      :: ArrayCopy (Bytes, _R(Params[i].string_value).Bytes, :: ArraySize (Bytes));
    }

Göstergenin adı (0. parametrede) imzanın oluşturulmasında kullanılmaz, bu oldukça garip.

 
fxsaber :

10'da, Terminalin bellek tüketiminin büyük olduğu gösterilmiştir. Ve Windows Server'da - çok daha az.

Görünüşe göre, tüketilen belleğin hesaplanması işletim sistemine bağlıdır.

Bunun yerine, hizmet eksenlerinde bellek rezervasyonu daha uygundur.
 
Stanislav Korotky :

Pek girmedim ama şu satırlara bakılırsa:

Göstergenin adı (0. parametrede) imzanın oluşturulmasında kullanılmaz, bu oldukça garip.

 return ( "::" + ( string ):: Chart ID ( ) + ( string )INIT_SYNC::crc64(Bytes) + :: MQLInfoString ( MQL_PROGRAM_NAME ) );
 
fxsaber :

Evet yaptım. Validate ilk geçişi çalıştırır, sonrakiler yapmaz. Başlat düğmesi çalışmıyor.

Debagel - başlar. Sürümde bir çıktı aldım, her şey güya iyi, ama çalışmıyor.


Şimdi özellikle hata ayıklama sürümünü çalıştırıyorum. Müdahale olmadan Başlat düğmesine basıyor.

Hatanın nedeni hiçbir zaman bulunamadı.

Heh bu cevabı yeni gördüm.

Anladığım kadarıyla yerel ajanlar benim için başlamıyor, neden anlamadım. Terminalin son sürümlerinde, beğenerek başlamak daha iyi hale geldi.

 
fxsaber :

10'da, Terminalin bellek tüketiminin büyük olduğu gösterilmiştir. Ve Windows Server'da - çok daha az.

Görünüşe göre, tüketilen belleğin hesaplanması işletim sistemine bağlıdır.

Windows sunucusunun bir şekilde tam olarak doğru bir şekilde belirlemediği hissi.

Veya daha doğrusu, grafik ayarları sürekli sıfırlanır ve bu, RAM eksikliğine bağlıdır. Aynı zamanda, göndericiye göre her şey normal görünüyor. Ya vps sınırlıdır ya da MT5 daha oburdur.

 
Print ( PERIOD_H4 );

sonucu verir 16388 . Ters prosedür nasıl yapılır: 16388 değerini değiştirin ve sonuç olarak PERIOD_H4 döneminin adıyla bir dize alın? Yerleşik bir işlev var mı yoksa kendi dönüştürücümü mü yazmam gerekiyor? Yerleşik yoksa, özel bir işlev nasıl görünür? Belki de anahtar/değer eşleşmesi gibi bir şey yazmanız gerekiyor?

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
x572intraday :

sonucu verir 16388 . Ters prosedür nasıl yapılır: 16388 değerini değiştirin ve sonuç olarak PERIOD_H4 döneminin adıyla bir dize alın? Yerleşik bir işlev var mı yoksa kendi dönüştürücümü mü yazmam gerekiyor? Yerleşik yoksa, özel bir işlev nasıl görünür? Belki de anahtar/değer eşleşmesi gibi bir şey yazmanız gerekiyor?

 Print ( EnumToString (( ENUM_TIMEFRAMES ) 16388 ));
 
fxsaber :
 Print ( EnumToString (( ENUM_TIMEFRAMES ) 16388 ));

Orada olduğu ortaya çıkıyor. Bu beni mutlu ediyor. Sayesinde!

 

Kullanıcıya, gösterge kurulum penceresinin menü listesinden hem zaman dilimlerini hem de numaralarını seçme yeteneği sağlamaya çalışıyorum:

 enum PERIOD
  {
   NO_PERIOD= 0 ,       // NOT USED
   P1= PERIOD_H1 ,     // H1 
   P2= PERIOD_H2 ,     // H2 
   P3= PERIOD_H4 ,     // H4 
  };

input PERIOD TIMEFRAME_1=P1;
input PERIOD TIMEFRAME_2=P2;
input PERIOD TIMEFRAME_3=P3;

ENUM_TIMEFRAMES PArray[ 3 ]={P1,P2,P3};

ve onun tarafından seçilen periyotların doğrudan PArray'e düşmesini istiyorum. Ancak yukarıdaki örnekten, kullanıcının girdiğini değil, programda önceden tanımlanmış değerleri diziye atadığım ortaya çıkıyor. Ek olarak, derleyici uyarılar verir:

implicit conversion from ' enum PERIOD' to ' enum ENUM_TIMEFRAMES '        test.mq5         23        28
   ' ENUM_TIMEFRAMES :: PERIOD_H1 ' will be used instead of 'PERIOD::P1'    test.mq5         23        28
implicit conversion from ' enum PERIOD' to ' enum ENUM_TIMEFRAMES '        test.mq5         23        31
   ' ENUM_TIMEFRAMES :: PERIOD_H2 ' will be used instead of 'PERIOD::P2'    test.mq5         23        31
implicit conversion from ' enum PERIOD' to ' enum ENUM_TIMEFRAMES '        test.mq5         23        34
   ' ENUM_TIMEFRAMES :: PERIOD_H4 ' will be used instead of 'PERIOD::P3'    test.mq5         23        34

Son satırı şununla değiştirmeye çalışırken:

 ENUM_TIMEFRAMES PArray[ 3 ]={TIMEFRAME_1,TIMEFRAME_2,TIMEFRAME_3};

derleyici genellikle bir hata verir:

'TIMEFRAME_1' - constant expression required    test.mq5        23      28
'TIMEFRAME_2' - constant expression required    test.mq5        23      40
'TIMEFRAME_3' - constant expression required    test.mq5        23      52

Ayrıca NO_PERIOD=0, PERIOD_CURRENT anlamına gelir ve buna ihtiyacım yok, false veya EMPTY_VALUE gibi bir şeye ihtiyacım var ama hiç uymuyorlar.

Nasıl düzeltilir?

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5