KimIV'ten faydalı özellikler - sayfa 11

 
KimIV :
Her erkeğin ayrılma hakkı vardır ... eee ... Bu konuda biraz eğleneceğim

İlnar , bir fraktalla ilgili bekleyen emir konusunda, "Verilen fraktallar üzerinde bekleyen emir nasıl yapılır?" diye sordu.


İlnar'ın fraktalların fiyat seviyelerini belirlemekte zorlandığını varsayıyorum. Bu nedenle, geleneksel olarak işlevimi kullanmayı öneriyorum:


 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal ( string sy = " 0 " , int tf = 0 , int mode = MODE_LOWER ) {
  if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
  double f = 0 ;
  int d = MarketInfo ( sy , MODE_DIGITS ) , s ;
  if ( d == 0 ) if ( StringFind ( sy , " JPY " ) < 0 ) d = 4 ; else d = 2 ;
 
  for ( s = 2 ; s < 100 ; s ++ ) {
    f = iFractals ( sy , tf , mode , s ) ;
    if ( f != 0 ) return ( NormalizeDouble ( f , d )) ;
  }
  Print ( " FindNearFractal(): Фрактал не найден " ) ;
  return ( 0 ) ;
}
FindNearFractal() işlevi, belirli bir sembolde, belirli bir zaman diliminde belirli bir türün en yakın fraktalını arar ve fiyat düzeyini döndürür. Fraktal lokasyonun fiyat seviyesini bilerek, bu seviyede sipariş vermek zaten çok kolay.
Fonksiyonun, örneğin fraktalın bulunduğu çubuğun numarasını da iki değer döndürmesi mümkün mü yoksa başka bir tane bağlamak gerekli mi?
 
xrust писал (а):
Fonksiyonun, örneğin fraktalın bulunduğu çubuğun numarasını da iki değer döndürmesi mümkün mü yoksa başka bir tane bağlamak gerekli mi?
Bir tane yeterli olduğunda neden iki değer döndürelim - çubuk numarası? Bunu yapmak için operatörde:
 return ( NormalizeDouble ( f , d )) ;
fiyat seviyesinin değil, bar sayacının değerinin iletimini yazın s . Çıktıda fraktal çubuğun numarasını alın. Fraktalın türüne bağlı olarak iHigh () veya iLow () işlevlerinden biriyle fiyat seviyesini alın.
 
Hayır, burada her şey açık, temelde soruyorum. Teşekkürler, yazılarınız çok yardımcı oluyor.
 
xrust :
Hayır, burada her şey açık, temelde soruyorum.
ahh ... peki, eğer prensipte ise, referansla geçen bir diziyi kullanabilirsiniz. Daha sonra döndürülen parametrelerin sayısı dizinin boyutuyla sınırlandırılacaktır.
 

ExistOrdersByLot() işlevi.

Belirli bir parti büyüklüğüne sahip bir siparişin varlığının bayrağını döndürür. Doğru - sipariş var (ayarlandı), Yanlış - sipariş yok (ayarlanmadı). Kontrol edilen siparişlerin listesini fonksiyon parametreleriyle sınırlayabilirsiniz:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın siparişlerini kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - İşlem, bekleyen emir türü. Geçerli değerler OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1 şeklindedir. Varsayılan değer -1 , herhangi bir sipariş türü anlamına gelir.
  • mn - Sipariş Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
  • lo - İki ondalık basamak doğruluğu ile parti boyutu. Varsayılan değer 0 - herhangi bir parti büyüklüğü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает флаг существования ордера по размеру лота.          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    lo - лот                        ( 0   - любой лот)                      |
//+----------------------------------------------------------------------------+
bool ExistOrdersByLot ( string sy = "" , int op =- 1 , int mn =- 1 , double lo = 0 ) {
   int i , k = OrdersTotal () , ot ;
   lo = NormalizeDouble ( lo , 2 ) ;

   if ( sy == " 0 " ) sy = Symbol () ;
   for ( i = 0 ; i < k ; i ++ ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) {
       ot = OrderType () ;
       if ( ot > 1 && ot < 6 ) {
         if (( OrderSymbol () == sy || sy == "" ) && ( op < 0 || ot == op )) {
           if ( mn < 0 || OrderMagicNumber () == mn ) {
             if ( lo <= 0 || NormalizeDouble ( OrderLots () , 2 ) == lo ) return ( True ) ;
           }
         }
       }
     }
   }
   return ( False ) ;
}
 

