Hatalar, hatalar, sorular - sayfa 2469

 

bileceğim) sonra hack

 

Bir programı MQL 4'ten MQL 5'e çeviriyorum.

Böyle bir hatayla karşılaştı.

m30'a kadar olan zaman dilimlerinde, Period() değeri doğru şekilde döndürülür.

2019.05.22 17:45:38.628 TestStat (GBPUSD,M15) 4854 Dönem()=15
2019.05.22 17:46:08.267 TestStat (GBPUSD,M30) 4854 Dönem()=30

Ve H1 zaman diliminden başlayarak anlaşılmaz değerler görüntüleniyor.

2019.05.22 17:31:07.446 TestStat (GBPUSD,H1) 4854 Dönem()=16385
2019.05.22 17:46:39.362 TestStat (GBPUSD,H4) 4854 Dönem()=16388
2019.05.22 17:46:55.552 TestStat (GBPUSD,D1) 4854 Dönem()=16408

21 Mayıs 2019 tarihli 2057 numaralı terminal sürümü.

 

Teşekkür ederim.

Açıklamada:

dönem

Geçerli grafiğin zaman çerçevesi değerini döndürür.

ENUM_TIMEFRAMES Nokta ();

Geri dönüş değeri

Geçerli grafiğin zaman çerçevesi değerini depolayan _Period değişkeninin içeriği. Değer , ENUM_TIMEFRAMES numaralandırma değerlerinden biri olabilir.

Ayrıca bakınız

PeriodSeconds , Grafik dönemleri , Tarih ve saat , , Nesne görünürlüğü

=================

Bir şekilde kötü yapılmış. Açıklama doğru yazılmalıdır. Bir forum yerine bir sorunun kaynağını aramak gerekir.

Period()'un söylendiği gibi geçerli zaman çerçevesinin değerini döndürmediği ortaya çıktı: Değer, ENUM_TIMEFRAMES numaralandırmasının değerlerinden biri olabilir .

Ve tamamen farklı bir şey.

Geliştiriciler dilin tanımını düzeltir.

 
Kodu sağladığı için TheXpert'e tekrar teşekkürler.
ArrayResize kapasite МТ5(build 2057) için aşağıdaki sonuçlara sahibiz:

 #import "msvcrt.dll"
   long memcpy( int &dst[], long &src, int cnt);
#import

#define PRINT(x) ; Print ( #x, ":" , string (x))

template < typename T>
struct ArrayStore
{
   long offset;
   T x[];
   
   int capacity() 
   {
       int ints[ sizeof (ArrayStore) / sizeof ( int )];
      memcpy(ints, this .offset, sizeof (ArrayStore));
       return ints[ 8 ];
   }
   
   int size() 
   {
       int ints[ sizeof (ArrayStore) / sizeof ( int )];
      memcpy(ints, this .offset, sizeof (ArrayStore));
       return ints[ 4 ];
   }
};

template < typename T>
int TestArrayCapacity(ArrayStore<T> &store, int size, int reserved_size = 0 ){
   ArrayResize (store.x, size, reserved_size);
   return store.capacity(); 
}

template < typename T>
int TestArraySize(ArrayStore<T> &store, int size, int reserved_size = 0 ){
   ArrayResize (store.x, size, reserved_size);
   return store.size(); 
}


void OnStart ()
{
   ArrayStore< int > store;
   
   PRINT( "TEST_ArrayCapacity" );
   
   PRINT(TestArrayCapacity(store, 100 , 0 )); 
   PRINT(TestArrayCapacity(store, 100 , 100 )); 
   PRINT(TestArrayCapacity(store, 101 , 100 )); 
   PRINT(TestArrayCapacity(store, 200 , 100 )); 
   PRINT(TestArrayCapacity(store, 201 , 100 )); 
   PRINT(TestArrayCapacity(store, 202 , 100 )); 
   PRINT(TestArrayCapacity(store, 100 ,   1 )); 
   PRINT(TestArrayCapacity(store, 100 , 400 )); 
   PRINT(TestArrayCapacity(store, 300 , 400 )); 
   PRINT(TestArrayCapacity(store, 301 , 600 ));
   PRINT(TestArrayCapacity(store, 302 , 600 ));
   PRINT(TestArrayCapacity(store, 303 , 600 ));
   PRINT(TestArrayCapacity(store, 100 ,   0 )); 
   PRINT(TestArrayCapacity(store, 100 , 100 )); 
   PRINT(TestArrayCapacity(store, 100 ,  - 1 )); 
   PRINT(TestArrayCapacity(store, 100 , 100 )); 
   PRINT(TestArrayCapacity(store, 105 , 100 )); 
}

Sonuç:
 2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 0 ): 100
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 100 ): 100
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 101 , 100 ): 201
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 200 , 100 ): 201
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 201 , 100 ): 201
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 202 , 100 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 1 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 400 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 300 , 400 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 301 , 600 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 302 , 600 ): 302
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 303 , 600 ): 903
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 0 ): 903
2019.05 . 22 17 : 00 : 50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 100 ): 903
2019.05 . 22 17 : 00 : 50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 ,- 1 ): 100
2019.05 . 22 17 : 00 : 50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 100 , 100 ): 100
2019.05 . 22 17 : 00 : 50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store, 105 , 100 ): 205
 
Eugeni Neumoin :

Açıklamada:

Geçerli grafiğin zaman çerçevesi değerini depolayan _Period değişkeninin içeriği. Değer , ENUM_TIMEFRAMES numaralandırma değerlerinden biri olabilir.

Bir şekilde kötü yapılmış. Açıklama doğru yazılmalıdır. Bir forum yerine bir sorunun kaynağını aramak gerekir.

Yani hiçbir yerde bu değerin dakika cinsinden döneme eşit olduğu (dördünde olduğu gibi) yazılmaz.

https://www.mql5.com/ru/articles/81

Bağlantılı makalenin başladığı yer burasıdır.

Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
Igor Zakharov :

Yani hiçbir yerde bu değerin dakika cinsinden döneme eşit olduğu (dördünde olduğu gibi) yazılmaz.

https://www.mql5.com/en/articles/81

Bağlantılı makalenin başladığı yer burasıdır.

Şunu söyleyen bir dil açıklaması var: Değer , ENUM_TIMEFRAMES numaralandırma değerlerinden biri olabilir.

Aşağıdaki dilin açıklamasına bakın:

Grafik dönemleri

Önceden tanımlanmış tüm grafik dönemlerinin benzersiz tanımlayıcıları vardır. PERIOD_CURRENT tanımlayıcısı, mql5 programının üzerinde çalıştığı mevcut grafik periyodu anlamına gelir.

ENUM_TIMEFRAMES

tanımlayıcı

Tanım

PERIOD_CURRENT

cari dönem

PERIOD_M1

1 dakika

PERIOD_M2

2 dakika

PERIOD_M3

3 dakika

PERIOD_M4

4 dakika

PERIOD_M5

5 dakika

PERIOD_M6

6 dakika

PERIOD_M10

10 dakika

PERIOD_M12

12 dakika

PERIOD_M15

15 dakika

PERIOD_M20

20 dakika

PERIOD_M30

30 dakika

PERIOD_H1

1 saat

PERIOD_H2

2 saat

PERIOD_H3

3 saat

PERIOD_H4

4 saat

PERIOD_H6

6 saat

PERIOD_H8

08:00

PERIOD_H12

12 saat

PERIOD_D1

1 gün

PERIOD_W1

1 hafta

PERIOD_MN1

1 ay

=======================

Ve açıklamanın hiçbir yerinde bu değerin saniye cinsinden olduğu yazmıyor.

Açıklama her şeyi söylemeli.

