KimIV'ten faydalı özellikler

 

Bu başlıkta fonksiyonlarımın kodlarını MQL4 programlama dilinde yayınlayacağım, kullanımlarına örnekler vereceğim ve kullanımları ile ilgili soruları cevaplayacağım. Her işlevi iki gönderide yayınlayacağım. İlk gönderide fonksiyon kodu, ikinci gönderide kullanım örnekleri ve küçük açıklamalar. Görüntülenen sonuçlarla işlevin gerçek testi için bazen komut dosyasını ikinci gönderiye ekleyeceğim.

Sondaki " Aynı anda iki Uzman Danışman nasıl çalıştırılır " konusunda Lukyanov'un isteği üzerine siparişlerle çalışmak üzere tasarlanmış işlevlerle başlayacağım.

Sıra ayar fonksiyonunun ilki olmasına izin verin (MT4 test cihazı versiyonu):

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Установка ордера. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder ( string sy , int op , double ll , double pp ,
              double sl = 0 , double tp = 0 , int mn = 0 , datetime ex = 0 ) {
  color clOpen ;
  int   err , ticket ;
 
  if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
  if ( op == OP_BUYLIMIT || op == OP_BUYSTOP ) clOpen = clOpenBuy ; else clOpen = clOpenSell ;
  ticket = OrderSend ( sy , op , ll , pp , Slippage , sl , tp , "" , mn , ex , clOpen ) ;
  if ( ticket < 0 ) {
    err = GetLastError () ;
    Print ( " Error( " , err , " ) set " , GetNameOP ( op ) , " : " , ErrorDescription ( err )) ;
    Print ( " Ask= " , Ask , " Bid= " , Bid , " sy= " , sy , " ll= " , ll ,
          " pp= " , pp , " sl= " , sl , " tp= " , tp , " mn= " , mn ) ;
  }
}
//+----------------------------------------------------------------------------+
 
Gerçek ticaret için işlevler yayınlanacak mı? Not: Konu için teşekkürler. Çok popüler ve talep göreceğini düşünüyorum.
 
Merhaba Igor!
fikri destekliyorum. Doğru çözüm........!!!
Kodunuz çok büyük, sıklıkla sorular çıkıyor ve diğer kişilerin gönderilerinde ve diğer konularda sizinle iletişim kurmak bir şekilde iyi değil.
 

Harika.

Geliştiricilere öneri: bir işlev kitaplığı oluşturmaya başlayın. Benim düşünceme göre, bunun için topluluğa tasarım gereksinimlerinin sunulması arzu edilir (örneğin, değişkenlerin bir açıklaması olmalıdır , kullanım kısıtlamaları, satır başına karakter sayısı vb.). Bu konuyla ilgili bir MQ-vskuyu makalesi olması güzel olurdu.

Zamanla, kütüphanede sadece basit değil, aynı zamanda karmaşık işlevler de görünecektir.

 
Lukyanov :
Gerçek ticaret için işlevler yayınlanacak mı?

Evet, yapacaklar... Sırada çevrimiçi ticaret için SetOrder() işlevi olacak...


SetOrder() işlevini kullanma örnekleri:

1. Mevcut fiyatın 0.1 50 puan altında bir BuyLimit emri verin:

 SetOrder ( NULL , OP_BUYLIMIT , 0.1 , Ask - 50 * Point ) ;

2. 32 puan stop ile mevcut fiyatın 0,3 36 puan üzerinde bir BuyStop emrinin verilmesi:

 SetOrder ( NULL , OP_BUYSTOP , 0.3 , Ask + 36 * Point , Ask + ( 36 - 32 ) * Point ) ;

3. Mevcut fiyatın 0,2 42 pip üzerinde, 50 piplik alımla bir SellLimit emri verin:

 SetOrder ( NULL , OP_SELLLIMIT , 0.2 , Bid + 42 * Point , 0 , Bid + ( 42 - 50 ) * Point ) ;

4. 30 puan stop ve 70 puan alım ile mevcut fiyatın 0,5 100 puan çok altında bir SellStop emrinin verilmesi:

 SetOrder ( NULL , OP_SELLSTOP , 0.5 , Bid - 100 * Point , Bid - ( 100 - 30 ) * Point , Bid - ( 100 + 70 ) * Point ) ;

