Hatalar, hatalar, sorular - sayfa 1174

 

Dün işteyken bilgisayarımı WindowsXP/32'den Win7/64'e değiştirdiler. Ondan önce, normalde iş yerinde MT4'te işlem yaptım, depodaki kodları güncelledim ve tekrar depoya sabitledim. Artık 7-ke'de MT4'te işlem yapabilirim, yeni proxy sunucu verileri kaydettim, topluluk oturum açma ve şifre de kayıtlı. Şimdi sorun şu ki MetaEditor 4 ile kodları senkronize edemiyorum. Profilde " Depolamayı bağla" için bir onay işareti var.

Bugün topluluktaki şifreyi değiştirdim, başka bir klasöre ikinci bir MT4 kurdum, bir proxy kaydettim, oturum açma ve yeni bir şifre - ticaret devam ediyor, tüm MQ hizmetlerini görüyorum, ancak depolama ile senkronizasyon yok, yapabilirim bağlanma. Lütfen sorunun başka nerede olabileceğini bana bildirin.


 
paladin800 :

Dün işteyken bilgisayarımı WindowsXP/32'den Win7/64'e değiştirdiler. Ondan önce, normalde iş yerinde MT4'te işlem yaptım, depodaki kodları güncelledim ve tekrar depoya sabitledim. Artık 7-ke'de MT4'te işlem yapabilirim, yeni proxy sunucu verileri kaydettim, topluluk oturum açma ve şifre de kayıtlı. Şimdi sorun şu ki MetaEditor 4 ile kodları senkronize edemiyorum. Profilde " Depolamayı bağla" için bir onay işareti var.

Bugün topluluktaki şifreyi değiştirdim, başka bir klasöre ikinci bir MT4 kurdum, bir proxy kaydettim, oturum açma ve yeni bir şifre - ticaret devam ediyor, tüm MQ hizmetlerini görüyorum, ancak depolama ile senkronizasyon yok, yapabilirim bağlanma. Lütfen sorunun başka nerede olabileceğini bana bildirin.


MT4 terminalini yönetici haklarıyla yeniden kurun ve MT4 terminalini yönetici haklarıyla çalıştırın. Bu yöntemle Vista/8/8.1'de MT4 hem depolamayı hem de kodlarınızın bulunduğu klasörü görür ve tüm grafik ayarlarını kaydeder.
 
barabashkakvn :
MT4 terminalini yönetici haklarıyla yeniden kurun ve MT4 terminalini yönetici haklarıyla çalıştırın. Bu yöntemle Vista/8/8.1'de MT4 hem depolamayı hem de kodlarınızın bulunduğu klasörü görür ve tüm grafik ayarlarını kaydeder.
Açık. Sessizce işyerinde Forex üzerinde çalışıyorum, yönetici (umarım) bilmiyor, bu yüzden yönetici haklarıyla devam etmeyeceğim. Sorun kritik değil, bir flash sürücü üzerinden çalışacağım. Açıklama için teşekkürler.
 
paladin800 :
Açık. Sessizce işyerinde Forex üzerinde çalışıyorum, yönetici (umarım) bilmiyor, bu yüzden yönetici haklarıyla devam etmeyeceğim. Sorun kritik değil, bir flash sürücü üzerinden çalışacağım. Açıklama için teşekkürler.
Ayrıca bir VPS kiralayabilirsiniz . Ardından, uzak tabloya bağlantı yoluyla giriş yapabilirsiniz ve yönetici haklarıyla ilgili herhangi bir sorun yoktur.
 
Derleme hatası , yapı 969
 template < typename T>
T plus( T a, T b )      { return ( a + b ); }

template < typename T>
int f( T& array[], int i )
{
         return ( plus( :: ArraySize ( array ), i ) );
}

void OnStart ()
{
         int a[ 2 ];
         int b = 1 ;
         Print ( f( a, b ));
}

Yeni yapıda olduğu için oluşur

 template < typename T>
void g( T& array[] ) { P rint ( typename ( :: ArraySize ( array ))); }
void OnStart ()
{
         int a[ 2 ];
        g( a ); //Результат: uint
}
 uint ArraySize (...);
в то время как раньше было
 int ArraySize (...);
ve kim rahatsız etti?
 int ArraySize (...);

Yardımın sessiz olmasına ve bu tür değişikliklerin hesaplamaları etkileyebilmesine rağmen neden değiştirmek gerekliydi?! ve kimse fark etmeyecek bile

 
A100 :
Derleme hatası , build 969Occurs çünkü yeni build ve kim engelledi?

Yardımın sessiz olmasına ve bu tür değişikliklerin hesaplamaları etkileyebilmesine rağmen neden değiştirmek gerekliydi?! ve kimse fark etmeyecek bile

Yardım her zaman biraz gecikir. Elbette, uint bir dizinin boyutunu belirtmek için daha mantıklıdır, çünkü boyut zaten negatif olamaz. // ve ulong daha da iyi olurdu :)
 
Ayrıca tutarsız
 template < typename T>
void g( T& array[] )
{
         Print ( typename ( :: ArrayResize ( array, 3 )));
}

void OnStart ()
{
         int a[ 2 ];
        g( a ); //Результат: int
}

ArraySize değiştirildiği, ancak ArrayResize değiştirilmediği ortaya çıktı? Temel fark nedir?

Ve fark şu ki

Возвращаемое значение

При успешном выполнении функция возвращает количество всех элементов, содержащихся в массиве после изменения размера;
в противном случае возвращает - 1 и массив не меняет размеры.

ArrayResize'ın dönüş türünü değiştirmenin ('-1' nedeniyle) temelde imkansız olduğu ortaya çıktı. Peki, ArrayResize değiştirilemezse - neden ArraySize değiştirilsin?

 

Böyle bir durum. EURNZD uzmanını birkaç yıl çalıştırmak gerekir. Tüm geçmişi sembolle sildim, yeniden yükledim - sonuç aynı:

HistoryCenter: 5240 bars imported in 'EURNZD60'

Ve bu sadece Eylül 2013. Terminal, tabloyu daha geriye kaydırmanıza izin vermiyor. Geçmiş merkezini açıp İndir'e tıkladığımda "EURNZD sembolü için yeni veri yok" mesajı görüntüleniyor. Onunla incir, okuma yazma bilmeden ne yazılır, ancak prensipte nasıl alıntı yapılır? Brokerin geçmişi yok mu? Broker iyi bilinir, diğer sembollerde bu tür problemlerle karşılaşmadım.

PS Bıyık, soru kaldırıldı. EURNZD'ye tükürüp GBPAUD'u indirdikten sonra, bu teknoloji mucizesi birdenbire EURNZD için de yeni veriler gördü. Belki birileri benzer bir durumda olacaktır - o zaman "tef ile dans etmeyi" ve terminalle sürekli olarak farklı şekillerde oynama ihtiyacını unutmayın. ;-)

PPS Burada yine aynı saçmalık AUDNZD ile başladı. Aniden "o" aynı verileri görene kadar arka arkaya birkaç kez aptalca İndir'i tıklamak zorunda kaldım.

 
MetaDriver :
Yardım her zaman biraz gecikir. Elbette, uint bir dizinin boyutunu belirtmek için daha mantıklıdır, çünkü boyut zaten negatif olamaz. // ve ulong daha da iyi olurdu :)

 template < typename T>
void g( T& str ) { Print ( typename ( :: StringLen ( str ))); }
void OnStart ()
{
         string str = "ABC" ;
        g( str ); //Результат: int
}

Bir dizgenin uzunluğu da negatif olamaz, ancak işlevlerin (arama, hesaplama, vb.) genellikle uzunluk/boyut veya -1 döndürmesi gibi basit bir nedenden ötürü uzunlukları/boyutları belirtmek için int kullanmak daha mantıklıdır. hata işlemeyi büyük ölçüde basitleştiren başarısızlık.

 
A100 :
Derleme hatası , yapı 969
...
Yardımın sessiz olmasına ve bu tür değişikliklerin hesaplamaları etkileyebilmesine rağmen neden değiştirmek gerekliydi?! ve kimse fark etmeyecek bile

ArraySize gelince, geçen gün benzer bir sorunu MQL4'te gündeme getirdim: https://www.mql5.com/ru/forum/152471 . Anladığım kadarıyla MQL5'te her şey bu planla aynı olmalı.

Ve bu 969 yapısı ne zaman ortaya çıktı? Belki de bir şekilde itirazımı dikkate aldılar :) Bu sorunla ilgili olarak servis masası, bunun nedeninin optimize edicinin yanlış çalışmasından kaynaklandığını ve yeni yapılarda türü uint olarak değiştireceklerini söyledi. Daha doğrusu, aslında hala uint, sadece belgelenmemiş :) Ve bu arada, ArrayResize da uint olarak değiştirilecek. Onlara hemen değiştirmelerini tavsiye ettim ulong , aksi takdirde yakın gelecekte büyük hacimleri depolarken 32 bitlik bir değerin olmaması nedeniyle bu soruna geri dönmek zorunda kalacaklar.

Hata durumunda -1 değerine gelince, bununla ilgili herhangi bir sorun olmamalıdır, çünkü: (int)-1 = (uint)-1 = 0xFFFFFFFF = UINT_MAX, yani. bit gösterimi aynıdır. Doğru, karşılaştırma işlemi zaten farklı bir sonuç verecektir. Onlar. kod şöyle olsaydı:

 if ( ArrayResize (...) < 0 ) ...

yanlış olacaktır.