Ve bazı makalelere tırmanmanız gerektiğinde, bu çok kötü.

 
Sergey Dzyublik :
Kodu sağladığı için TheXpert'e tekrar teşekkürler.
ArrayResize kapasite МТ5(build 2057) için aşağıdaki sonuçlara sahibiz:
Ve böylece, ArrayResize'ın çalışması ve gerçek kapasite üzerindeki etkisi hakkında sonuçlar:

1. İlk ArrayResize çok önemlidir, aslında size boyutu + ayrılmış_boyutu dikkate alarak bellek ayırır ve kapasiteyi ayarlar.
2. ArrayResize'ın yeni ayrılmış_boyut değeriyle sonraki tüm yürütmeleri - sırasıyla ayrılan bellek ve kapasite miktarı üzerinde hiçbir etkiye sahip değildir.
3. Yalnızca kapasite aşıldığında yeni bir bellek tahsisi gerçekleşir ve bu durumda size ayrılan bellek miktarını belirlemek ve yeni bir kapasite ayarlamak için size + ayrılmış_boyut yine kullanılır.
4. Reserved_size < 0, ayrılmış belleği boyuta kadar serbest bırakır.
 
Eugeni Neumoin :

Ve açıklamanın hiçbir yerinde bu değerin saniye cinsinden olduğu yazmıyor.

Yani saniyeler içinde değil...

 
Eugeni Neumoin :

Şunu söyleyen bir dil açıklaması var: Değer , ENUM_TIMEFRAMES numaralandırma değerlerinden biri olabilir.

Aşağıdaki dilin açıklamasına bakın:

Grafik dönemleri

Önceden tanımlanmış tüm grafik dönemlerinin benzersiz tanımlayıcıları vardır. PERIOD_CURRENT tanımlayıcısı, mql5 programının üzerinde çalıştığı mevcut grafik periyodu anlamına gelir.

ENUM_TIMEFRAMES

=======================

Ve açıklamanın hiçbir yerinde bu değerin saniye cinsinden olduğu yazmıyor.

Açıklama her şeyi söylemeli.

Ve bazı makalelere tırmanmanız gerektiğinde, bu çok kötü.

Ve size bunların saniye cinsinden değerler olduğunu kim söyledi?

 
Eugeni Neumoin :

Şunu söyleyen bir dil açıklaması var: Değer , ENUM_TIMEFRAMES numaralandırma değerlerinden biri olabilir.

Aşağıdaki dilin açıklamasına bakın:

Grafik dönemleri

Önceden tanımlanmış tüm grafik dönemlerinin benzersiz tanımlayıcıları vardır. PERIOD_CURRENT tanımlayıcısı, mql5 programının üzerinde çalıştığı mevcut grafik periyodu anlamına gelir.

ENUM_TIMEFRAMES

tanımlayıcı

Tanım

PERIOD_CURRENT

cari dönem

PERIOD_M1

1 dakika

PERIOD_M2

2 dakika

PERIOD_M3

3 dakika

PERIOD_M4

4 dakika

PERIOD_M5

5 dakika

PERIOD_M6

6 dakika

PERIOD_M10

10 dakika

PERIOD_M12

12 dakika

PERIOD_M15

15 dakika

PERIOD_M20

20 dakika

PERIOD_M30

30 dakika

PERIOD_H1

1 saat

PERIOD_H2

2 saat

PERIOD_H3

3 saat

PERIOD_H4

4 saat

PERIOD_H6

6 saat

PERIOD_H8

08:00

PERIOD_H12

12 saat

PERIOD_D1

1 gün

PERIOD_W1

1 hafta

PERIOD_MN1

1 ay

=======================

Ve açıklamanın hiçbir yerinde bu değerin saniye cinsinden olduğu yazmıyor.

Açıklama her şeyi söylemeli.

Ve bazı makalelere daha fazla tırmanmanız gerektiğinde, bu çok kötü.

Bir numaralandırmanın değerine asla güvenmemelisiniz.

PeriodSeconds() kullanın.

Neden: