KimIV'ten faydalı özellikler - sayfa 35

 
xrust писал (а) >>
Başka bir soru, standart hale getirmek için işlevlerimde kullandığınızla aynı sözdizimini ve değişken adlarını kullanmamın sakıncası var mı?

Doğru olduğunu düşündüğün şeyi yap.

 

SetLabel() işlevi.

Bu işlev, OBJ_LABEL nesnesini geçerli grafikte bir metin etiketine ayarlar.

  • nm - Nesnenin adı. Gerekli parametre.
  • tx - Metin. Gerekli parametre.
  • cl - Etiket rengi. Gerekli parametre.
  • xd - Bağlantı açısına göre piksel cinsinden X koordinatı. Gerekli parametre.
  • yd - Bağlantı açısına göre piksel cinsinden Y koordinatı. Gerekli parametre.
  • cr - Ankraj açısı numarası. Geçerli değerler: 0 - sol üst, 1 - sağ üst, 2 - sol alt, 3 - sağ alt. Varsayılan değer 0'dır .
  • fs - Yazı tipi boyutu. Varsayılan değer 9'dur .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний,                     |
//|                                     1 - правый верхний,                    |
//|                                     2 - левый нижний,                      |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel ( string nm , string tx , color cl , int xd , int yd , int cr = 0 , int fs = 9 ) {
   if ( ObjectFind ( nm ) < 0 ) ObjectCreate ( nm , OBJ_LABEL , 0 , 0 , 0 ) ;
   ObjectSetText ( nm , tx , fs ) ;
   ObjectSet ( nm , OBJPROP_COLOR     , cl ) ;
   ObjectSet ( nm , OBJPROP_XDISTANCE , xd ) ;
   ObjectSet ( nm , OBJPROP_YDISTANCE , yd ) ;
   ObjectSet ( nm , OBJPROP_CORNER    , cr ) ;
   ObjectSet ( nm , OBJPROP_FONTSIZE , fs ) ;
}
 

SetLabel() işlevini kullanma örnekleri.

  • Sol üst köşede üç mavi metin etiketi, yazı tipi 9.
     SetLabel ( " Label1 " , " Текстовая метка " , Blue , 5 , 15 ) ;
    SetLabel ( " Label2 " , " Ещё одна текстовая метка " , Blue , 5 , 30 ) ;
    SetLabel ( " Label3 " , " Параметр cr=0 " , Blue , 5 , 45 ) ;

  • Sağ üst köşede üç mor metin etiketi, yazı tipi 12.
     SetLabel ( " Label1 " , " Текстовая метка " , Magenta , 5 , 15 , 1 , 12 ) ;
    SetLabel ( " Label2 " , " Ещё одна текстовая метка " , Magenta , 5 , 30 , 1 , 12 ) ;
    SetLabel ( " Label3 " , " Параметр cr=1 " , Magenta , 5 , 45 , 1 , 12 ) ;

  • Sağ alt köşede üç yeşil metin etiketi, yazı tipi 12.
     SetLabel ( " Label1 " , " Текстовая метка " , Green , 5 , 15 , 3 , 12 ) ;
    SetLabel ( " Label2 " , " Ещё одна текстовая метка " , Green , 5 , 30 , 3 , 12 ) ;
    SetLabel ( " Label3 " , " Параметр cr=3 " , Green , 5 , 45 , 3 , 12 ) ;


not. Ekli, SetLabel() işlevini test etmek için bir komut dosyasıdır.

Dosyalar:
 
SergNF писал (а) >>

Bir "include" dosyası (mqh) oluşturun (muhtemelen 2 - "ticaret" ve "diğer"), adı üzerinde anlaşın ve "geliştiricileri" bunu dağıtıma dahil etmeye zorlayın.

Düşünce öldürülemez, işler uzun süredir pekiştirilmeye doğru gidiyor. Profesyonel olmayan biri olarak hayalim, sıradan kullanıcıyı yalnızca karar vermesi için bırakmak ve onu yazılım inceliklerinden kurtarmaktır.

Igor'un gelişmeleri (tutarlılık ve ayrıntı açısından şaşırtıcı) buna mümkün olduğunca yaklaştı. Üstelik yazar sadece programlar değil, aynı zamanda sürekli olarak

kodun pratik değerini çoğaltan gerçek danışmanlar.

Igor'un geliştirmelerinin mqh tasarımı olasılığı, böyle bir uygulamanın avantajları ve dezavantajları hakkında fikrini duymak isterim.

 
granit77 писал (а) >>
Igor'un geliştirmelerinin mqh tasarımı olasılığı, böyle bir uygulamanın avantajları ve dezavantajları hakkında fikrini duymak isterim.

doğru fırsatlar...

MQH-dosyaları benim için uzun zamandır yapılıyor... Henüz göndermiyorum... Kolumdaki bir as gibi... Son akor şöyle olacak... Tüm fonksiyonları yazacağım ve özetleyeceğim mqh dosyalarını yükleyerek.

harika dastoinstva ve nidastatki ...

MQH dosyaları kullanışlıdır. Farklı Uzman Danışmanlarda kullanılabilir. Belirli bir danışmanın kodu önemli ölçüde azalır. Geriye kalan tek şey kutsal mantık ve başka bir şey ve tüm çanlar, ıslıklar ve ambalajlar dışarıda yatıyor.