ExistOrdersByLot() işlevini kullanma örnekleri.

  1. 0,2 lot büyüklüğünde herhangi bir sipariş olup olmadığını kontrol edin
     ExistOrdersByLot ( "" , - 1 , - 1 , 0.2 ) ;
  2. Mevcut grafiğin sembolü için parti büyüklüğü 0.3 olan herhangi bir sipariş olup olmadığını kontrol edin
     ExistOrdersByLot ( NULL , - 1 , - 1 , 0.3 ) ;
  3. Herhangi bir enstrüman için 0,5'lik bir BuyLimit siparişi olup olmadığını kontrol edin
     ExistOrdersByLot ( "" , OP_BUYLIMIT , - 1 , 0.5 ) ;
  4. EURUSD'de magic 123456 ile 0.1 lot ile SellStop siparişini kontrol edin
     ExistOrdersByLot ( " EURUSD " , OP_SELLSTOP , 123456 , 0.1 ) ;
  5. Magic 987 USDJPY ile 0,4 lot ile herhangi bir sipariş olup olmadığını kontrol edin
     ExistOrdersByLot ( " USDJPY " , - 1 , 987 , 0.4 ) ;

Ekli, her zamanki gibi, yukarıdaki örneklerle birlikte çalışan bir komut dosyasıdır.

Dosyalar:
 

GetLotLastOrder() işlevi.

Son verilen siparişin parti boyutunu veya -1 döndürür. Kontrol edilen siparişlerin listesini fonksiyon parametreleriyle sınırlayabilirsiniz:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın siparişlerini kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - İşlem, bekleyen emir türü. Geçerli değerler OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1 şeklindedir. Varsayılan değer -1 , herhangi bir sipariş anlamına gelir.
  • mn - Sipariş Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает размер лота последнего выставленного ордера или -1  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastOrder ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   datetime o ;
   double    l =- 1 ;
   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 () > 1 && OrderType () < 6 ) {
           if ( op < 0 || OrderType () == op ) {
             if ( mn < 0 || OrderMagicNumber () == mn ) {
               if ( o < OrderOpenTime ()) {
                 o = OrderOpenTime () ;
                 l = OrderLots () ;
               }
             }
           }
         }
       }
     }
   }
   return ( l ) ;
}
 

GetLotLastOrder() işlevini kullanma örnekleri.

  1. Son verilen siparişin parti büyüklüğünü öğrenin
     GetLotLastOrder () ;
  2. Mevcut enstrüman için son verilen siparişin parti büyüklüğünü öğrenin
     GetLotLastOrder ( NULL ) ;
  3. Herhangi bir enstrüman için son BuyLimit siparişinin parti büyüklüğünü öğrenin
     GetLotLastOrder ( "" , OP_BUYLIMIT ) ;
  4. EURUSD'de sihirli 123456 ile son SellStop siparişinin lot büyüklüğünü öğrenin
     GetLotLastOrder ( " EURUSD " , OP_SELLSTOP , 123456 ) ;
  5. Mevcut enstrüman için magic 2345 ile son siparişin parti büyüklüğünü öğrenin
     GetLotLastOrder ( NULL , - 1 , 2345 ) ;

Ekte, yukarıdaki örneklerle birlikte geleneksel olarak çalışan bir komut dosyası bulunmaktadır.

Dosyalar:
 

GetOrderOpenPrice() işlevi.

Son verilen siparişin fiyatını veya 0'ı döndürür. Kontrol edilen siparişlerin listesini fonksiyon parametreleriyle sınırlayabilirsiniz:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın siparişlerini kontrol edecektir. NULL , geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - İşlem, bekleyen emir türü. Geçerli değerler OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP veya -1 şeklindedir. Varsayılan değer -1 , herhangi bir sipariş anlamına gelir.
  • mn - Sipariş Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает цену установки последнего ордера или 0.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetOrderOpenPrice ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   datetime t ;
   double    r = 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 == "" ) {
         if ( OrderType () > 1 && OrderType () < 6 ) {
           if ( op < 0 || OrderType () == op ) {
             if ( mn < 0 || OrderMagicNumber () == mn ) {
               if ( t < OrderOpenTime ()) {
                 t = OrderOpenTime () ;
                 r = OrderOpenPrice () ;
               }
             }
           }
         }
       }
     }
   }
   return ( r ) ;
}
 

GetOrderOpenPrice() işlevini kullanma örnekleri.

  1. Son verilen herhangi bir siparişi vermenin fiyatını öğrenin
     GetOrderOpenPrice () ;
  2. Mevcut enstrüman için son verilen siparişin fiyatını öğrenin
     GetOrderOpenPrice ( NULL ) ;
  3. Herhangi bir enstrüman için son BuyLimit siparişi vermenin fiyatını öğrenin
     GetOrderOpenPrice ( "" , OP_BUYLIMIT ) ;
  4. EURUSD'de magic 123456 ile son SellStop siparişini vermenin fiyatını öğrenin
     GetOrderOpenPrice ( " EURUSD " , OP_SELLSTOP , 123456 ) ;
  5. Güncel enstrüman için magic 2345 ile son siparişin fiyatını öğrenin
     GetOrderOpenPrice ( NULL , - 1 , 2345 ) ;

Ekli, yukarıdaki örneklerle mükemmel çalışan bir komut dosyasıdır.

Dosyalar: