MG4 komut dosyalarını ve Uzman Danışmanları destekleyen test cihazı - sayfa 3

 
AlexeyVik :
Pekala, bunun gerçek gerçek olduğunu kanıtlamayacağım. Genel olarak C++ programlamaya ve OOP'ye aşina olmayan bir kişi için bu oldukça zordur ve kırmızı bir kelime veya bir efsanenin doğuşu için hiç de değil. İşin garibi, bir hafta içinde anladım ve ihtiyacım olanı yazdım. Ve bu tamamen farklı bir efsane, mql5'te ustalaşmanın benim gibi profesyonel olmayanlar için bile mevcut olduğunu gösteriyor.
Herhangi bir OOP'de algoritmik olarak programlayabilir ve OOP'nin kendisini yalnızca bir sarmalayıcı olarak kullanabilirsiniz. Java'da kodlamaya başladığımda, ilk başta OOP'yi de anlamadım, ancak belirli bir sorun görmedim. Sorunlar daha sonra ortaya çıkar, çünkü algoritmik dillerde raw okumak çok zordur. Algoritmada kitaplıkları kullanmak çok daha zordur, çünkü Kullanılmadan önce vidalanmaları gerekir.
 
Reshetov :
Herhangi bir OOP'de algoritmik olarak programlayabilir ve OOP'nin kendisini yalnızca bir sarmalayıcı olarak kullanabilirsiniz. Java'da kodlamaya başladığımda, ilk başta OOP'yi de anlamadım, ancak belirli bir sorun görmedim. Sorunlar daha sonra ortaya çıkar, çünkü algoritmik dillerde raw okumak çok zordur. Algoritmada kitaplıkları kullanmak çok daha zordur, çünkü Kullanılmadan önce vidalanmaları gerekir.
Yuri, neden bana bunun ne kadar basit olduğunu açıklıyorsun? Biri kolay, diğeri çok kolay ve birisi müsait değil. Ne de olsa, ustalaşmanın imkansızlığından bahsetmedim ... Sadece dillerdeki farklılıklar hakkında ... tanıdık ve yeni hakkında konuştum.
 
Renat :
Hiç farklı değil. Bunlar, tek bir derleyici ile iki özdeş dildir.
Bu bağlamda, C++ JavaScript'ten farklı değildir. Ve bu doğru!
 
Integer :
Bu bağlamda, C++ JavaScript'ten farklı değildir. Ve bu doğru!

Forumda göremediğimiz tek şey.

Peki, sorumluluk yok. Her şeyi bulanıklaştırabilirsin.

 
AlexeyVik :
Yuri, neden bana bunun ne kadar basit olduğunu açıklıyorsun? Biri kolay, diğeri çok kolay ve birisi müsait değil.
Belge, örnek, makale yoksa anlamak zor. Ancak tüm bunlar olduğunda ve sorunlu bir durumda bile forumda soru sorabilirsiniz, o zaman erişilemezlikten bahsetmek zaten çürük bir bahane.
 
Reshetov :
Belge, örnek, makale yoksa anlamak zor. Ancak tüm bunlar olduğunda ve sorunlu bir durumda bile forumda soru sorabilirsiniz, o zaman erişilemezlikten bahsetmek zaten çürük bir bahane.

Çıkmak. Şahsen, herhangi bir sorun veya soru olmadan bu dile hakim olacağım. Ve bu, karakterin doğası gereği mevcut olmayan biri için, ona bir şey yazın.

O yüzden ne amaçla bir diyaloga girip bambaşka bir konuda fikir beyan ettiğinizi anlayamıyorum.

 
Renat :

Forumda göremediğimiz tek şey.

Peki, sorumluluk yok. Her şeyi bulanıklaştırabilirsin.

Aynen öyle. Özellikle otoriter pozisyonun otoritesini kullanmak.

Özellikle abartılı olan birkaç istisna dışında tüm diller aynıdır. Hepsi herhangi bir çaydanlık tarafından 21 gün içinde incelenir. Hepsi için, if, anahtarın farklı bir yazı biçimi olabilir, ancak bundan temelde hiçbir şey değişmez. Önemli olan operatörlerin şekli değil, dilin etkileşimde bulunduğu altyapıdır. Bu açıdan MT4 ve MT5 iki farklı dünyadır.

Fark her şeyde. Önemsizden başlayarak - göstergedeki çubukların numaralandırılmasından, MT4'te sağdan sola, MT5'te soldan sağa. Daha önemli olanla devam etmek - ticaret geçmişi verilerinin toplu konumu ve organizasyonu. En büyük fark, en sık ihtiyaç duyulan şeydir - teklif ve gösterge verilerine erişim biçiminde, verileri kopyalamak için kontrol, soldan sağa, sonra sağdan sola indeksleme gerekir, çubuk süresi aralık içindedir veya değildir. CodeBase'deki iBarShift () işlevinin analogunun yalnızca bir tartışmasına değer.

MT4'te Expert Advisor'ın kararlı çalışmasını sağlamak için OrderSelect()'in dönüş değerini kontrol etmek yeterliydi ve MT5'in son tıklamadan veri alırken bile her adımda kontrol yapması gerekiyor. MT5 için programlamanın hâlâ bazı incelikleri var ve bunları yalnızca kendinizi bir sürü tümsekle doldurarak öğreneceksiniz, çünkü ortaya konan çok sayıda komisyon var.

 

Fikrinizi tamamen destekliyorum!

İşlevselliğin genişletilmesi kesinlikle iyidir, ancak MT5'in başlığı altında uyumluluk için MT4'ün işlevlerini bırakmak gerekiyordu. Tabii ki, yalnızca MT5 ticaret modelinin çerçevesine uyanlar.

Böylece dördünden gelen kaynaklar minimum değişikliklerle taşınır.

MT5'i çoklu para birimi test cihazı olarak kullanmama rağmen, makul olmayan karmaşık işlev çağrıları beni itiyor.

MT5'e geçmek için aynı işlevler ( https://www.mql5.com/en/articles/81 ), neden bunları çekirdeğin kendisinde uygulamıyorsunuz?

Örneğin, tür dönüştürme işlevlerini neden yeniden adlandırmanız gerekti?

CharToStr - CharToString, StrToDouble - StringToDouble

ilkel görünebilir, ama ... reformlar uğruna reformlar mı?

Veya örneğin zamanla çalışmak için işlevler

 int Hour()
 int HourMQL4()
  {
   MqlDateTime tm;
   TimeCurrent (tm);
   return (tm.hour);
  }

Grafikten veri alma işlevi

 double iClose( string symbol,
               int timeframe,
               int shift)
 double iCloseMQL4( string symbol, int tf, int index)
{
   if (index < 0 ) return (- 1 );
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if ( CopyClose (symbol,timeframe, index, 1 , Arr)> 0 ) 
        return (Arr[ 0 ]);
   else return (- 1 );
}

Ve bunun gibi yüzlerce örnek var!

Elbette MT5 daha işlevsel ama MT4 daha kullanışlı! Ve bu bazen çok daha önemlidir!

 
Integer :

Aynen öyle. Özellikle otoriter pozisyonun otoritesini kullanmak.

"Bu bağlamda, C++ JavaScript'ten farklı değildir" ifadesi, MQL4 ve MQL5 arasındaki farkı tartışmak açısından saçmadır. Ve birisi bunu bulanıklaştırdı.

Yetki, uzun bir süre boyunca ve büyük miktarda çalışmayla kazanılır. Bu cildi doldurdum ve söylediklerimi takip ettim.


Fark her şeyde. Önemsizden başlayarak - göstergedeki çubukların numaralandırılmasından, MT4'te sağdan sola, MT5'te soldan sağa. Daha önemli olanla devam ediyoruz - ticaret geçmişi verilerinin toplu konumu ve organizasyonu. En büyük fark, en sık ihtiyaç duyulan şeydir - teklif ve gösterge verilerine erişim biçiminde, verileri kopyalamak için kontrol, soldan sağa, sonra sağdan sola indeksleme gerekir, çubuk süresi aralık içindedir veya değildir. CodeBase'deki iBarShift () işlevinin analogunun yalnızca bir tartışmasına değer.

Durum garip görünüyor. 21 günde herhangi bir dil öğrenilebilir, ancak çubuk numaralandırma ve veri erişimi bir sorun haline gelir.

Bir kez daha tekrar ediyorum - diller neredeyse aynı, küçük bir işlev setinde farklılık gösteriyorlar ve tek bir derleyicileri var. MQL4, derin ve ayrıntılı bir geçmişe sahip sistemler için kabul edilemez olan, verilerle çalışma konusunda eski bir yaklaşıma sahiptir. MQL4'te yeni CopyXXX işlevlerini kullanın ve MQL5'teki gibi olacaktır.


MT4'te Expert Advisor'ın kararlı çalışmasını sağlamak için OrderSelect()'in dönüş değerini kontrol etmek yeterliydi ve MT5'in son tıklamadan veri alırken bile her adımda kontrol yapması gerekiyor. MT5 için programlamanın hâlâ bazı incelikleri var ve bunları yalnızca kendinizi bir sürü tümsekle doldurarak öğreneceksiniz, çünkü ortaya konan çok sayıda komisyon var.

Hem MQL4 hem de MQL5'te işlevlerin sonuçlarını her yerde kontrol etmeniz gerekir.

MQL4'teki birçok kişi kontrollere dikkat etmedi ve verileri olduğu gibi aldı. Ve aynı şeyi MQL5'te yazıyorlar ve daha sonra forex programları CFD'lerde, vadeli işlemlerde veya hisse senetlerinde başlatıldığında çöküyor çünkü yazarlar araçların parametrelerini veya verilerin kullanılabilirliğini kontrol etmek için çok tembeldi.

 
Nemser :

MT5'i çoklu para birimi test cihazı olarak kullanmama rağmen, makul olmayan karmaşık işlev çağrıları beni itiyor.

Yeni veri erişim özelliklerinin ne yaptığını ve nedenini düşünün.

MetaTrader 4 sınırlı bir geçmiş derinliğine, ayrı zaman dilimlerine ve Açık/Yüksek/Düşük/Kapalı/Zaman[xxx] aracılığıyla sembolünüzün çubuklarına doğrudan erişime sahiptir. Bu tür doğrudan erişimin uygulanması, kaynaklar ve CPU yükü açısından çok pahalıdır. Diğer Uzman Danışmanlar ve terminalin kendisiyle çelişmemek için her bir Uzman Danışmanın bu verilerin kendi yerel kopyasına sahip olduğunu düşünün.

Sembol sayısındaki artışla (örneğin, MT5'te 5.000-10.000 enstrümana sahip olabilirsiniz) ve tüm zaman dilimlerinin temeli olarak derin bir dakika geçmişi kullanıldığında, MT4'ün yöntemlerini kullanmak temelde imkansızdır. Yeterli RAM yok ve büyük parçaları kopyalamak bile performansı düşürür. Bu nedenle, MT5'te artık her uzman için grafiğin gizli ve pahalı bir kopyasının otomatik bakımı yoktur.

Bunun yerine, geliştiricinin mevcut grafiğin tamamını değil, yerel diziye ihtiyaç duyduğu kadar veriyi doğru bir şekilde talep ettiği çok ekonomik CopyXXX işlevlerine geçtik. Ardından yerel verilerle mümkün olan en hızlı çalışma gelir (eskisinin yerine, Açık/Yüksek/Düşük/Kapalı/Zaman[xxx] oldukça pahalıdır), ayrıca yazar bu verileri önbelleğe alabilir ve bir dahaki sefere çağrıldığında idareli kullanabilir . Bellek ve CPU'daki tasarruflar çok büyük. Ek olarak, platformun kendisi büyük veritabanlarını yönetme işini serbest bırakır - bunlara erişim her zaman istek üzerinedir (kontrolsüz doğrudan yerine) ve bu, önbellekleri esnek bir şekilde yönetmenize olanak tanır.

MQL4'te Açık/Yüksek/Düşük/Kapalı/Zamana[xxx] erişim kolaylığının yalnızca geçerli simge ve zaman çerçevesiyle ilgili olduğunu ve diğer tüm simgeler ve zaman çerçevelerinin diğer tüm verilerinin iClose/iLow( ...) ciddi frenler veren fonksiyonlar. MQL5'te CopyXXX işlevlerinin birleşik modeline geçiş, durumu kökten iyileştirdi ve geliştiricilerin gerekli veri parçalarını tek bir istekle almalarını ve birden fazla engelleme çağrısı yapmamasını sağladı (her bir iClose çağrısında engellemeyi düşünün).


MT5'e geçmek için aynı işlevler ( https://www.mql5.com/en/articles/81 ), neden bunları çekirdeğin kendisinde uygulamıyorsunuz?

Bunlar yazıdaki gibi bizim fonksiyonumuz değil. Bu makale bir sürü canavarca koltuk değneğidir, ancak farkı göstermek için yayınlandı.

MQL5'e geçme konularını ve özellikle MQL5'in yeni özelliklerini kullanmanız ve akıllara durgunluk veren koltuk değnekleri oluşturmamanız gerektiğini defalarca açıkladım.


Örneğin, tür dönüştürme işlevlerini neden yeniden adlandırmanız gerekti?

ilkel görünebilir, ama ... reformlar uğruna reformlar mı?

Kaliteli bir dil mimarisi oluşturmak için doğru yaklaşım budur. İşlev adları, kısaltmalar değil, kendi kendini açıklayıcı olmalıdır.

Yeni dil ve kullanışlı otomatik tamamlama özellikleri, dili gözden geçirmemize ve daha temiz hale getirmemize izin verdi.


Veya örneğin zamanla çalışmak için işlevler Bir grafikten veri elde etmek için işlev Ve bunun gibi yüzlerce örnek var!

Bu koltuk değneği örnekleri (genellikle bunun hakkında "g yoluyla bademcikler üzerinde bir işlem yapın" derler) karşılaştırma için kullanılamaz.

MQL4 doğrudan MQL5 ile uyumluluğa indirgendiğinden ve şimdi MQL4'e birçok uyumlu işlev eklendiğinden, teorik malzeme zaten güncelliğini yitirmiştir.


Elbette MT5 daha işlevsel ama MT4 daha kullanışlı! Ve bu bazen çok daha önemlidir!

Kabul edemem.

MetaTrader 5, hem program kullanımında hem de dilde çok daha uygundur.