KimIV'ten faydalı özellikler - sayfa 115

 

Merhaba Andrey!

  1. Şu anda açılış fiyatı için zaten üç fonksiyon var:
  2. Biletler için işlevler de vardır. İki tane var:
Bu işlevler, Andrey, parti büyüklüğüne göre seçim dışında ihtiyacınız olan her şeye sahiptir. Yakın gelecekte, parti büyüklüğüne göre açılış fiyatı ve biletin alınabileceği başka işlevler yapacağım.

 
KimIV :

Merhaba Andrey!

  1. Açılış fiyatı için şu anda zaten üç fonksiyon var:
  2. Biletler için işlevler de vardır. İki tane var:
Bu işlevler, Andrey, parti büyüklüğüne göre seçim dışında ihtiyacınız olan her şeye sahiptir. Yakın gelecekte, parti büyüklüğüne göre açılış fiyatı ve biletin alınabileceği başka işlevler yapacağım.
Belki onlar benim için gereksizdir ve şu gibi gereksiz koşullardan kurtulmam gerekiyor: en yakın pozisyonun açılış fiyatı, son açık, piyasaya en yakın. Ve her zaman doğru sonuç vermez. Ayrıca doğru seçeneklerin karşılaştırılmasında tüm bu hikmetlerin anlaşılması daha hızlı olacaktır. Teşekkürler, bekleyeceğim.
 

GetOpenPriceByLot() işlevi.

Bu fonksiyon, lot büyüklüğüne göre bir pozisyonun veya emrin açılış fiyatını döndürür. Dikkate alınacak pozisyonların seçimi harici parametreler tarafından belirlenir:

  • sy - Piyasa aracının adı. Bu parametreyi ayarlarsanız, işlev yalnızca belirtilen takımın konumlarını dikkate alacaktır. Varsayılan değer "" herhangi bir piyasa aracı anlamına gelir. NULL değeri, geçerli enstrüman anlamına gelir.
  • op - Ticaret işlemi, pozisyon veya emir türü. Geçerli değerler OP_BUY , OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1'dir . Varsayılan değer -1 , herhangi bir ticaret işlemi anlamına gelir.
  • mn - Konum veya sipariş kimliği, MagicNumber. Varsayılan değer -1 , herhangi bir tanımlayıcı anlamına gelir.
  • lo - çok. 0 varsayılan değeri herhangi bir lot anlamına gelir.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает цену открытия позиции или ордера по размеру лота.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
double GetOpenPriceByLot( string sy= "" , int op=- 1 , int mn=- 1 , double lo= 0 ) {
   double p= 0 ;
   int     i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (mn< 0 || OrderMagicNumber()==mn)) {
         if ((op< 0 || OrderType()==op) && OrderType()< 6 ) {
           if (lo==0 || lo==NormalizeLot(OrderLots())) p=OrderOpenPrice();
        }
      }
    }
  }
   return (p);
}
not. GetOpenPriceByLot () işlevini test etmek için bir komut dosyası ektedir.
Dosyalar:
 

GetTicketByLot() işlevi.

Bu fonksiyon, lot büyüklüğüne göre bir pozisyon veya sipariş bileti döndürür. Dikkate alınacak pozisyonların seçimi harici parametreler tarafından belirlenir:

  • sy - Piyasa aracının adı. Bu parametreyi ayarlarsanız, işlev yalnızca belirtilen takımın konumlarını dikkate alacaktır. Varsayılan değer "" herhangi bir piyasa aracı anlamına gelir. NULL değeri, geçerli enstrüman anlamına gelir.
  • op - Ticaret işlemi, pozisyon veya emir türü. Geçerli değerler OP_BUY , OP_SELL, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1'dir . Varsayılan değer -1 , herhangi bir ticaret işlemi anlamına gelir.
  • mn - Konum veya sipariş kimliği, MagicNumber. Varsayılan değer -1 , herhangi bir tanımlayıcı anlamına gelir.
  • lo - çok. 0 varsayılan değeri herhangi bir lot anlamına gelir.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.03.2013                                                     |
//|  Описание : Возвращает тикет позиции или ордера по размеру лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая операция)                 |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    lo - лот                        (  0  - любой лот)                      |
//+----------------------------------------------------------------------------+
int GetTicketByLot( string sy= "" , int op=- 1 , int mn=- 1 , double lo= 0 ) {
   int i, k= OrdersTotal (), t;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (mn< 0 || OrderMagicNumber()==mn)) {
         if ((op< 0 || OrderType()==op) && OrderType()< 6 ) {
           if (lo== 0 || lo==NormalizeLot(OrderLots())) t=OrderTicket();
        }
      }
    }
  }
   return (t);
}

not. GetTicketByLot() işlevini test etmek için bir komut dosyası ektedir.


Dosyalar:
 

Merhaba Igor!

Yeni özellikler ve her şeyin çok hızlı olduğu için çok teşekkür ederiz. Hepsi çok harika. işlev döner   örneğin bilet   dış değişkenler tarafından ayarlanabilen koşullara göre siparişler veya bunları kullanamazsınız. Bu satırı tam olarak anlamıyorum:

if ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

burada if ifadesinin durumunu kontrol ediyoruz, yani.   harici değişken <0 ise, o zaman herhangi bir tür sipariş kullanılabilir VEYA fonksiyon çağrısında yazarsak, örneğin   OP_BUY , o zaman seçim siparişlerden gelecek   tip   OP_BUY. Bu koşul açıktır, ancak daha sonra yazılan eşdeğer koşul gelir.    && bunu söyleyen   OrderType () bekleyen emirler aralığında yani 1'den 5'e kadar olmalıdır. OP_BUY tipimiz bu aralığa dahil değildir ve bu nedenle operatör koşulu yanlış olmalı ve kontrol geçmelidir.   operatör if-else operatörünü takip ediyor, yani vücudun kıvrımlı okunun ötesinde bir yerde nerede olduğunu söylemek benim için zor. Bana öyle geliyor ki, piyasa emirlerinin işleyişi için bir koşul ve ayrı bir   bekleyen siparişlerin aynı işlevi. Yani, piyasa emirlerinden bir seçim yapmak istiyorsam ve bunu bilmiyorsam   kesin tip o zaman   alırım   harici değişken <0, ama ben 0'dan 1'e kadar olan koşulların belirtildiği fonksiyona atıfta bulunuyorum.Aynı durum bekleyen emirler için de geçerli. Yani, her sipariş türü kategorisi için, bunu kullanırken yararlı olduğu sonucuna vardım.   işlevinizi kullanmanız için gereken koşullar.

Ayrıca kütüphaneleri bağlamakla ilgili bir sorunum var. Aramayı denedim okudum ama yazdığım Expert Advisor'ı derlerken bağlantı hata veriyor. Henüz anlamaya vakit yok, hızlı bir şekilde karlı bir Expert Advisor yazmak istiyorum, bu yüzden gerekli tüm üç kütüphaneyi kopyaladım ve özel start() işlevinden sonra yapıştırdım ve global değişkenlerini global değişkenlere taşıdım. Uzman Danışman ve onlara bağlantıları yorumladı. Çok uygun değil, ama işe yarıyor.
 
00007 :

Bu satırı tam olarak anlamıyorum:

if ((op<0 || OrderType()==op) && (OrderType()>1 && OrderType()<6))

Sayesinde! Düzeltildi... Bunlar kopyala-yapıştır, yani sadece limit ve stop emirleri ile çalışmak üzere tasarlanmış başka bir fonksiyonun boş kullanılmasının sonuçlarıdır.

00007 :

Ayrıca kütüphaneleri bağlamakla ilgili bir sorunum var. Aramayı denedim okudum ama yazdığım Expert Advisor'ı derlerken bağlantı hata veriyor. Henüz anlamaya vakit yok, hızlı bir şekilde karlı bir Expert Advisor yazmak istiyorum, bu yüzden gerekli tüm üç kütüphaneyi kopyalayıp özel start() işlevinden sonra yapıştırdım ve global değişkenlerini global değişkenlere taşıdım. Uzman Danışman ve onlara bağlantıları yorumladı. Çok uygun değil, ama işe yarıyor.

Bu arada, kütüphanelerimi MQH dosyaları biçiminde kullanmıyorum. Genelde ihtiyaç duyduğum fonksiyonları Expert Advisor'a kopyalarım, yani her zamanki hazır Expert Advisor'ım bir MQ4 dosyasıdır. İhtiyacınız olan her şey bu dosyanın içinde. Evet, kod tekrarlanabilirliği var. Ancak işlevlerin sürümlerinde sorun yoktur.

 

Bu arada, her işlev için testler için komut dosyalarınız olduğunu ve işlevle birlikte danışmanınıza ekleyebileceğiniz tüm gerekli ek işlevlere sahip olduklarını zaten fark ettim ve her şey tek bir dosyada olacak ve başka bir şey olmayacak. İşlevlerin basit ve kullanışlı olduğu ortaya çıktı, ancak izninizle kendim için dört tane yapacağım: ikisi erteleme ve ikisi pozisyonlar için. Danışmanımın ince ihtiyaçları için daha evrensel olacaklar. Ama şimdi bunun ne kadar kolay yapılabileceğini görüyorum. Igor'a çok teşekkür ederim.

Saygılarımla, Andrew.

 

TimeOpenFirstPos() işlevi.

Bu fonksiyon, ilk açık pozisyonun açılış zamanını döndürür. Dikkate alınacak pozisyonların seçimi harici parametreler tarafından belirlenir:

  • sy - Piyasa aracının adı. Bu parametreyi ayarlarsanız, işlev yalnızca belirtilen takımın konumlarını dikkate alacaktır. Varsayılan değer "" herhangi bir piyasa aracı anlamına gelir. NULL değeri, geçerli enstrüman anlamına gelir.
  • op - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY , OP_SELL veya -1 . Varsayılan değer -1 , herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği, MagicNumber. Varsayılan değer -1 , herhangi bir tanımlayıcı anlamına gelir.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия первой открытой позиций.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenFirstPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t= TimeCurrent ();
   int       i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t>OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
   return (t);
}
İşlevi kullanmak TimeOpenLastPos() işlevine benzer
 

Merhaba

SetRegression() ( https://www.mql5.com/en/forum/107476/page35 ) kanalınıza fibu nasıl eklenir.

 
gince :

Merhaba

SetRegression() ( https://www.mql5.com/en/forum/107476/page35 ) kanalınıza fibu nasıl eklenir.

Evet, kolay:

  1. Fibo çizgisinin ilk noktasını ayarlayın (nereden ihtiyacınız olduğunu hesaplayın).
  2. İkinci noktayı hangi çubukta alacağınıza karar verin.
  3. Ardından, EquationDirect() işlevini kullanarak fiyatı alırsınız.
  4. Verilen iki noktanın koordinatları, SetTLine() işlevini kullanarak aralarından bir çizgi çizin.