Ancak nadiren mqh dosyalarını kullanırım ve çoğunlukla sadece bir tane. Bu stdlib.mqh'dir. Ve gerekli tüm işlevleri danışmanın dosyasına kopyalayıp yapıştırın. Benim için daha rahat. Bu alışkanlığı, sipariş vermek için çok şey yazdığımda edindim ve genellikle müşteriye şu veya bu mqh dosyasını göndermeyi unuttum. Ve bir Expert Advisor dosyasını terminallerin farklı klasörlerine kopyalamak ve bir sürü eklentiyi arkasına sürüklememek benim için daha uygun.

 
Bu sadece eğlenceli değil! Bu harika! Böyle bir kütüphane olmadan bir dağıtımın eksik sayılacağı gün çok uzak değil.
 

Belki faydalı işlevlerde, http://www.kroufr.ru/content/view/1027/124/ makalesinde açıklanan siparişleri açabilecek bir komut dosyasına sahipsiniz.

El ile çok zaman alır. Değilse, lütfen nerede bulacağınızı bildirin. Teşekkürler. .

 

CrossPointOfLines() işlevi.

Bu fonksiyon iki doğrunun kesiştiği noktanın koordinatlarını hesaplar. Her çizgi, noktalarının bir çift koordinatıyla tanımlanır. İşleve parametre olarak üç dizi iletilir:

  • x - Bir dizi apsis. Dört öğe içermelidir: x[0] , x[1] - ilk satırın apsisi, x[2] , x[3] - ikinci satırın apsisi.
  • y - Bir dizi koordinat. Dört öğe içermelidir: y[0] , y[1] - ilk satırın koordinatları, y[0] , y[1] - ikinci satırın koordinatları.
  • t - İki çizginin gerekli kesişme noktasının bir koordinat dizisi. İşlevin normal yürütülmesinden sonra, bu dizi iki öğe içerecektir: t[0] - iki çizginin istenen kesişme noktasının apsisi ve t[1] - aynı noktanın ordinatı.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines ( double & x [] , double & y [] , double & t []) {
   double z = ( y [ 3 ] - y [ 2 ]) * ( x [ 1 ] - x [ 0 ]) - ( y [ 1 ] - y [ 0 ]) * ( x [ 3 ] - x [ 2 ]) ;
   ArrayResize ( t , 2 ) ;
   ArrayInitialize ( t , 0.0 ) ;

   if ( z == 0 ) Print ( " CrossPointOfLines(): Не удалось найти точку пересечения! " ) ;
   else {
     double xy1 = x [ 1 ] * y [ 0 ] - x [ 0 ] * y [ 1 ] ;
     double xy2 = x [ 3 ] * y [ 2 ] - x [ 2 ] * y [ 3 ] ;
     t [ 0 ] = NormalizeDouble (( xy1 * ( x [ 3 ] - x [ 2 ]) - xy2 * ( x [ 1 ] - x [ 0 ])) / z , 0 ) ;
     t [ 1 ] = ( xy1 * ( y [ 3 ] - y [ 2 ]) - xy2 * ( y [ 1 ] - y [ 0 ])) / z ;
   }
}
 

CrossPointOfLines() işlevinin kullanımına bir örnek.

CrossPointOfLines() işlevini kullanmanın bir örneği olarak, geleneksel olarak kendi betiğimi sunuyorum (eke bakın). Komut dosyasının doğru çalışması için, geçerli grafikte aşağıdaki türlerden herhangi birinde kesişen iki çizgi çizmeniz gerekir: dikey, yatay, eğilim. Ve sonra grafiğe bir komut dosyası ekleyin. Komut dosyasının sonucu, iki düz çizginin kesişme noktasında sol fiyat işareti olacaktır.

not. Ekli, CrossPointOfLines() işlevini test etmek için bir komut dosyasıdır.

Dosyalar:
 

SetRegression() işlevi.

Bu işlev, OBJ_REGRESSION nesnesini geçerli çizelgede doğrusal regresyon kanalına ayarlar.

  • cl - Nesnenin rengi. Gerekli parametre.
  • nm - Nesnenin adı. Varsayılan değeri - "" geçerken ad olarak mevcut çubuğun açılış zamanı kullanılır.
  • t1 - Nesnenin kurulum süresinin ilk koordinatı. Varsayılan değer 0 - onuncu çubuğun açılma zamanı.
  • t2 - Nesnenin kurulum süresinin ikinci koordinatı. Varsayılan değer 0'dır - mevcut çubuğun açılma zamanı.
  • ry - RAY özelliğinin bayrağı. Varsayılan değer False'dır .
  • st - Çizgi stili. Geçerli değerler STYLE_SOLID (varsayılan), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT .
  • wd - Çizgi kalınlığı. Varsayılan değer 1'dir .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_REGRESSION канал линейной регрессии.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ( ""   - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10])                      |
//|    t2 - время открытия бара        (  0   - Time[0])                       |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetRegression ( color cl , string nm = "" , datetime t1 = 0 , datetime t2 = 0 ,
                     bool ry = False , int st = STYLE_SOLID , int wd = 1 ) {
   if ( nm == "" ) nm = DoubleToStr ( Time [ 0 ] , 0 ) ;
   if ( t1 <= 0 ) t1 = Time [ 10 ] ;
   if ( t2 <= 0 ) t2 = Time [ 0 ] ;
   if ( ObjectFind ( nm ) < 0 ) ObjectCreate ( nm , OBJ_REGRESSION , 0 , 0 , 0 , 0 , 0 ) ;
   ObjectSet ( nm , OBJPROP_TIME1 , t1 ) ;
   ObjectSet ( nm , OBJPROP_TIME2 , t2 ) ;
   ObjectSet ( nm , OBJPROP_COLOR , cl ) ;
   ObjectSet ( nm , OBJPROP_RAY   , ry ) ;
   ObjectSet ( nm , OBJPROP_STYLE , st ) ;
   ObjectSet ( nm , OBJPROP_WIDTH , wd ) ;
}