5. Magic 123456 ile geçerli fiyatın 0.1 50 pip altında ve iki saat içinde sona erecek bir BuyLimit emri verin:

 SetOrder ( NULL , OP_BUYLIMIT , 0.1 , Ask - 50 * Point , 0 , 0 , 123456 , TimeCurrent () + 2 * 60 * 60 ) ;
Fragman, yukarıdaki örneklerle birlikte gerçek bir çalışan komut dosyası içerir. İlk dört örnek yorumlanmıştır.
Dosyalar:
 
VBAG :
Merhaba Igor!
fikri destekliyorum. Doğru çözüm........!!!
Kodunuz çok büyük, sıklıkla sorular çıkıyor ve diğer kişilerin gönderilerinde ve diğer konularda sizinle iletişim kurmak bir şekilde iyi değil.
Peki, burada sohbet edebilirsiniz. Soru sormaktan çekinmeyin, cevaplamaktan memnuniyet duyarım :-)
 
İşlemler arasındaki gecikme sürümünüzü gösterin
Teşekkür ederim.
 
Yararlı konu için teşekkürler, yanmış turtalardan bahsetmeme rağmen, yine de birileri büyük veri dizilerinden µl'de depolama ve örnekleme sorunuyla karşılaşmış olabilir. Mkl ve veritabanı? Bu yönde kimse düşünmedi mi?
 
zhuki писал (а):
İşlemler arasındaki gecikme sürümünüzü gösterin

İşlemler arasında herhangi bir gecikme yapmıyorum. Yani iki veya daha fazla emir vermem gerekirse, bu alım satım işlemlerini aralarında duraklama olmadan gerçekleştiriyorum. Ancak tekrarlanması gereken alım satım denemeleri arasında, sunucuya erişimde bir hata oluşursa , MT4 geliştiricilerinin tavsiyelerine göre duraklıyorum. Örnek olarak, çevrimiçi ticaret için SetOrder() işlevimde bu tür duraklamaların nasıl uygulandığını görebilirsiniz. Ticaret sunucusu tarafından döndürülen farklı hatalar için farklı duraklamalar yapılır.

SetOrder() işlevi, bekleyen siparişleri ayarlamak için tasarlanmıştır. Demo ve gerçek hesaplarda çevrimiçi ticarette kullanılması önerilir.

Dosyalar:
 
Çok orijinal, ama 7.7,17,11 saniyedeki gecikmelerin nereden geldiğini açıklayın.Bu bir şaka veya haklı. Ve yine de, birkaç uzman varsa, o zaman analiz vazgeçilmezdir.
 
zhuki :
...7,7,17,11 saniyedeki gecikmelerin nereden geldiğini açıklayın. Bu bir şaka mı yoksa haklı mı?

Gerçek parayla ne şaka olabilir?

7,7 saniyelik bir duraklama için, 129 (Yanlış teklif veya satış fiyatı), 130 (Yanlış duraklar), 134 (Yeterli para yok), 136 (Fiyat yok) hatalarıyla karşılaşılır. MT4 geliştiricileri, bu durumlarda 5 saniyeden uzun duraklamalar önerir . 7.7 saniye koydum. Aynı başarı ile 6.1 saniye koymak mümkün oldu. Çekici oldukları için yuvarlak değerleri sevmiyorum, bu yüzden yuvarlak olmayanları koydum.

Duraklatma süresi 17 sn. hata 145 için varsayılmıştır (Değiştirme yasaktır). Ancak SetOrder işlevi değişmediği için bu hatanın işlenmesini kaldırdım. İşlevimin bu yönünü dikkatime sunduğunuz için teşekkür ederim!

İşlem alt sisteminin durumunu kontrol eden döngü içinde 11 saniyelik bir duraklama bulunur. Burada hem 15 saniye hem de 30 saniye koyabilirsiniz. İstediğiniz gibi.

zhuki :
Ve yine de, birkaç uzman varsa, o zaman analiz vazgeçilmezdir.

Bir ticaret hesabında birden fazla Uzman Danışman olması durumunda, 146 hatası (Alım satım alt sistemi meşgul) işlenir. SetOrder işlevi, işlem alt sisteminin serbest kalmasını bekler.


Dikkat! Önceki mesajı editledim. SetOrder işlevinde değişiklikler yapıldı.

Neden: