Mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri

 
Bu konu , mql4 diliyle belgelenmemiş çalışma yöntemlerini, belirli görevleri çözme örneklerini tartışacaktır. Bu başlığın içerik olarak tartışmadan çok SSS'ye daha yakın olmasını istiyorum. Tüm deneyimli programcıları buldukları çözümleri ve programlama tekniklerini paylaşmaya davet ediyorum. Yardımda açıklanmayan olasılıkların kapsamı özellikle memnuniyetle karşılanmaktadır.
 
Pekala, önce başlayalım.

Bir emri kapatmak için emir tipinin ve bu tipe karşılık gelen fiyatın tanımlanmasına gerek yoktur. OrderClosePrice() fiyatına yakın yazmanız yeterlidir.

/********************Script program start function********************/
void OnStart ()
{
   int i, total = OrdersTotal ()- 1 ;
     for (i = total; i >= 0 ; i--)
     {
       if ( OrderType () < OP_SELLSTOP )
       {
         if (! OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 100 ))
         printf ( "***********" );
       }
     }
} /********************************************************************/
 

Kılavuzda hala birçok yanlışlık var. Örneğin, SetIndexBuffer() öğesini alın. Yardımın nesi var?

"Seçenekler

dizin

[içinde] Gösterge arabellek numarası . Numaralandırma 0'dan başlar. Sayı, #property gösterge_tamponlarında belirtilen değerden küçük olmalıdır." (bu ifade doğru değil)

#özellik göstergesi_buffers, görüntülenecek arabellek sayısını belirtir. Belki yardımın anlamı, kontrol etmemiş olmama rağmen, hesaplama için kullanılan arabelleklerin SetIndexBuffer() ile numaralandırılması gerekmediğidir. Ama kontrol ettiğim şey, eğer hesaplamalar için kullanılan arabelleğe SetIndexBuffer() işlevi kullanılarak bir sayı verilirse, değeri iCustom() aracılığıyla elde edilebilir.

 
hiçbir şey anlamadım
 

Geliştiriciler konuyu ziyaret ettiğinden, "incelikler ve püf noktaları" ile ilgili bir soru var:

Biçimlendirilmiş yazdırma örneği: PrintFormat("Bid=%. 5 f", Bid)

Soru: Kesinliğin _Digits'e bağlı olması için biçim açıklamasında sabit bir kesinlik (burada 5 ) yerine bir koşul ayarlamak mümkün müdür? PrintFormat("Bid=%s", DoubleToString (Bid, _Digits)) gibi 'ön işlemeden' kaçınmak için

 

MQL4'te, aynı kod, #property katı durumuna bağlı olarak farklı sonuçlar üretebilir. Ve bu, her iki durumda da başarılı bir derleme ile. Bu nedenle, yürütme "sanrısal" ise, nedeni yanlış yerde (katı) uzun süre arayabilirsiniz.

 
Alexander Puzanov :

Soru: Kesinliğin _Digits'e bağlı olması için biçim açıklamasında sabit bir kesinlik (burada 5 ) yerine bir koşul ayarlamak mümkün müdür?

Hayır , örnekler var https://www.mql5.com/ru/docs/common/printformat
Документация по MQL5: Общие функции / PrintFormat
Документация по MQL5: Общие функции / PrintFormat
  • www.mql5.com
Общие функции / PrintFormat - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Описание проблемы

MQL4'te bir gösterge yazıyorum. DRAW_HISTOGRAM stilinin belgelenmemiş bir özelliğine rastladım.

Değerleri bir grafikte görüntülemek için iki arabelleğe ihtiyaç vardır: histogramın üst değeri için ve alt değer için. Dizilerin gösterge arabelleklerine eşlendiğinde, stil için arabellekler 0 ve 1, 2 ve 3, 4 ve 5 olacaksa, vb. her şey normal olarak görüntülenir. Ancak, stil arabelleklerine ODD ile başlayan değerler atanmışsa, yani. 1 ve 2, 3 ve 4, 5 ve 6, veri penceresindeki değerler doğru olmasına rağmen histogram çizgileri grafikte doğru görüntülenmeyecektir.

Lütfen belgelere bu özellikten bahsedin veya düzeltin, çünkü DRAW_HISTOGRAM stilinin açıklaması her zaman eşit bir arabellekle başlamaz!

SD'den.
 

gösterge ilk kez çağrıldığında tüm verileri yeniden hesaplanacaktır.


 
Alexey Viktorov :
Bir emri kapatmak için emir tipinin ve bu tipe karşılık gelen fiyatın tanımlanmasına gerek yoktur. OrderClosePrice() fiyatına yakın yazmanız yeterlidir.

Böylece OrderClosePrice'ı yalnızca ilgili OrderSelect'ten hemen sonra kullanabilirsiniz. Çünkü OrderSelect, Order(const)-işlevlerinin verilerini bir kez kopyalar ve aynı RefreshRates bunları güncelleyemez.

Onlar. örneğin, OrderClosePrice ile kapatmak mümkün olmadıysa, bir sonraki denemeden önce OrderSelect'i tekrar yapmak gerekir (RefreshRates gerekli değildir).

Tehdit Bu konu zaten 2005'te ! İşte geliştiricilerin ayrıntılı argümanları.

 
Rashid Umarov :
Hayır , örnekler var https://www.mql5.com/ru/docs/common/printformat

Çok yazık..

---

Bu gönderinin işe yaramaz olmasını önlemek için:

StringGetCharacter("a", 0) yerine sadece 'a' yazabilirsiniz - genellikle StringSplit kullanarak dizeleri parçalara ayrıştırırken gereklidir