KimIV'ten faydalı özellikler - sayfa 27

 
SamMan писал (а) >>

Aynen öyle. Ve kod ne kadar küçükse, anlaşılması o kadar kolay olur. 2-3 ekranda f-th "bulaşmış" olmaktan nefret ediyorum. İşlev, çevirme olmadan ekranda olmalıdır. Bu nedenle, kompaktlıktan yanayım.


Ben de onlara dayanamıyorum :) . İşlevim ekrana sığıyor.


Bu arada, okuyucunun dikkatini tekrar kendilerine çeken çok sayıda isteğe bağlı sürekliliğiniz olması sorun değil mi?


Bir fonksiyonun karmaşıklığını azaltmak, İYİ kod yazmanın temel koşullarından biridir.

Bu şekilde seviyorsanız, 2 seçeneğiniz var:

1. Kodun kötü tarzına alışmışsınız ve kendiniz kullanıyorsunuz, bunda iyi bir şey yok, gerçekten temel kod yazmak zorunda kaldığınızda masumiyetimi anlayacaksınız. En azından MQL5'e geçerken.

2. Ve bence bu sadece sizinle ilgili - bu kodu kullanıyorsunuz, çünkü kendi kodunuzu yazamıyorsunuz, bir programcı olarak siz bir hiçsiniz ve sonra konunun yazarına yazımı kınamaya ve tartışmaya hakkınız yok. Özellikle de yazarla konuştuğumdan beri.

Yazardan yazdığım için özür dilerim, boşuna yazdım çünkü neyse bu kodu kullanmayacağım çünkü. İhtiyacım olan her şeyle kendi kütüphanem var. Dan beri bu kadar uzun bir süre, açık bir şekilde olumsuz eleştiriler olmadı, bu da yazarın kodunun uygun olduğu anlamına geliyor. Dayanamadım :), üzgünüm.

 
TheXpert писал (а) >>

Yazardan yazdığım için özür dilerim, boşuna yazdım çünkü neyse bu kodu kullanmayacağım çünkü. İhtiyacım olan her şeyle kendi kütüphanem var. Dan beri bu kadar uzun bir süre, açık bir şekilde olumsuz eleştiriler olmadı, bu da yazarın kodunun uygun olduğu anlamına geliyor. Dayanamadım :), üzgünüm.

Yazdığım için üzgünüm ama dayanamadım. Birinin görüşünden dolayı şubeden ayrılırsan boşuna olur. Ayrıca, yazar size teşekkür etti.

Bana öyle geliyor ki, bir ve aynı problem 2 (veya daha fazla) kodla çözülebilirse genellikle güzel olurdu. Daha iyi olduğunu düşünüyorsanız, aynı sorunu çözen kodlarınızı gönderin.

Genellikle başka birinin aynı şeyi programladığı, ancak farklı bir tarzda olduğu görülür. Çok şey toplanabilir.

P. S. Çalışmanız için teşekkürler Igor.

 
Gerçekten de Andrei, boşuna tüm bunları böyle aldın. Basit ol! Ve beni zorlamaktan korkma. Benimle katkıda bulunup bir şeyleri düzeltirseniz veya kendinizinkini gönderirseniz umurumda olmaz.
 

ArraySearchDouble() işlevi.

Bu işlev, bir dizinin bir öğesini çift değerle arar ve bulunan öğenin dizinini veya -1 değerini döndürür. İşlev yalnızca bir öğe bulur ve sonuç pozitifse aramayı sonlandırır.

  • m - Öğenin aranacağı dizi.
  • e - m dizisinde bulunacak çift değer.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble ( double & m [] , double e ) {
   for ( int i = 0 ; i < ArraySize ( m ) ; i ++ ) {
     if ( m [ i ] == e ) return ( i ) ;
   }
   return ( - 1 ) ;
}
not. Ekli, ArraySearchDouble() işlevini test etmek için bir komut dosyasıdır.
Dosyalar:
 

ArraySearchInt() işlevi.

Bu işlev, bir dizi öğesini bir int değerine göre arar ve bulunan öğenin dizinini veya -1 değerini döndürür. İşlev yalnızca bir öğe bulur ve sonuç pozitifse aramayı sonlandırır.

  • m - Aranacak bir dizi int öğesi.
  • e - m dizisinde bulunacak int türünün değeri.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchInt ( int & m [] , int e ) {
   for ( int i = 0 ; i < ArraySize ( m ) ; i ++ ) {
     if ( m [ i ] == e ) return ( i ) ;
   }
   return ( - 1 ) ;
}
not. Ekli, ArraySearchInt() işlevini test etmek için bir komut dosyasıdır.
Dosyalar:
 

ArraySearchString() işlevi.

