Hatalar, hatalar, sorular - sayfa 1439

 
George Merts :

Deneyimlerimin gösterdiği gibi, eğer bir programcı indeks 20'de 10 eleman içeren bir diziye bir şey yazarsa, bu büyük olasılıkla bir hata yaptığı anlamına gelir ve programın bir hata vermesi ve dizinin boyutunu büyütmemesi, böylece dizinin boyutunu gizlememesi gerektiği anlamına gelir. şüpheli eylem.

Tüm bu "boyut ayarlı diziler", kolaylıktan ziyade potansiyel hataları gizleme konusunda daha fazla sorun yaşıyor. Ayrıca, bir dizinin boyutunu takip etmek zorunda olmamak da potansiyel olarak tehlikeli bir uygulamadır ve düzeltilmesi zor hatalara yol açar.

Bana öyle geliyor ki, ya da söz konusu dillerle çalışmadınız mı? Eklenen elemanın indeksinin belirtilmesine gerek yoktur, otomatik olarak atanır ve dizi boyutu da artar. Programcının bu işlem sırasında dizinde hata yapma şansı yoktur.

Benzer davranışı sınıflarla uygulayabilir, pop, shift, unshift vb. ile ilgili işlevler ekleyebilirsiniz. Ve her kodda %10..20 fonksiyon kullanılmasına rağmen, bir sınıf arabasını koddan koda sürüklemek. Bu doğru çözüm gibi geliyor mu? Bence doğru bir çözüm örneği - ObjectsDeleteAll işlevine önekle silme yeteneği eklemek - bu, daha yüksek seviyeli programlama yönünde başka bir mikrondur - ve çoğu kodlayıcı için, karşılık gelen kendi kendine yapılan işlev çöp kutusuna uçtu . Ne yazık ki dizilerle böyle bir şey görmemiz pek mümkün değil..

 

И таскать телегу классов из кода в код, при том что в каждом коде из неё используются %10..20 функций.

Dahil edilen mqh dosyalarını duydunuz mu?
 

"Akıllı dizi" sınıfları yazmaya gerek yok, bunlar zaten MetaQuotes Standart Kitaplığındalar , Arry sınıf ailesine bakın

 
Merhaba, "Açılış" komisyoncusu aracılığıyla vadeli işlemlerle çalışmak için MT5'i kullanmaya çalışıyorum.
SymbolInfoTick işlevi çağrılırken , MqlTick yapısının son iki parametresinin
- time_msc, bayrak eksik. Bu sorun çözülebilir mi? Örneğin bu siteden MT5 almak,
aracının sunucusuna bağlamayı deneyin. Veya gerekli bilgileri başka bir şekilde alabilirsiniz.
İlgileniyorum: İşlemi başlatan kimdi, satıcı mı yoksa alıcı mı?
 
Alexander Puzanov :

Bana öyle geliyor ki, ya da söz konusu dillerle çalışmadınız mı? Eklenen elemanın indeksinin belirtilmesine gerek yoktur, otomatik olarak atanır ve dizi boyutu da artar. Programcının bu işlem sırasında dizinde hata yapma şansı yoktur.

Uuuuu ... Bir programcının hata yapmak için kaç şansı vardır. Herhangi bir karmaşık programın nasıl çalıştığına dair tüm seçenekleri hesaba katabileceğinizi düşünmemelisiniz.

Tüm bu "varsayılan eylemler", karmaşık nesnelerin özellikleri olmalıdır. Sadece sınıflar. Değişkenler, diziler ve basit yapılar gibi basit nesneler, mümkün olduğunca az "varsayılan" özelliğe sahip olmalıdır.

Örneğin, oluştururken - tanımsız bir değer saklamalı ve sıfır olmamalıdır.

Benzer davranışı sınıflarla uygulayabilir, pop, shift, unshift vb. ile ilgili işlevler ekleyebilirsiniz. Ve her kodda %10..20 fonksiyon kullanılmasına rağmen, bir sınıf arabasını koddan koda sürüklemek. Bu doğru çözüm gibi geliyor mu?

Bu mantık açısından doğru çözümdür. Bu tür sınıflarla çalışırken davranışları şeffaftır.

Ve "bir sınıf arabası taşımak" hakkında - kodlama yaparken, onları etrafta taşımazsınız, sadece kütüphaneyi dahil edin. Ve derlerken, normal bir bağlayıcı, kitaplıktaki tüm yöntemleri arka arkaya yürütülebilir modüle değil, yalnızca kullanılanlara itmelidir.

Bence doğru bir çözüm örneği - ObjectsDeleteAll işlevine önekle silme yeteneği eklemek - bu, daha yüksek seviyeli programlamaya yönelik başka bir mikrondur - ve çoğu kodlayıcı için, karşılık gelen kendi kendine yapılan işlev çöp kutusuna uçtu. Ne yazık ki dizilerle böyle bir şey görmemiz pek mümkün değil..

Ve bence - bu da aynı nedenle yanlış bir yaklaşım. İşlev, uygulamasının mantığına uymayan, kendisi için olağandışı görevlerle yüklüdür.

Bana göre doğru çözüm, grafikteki nesnelerin bir listesini tutan ve işlevler çağrıldıkça gerekli olanları kaldıran bir sınıf yöneticisidir. İsim önekleri, bana öyle geliyor ki, yalnızca bir kişinin nesne hakkında bazı bilgileri anlamasını sağlamaya hizmet etmelidir. Ve silme - hiçbir şekilde nesnenin adına değil, bu adı bir diziye kaydetmeye dayanmalıdır.

 
Demal :
Merhaba, "Açılış" komisyoncusu aracılığıyla vadeli işlemlerle çalışmak için MT5'i kullanmaya çalışıyorum.
SymbolInfoTick işlevi çağrılırken , MqlTick yapısının son iki parametresinin
- time_msc, bayrak eksik. Bu sorun çözülebilir mi? Örneğin bu siteden MT5 almak,
aracının sunucusuna bağlamayı deneyin. Veya gerekli bilgileri başka bir şekilde alabilirsiniz.
İlgileniyorum: İşlemi başlatan kimdi, satıcı mı yoksa alıcı mı?
  1. Şu anda hangi terminal yapısına sahipsiniz?
  2. Hangi sunucuya bağlanıyorsunuz: demo mu yoksa gerçek mi?
 
sürüm 5.0 yapı 1150, demo
 
Demal :
sürüm 5.0 yapı 1150, demo

Terminalinizi güncelleyin (MetaQuotes-Demo demo sunucusuna bağlanmanız gerekir). Mevcut yapı:

Terminal        MetaTrader 5 build 1210 started (MetaQuotes Software Corp.)

İşte bir komut dosyası:

 //+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link        "http://wmua.ru/slesar/"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   MqlTick last_tick;
//--- 
   if ( SymbolInfoTick ( Symbol (),last_tick))
     {
       Print ( "time = " ,last_tick.time, "; bid = " ,last_tick.bid,
             "; ask = " ,last_tick.ask, "; volume = " ,last_tick.volume,
             "; time_msc = " ,last_tick.time_msc, "; flag = " ,last_tick.flags);
     }
   else Print ( "SymbolInfoTick() failed, error = " , GetLastError ());
  }
//+------------------------------------------------------------------+

şu sonucu verir:

Test (RTS- 12.15 ,H1)     time = 2015.11 . 26 09 : 42 : 57 ; bid = 88360.0 ; ask = 88400.0 ; volume = 2 ; time_msc = 1448530977000 ; flag = 0

Dosyalar:
Test.mq5  2 kb
 
Karputov Vladimir :

Terminalinizi güncelleyin (MetaQuotes-Demo demo sunucusuna bağlanmanız gerekir). Mevcut yapı:

İşte bir komut dosyası:

şu sonucu verir:

Teşekkürler, ancak bayrağın neden 0 değerine sahip olduğunu bilmiyorum, sanki hiçbir şey değişmemiş gibi
 
Demal :
Teşekkürler, ancak bayrağın neden 0 değerine sahip olduğunu bilmiyorum, sanki hiçbir şey değişmemiş gibi
CopyTicks'i kullanın ve mutlu olacaksınız. Ve SymbolInfoTick muhtemelen henüz yeni kene yapısıyla nasıl çalışacağını bilmiyor.
Dosyalar:
CopyTicks.mq5  4 kb