Bu işlev, bir dizi öğesini string türünde bir değere göre arar ve bulunan öğenin dizinini veya -1 değerini döndürür. İşlev yalnızca bir öğe bulur ve sonuç pozitifse aramayı sonlandırır.

  • m - Aranacak dize türündeki öğeler dizisi.
  • e - m dizisinde bulunacak dize değeri.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 04.03.2008                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchString ( string & m [] , string e ) {
   for ( int i = 0 ; i < ArraySize ( m ) ; i ++ ) {
     if ( m [ i ] == e ) return ( i ) ;
   }
   return ( - 1 ) ;
}
not. Ekli, ArraySearchString() işlevini test etmek için bir komut dosyasıdır.
Dosyalar:
 
KimIV писал (а) >>
Gerçekten de Andrei, boşuna tüm bunları böyle aldın. Basit ol! Ve beni zorlamaktan korkma. Benimle katkıda bulunup bir şeyleri düzeltirseniz veya kendinizinkini gönderirseniz umurumda olmaz.

Tamam, olaylara bakışım biraz farklı, zaten yazdığım gibi, küresel evrenselliği kötü olarak görüyorum, yani. Maksimum basitlik ve rahatlık sağlamak için kod, yazdıklarınıza en azından biraz uyarlanmış olmalıdır. Bu nedenle, kodumu buraya göndermenin bir anlamı görmüyorum.


Elbette, sakıncası yoksa, kodunuzun gözden geçiricisi olarak hareket edebilir ve kendi yazımı sunabilir veya sadece yorum verebilirim.



ZYZH: Desteğiniz için teşekkür ederim, dürüst olmak gerekirse, sizden böyle bir cevap beklemiyordum.

 
KimIV писал (а) >>

ArraySearchDouble() işlevi.

Bu işlev, bir dizinin bir öğesini çift değerle arar ve bulunan öğenin dizinini veya -1 değerini döndürür. İşlev yalnızca bir öğe bulur ve sonuç pozitifse aramayı sonlandırır.

  • m - Öğenin aranacağı dizi.
  • e - m dizisinde bulunacak çift değer.
not. Ekli, ArraySearchDouble() işlevini test etmek için bir komut dosyasıdır.

Çift - parça ustaca, sizin tarafınızdan sunulan kod bazı durumlarda yanlış çalışabilir.

Durumdan olası bir çıkış yolu öneriyorum

 int ArraySearchDouble ( double & array [] , double value , double precision = 0.00000000001 ) 
{ // на то, что я перемещаю скобки не обращайте внимания, мне так читабельней
   for ( int i = 0 ; i < ArraySize ( array ) ; i ++ ) 
   {
     if ( array [ i ] > value - precision && array [ i ] < value + precision ) return ( i ) ;
   }
   return ( - 1 ) ;
}

Peki, aniden aynı şeyi sadece sondan yapmanız gerekiyorsa

 int ArrayRevertSearchDouble ( double & array [] , double value , double precision = 0.00000000001 ) 
{ 
   for ( int i = ArraySize ( array ) - 1 ; i >= 0 ; i -- ) 
   {
     if ( array [ i ] > value - precision && array [ i ] < value + precision ) return ( i ) ;
   }
   return ( - 1 ) ;
}
 
TheXpert писал (а)
Elbette, sakıncası yoksa, kodunuzun gözden geçiricisi olarak hareket edebilir ve kendi yazımı sunabilir veya sadece yorum verebilirim.
Harika! Olaylara çok yönlü bir bakış herkesin yararına olacaktır. Önce ben :-)
 

Geçen gün, önceki işlemin sonucuna ve aynı işlemin lot büyüklüğüne bağlı olarak lotu değiştirmenin gerekli olduğu bir danışman yazdım. Ve son kapatılan pozisyonun parti büyüklüğünü döndürecek bir fonksiyonum olmadığı ortaya çıktı. Sabitleniyor...

GetLotLastClosePos() işlevi.

Bu işlev, son kapatılan pozisyonun parti boyutunu veya -1'i 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Возвращает размер лота последней закрытой позиции или -1       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetLotLastClosePos ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   datetime o ;
   double    l =- 1 ;
   int        i , k = OrdersHistoryTotal () ;

   if ( sy == " 0 " ) sy = Symbol () ;
   for ( i = 0 ; i < k ; i ++ ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderSymbol () == sy || sy == "" ) {
         if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
           if ( op < 0 || OrderType () == op ) {
             if ( mn < 0 || OrderMagicNumber () == mn ) {
               if ( o < OrderCloseTime ()) {
                 o = OrderCloseTime () ;
                 l = OrderLots () ;
               }
             }
           }
         }
       }
     }
   }
   return ( l ) ;
}
not. GetLotLastClosePos() işlevini test etmek için bir komut dosyası ektedir.
Dosyalar:
Neden: