KimIV'ten faydalı özellikler - sayfa 33

 

SetVLine() işlevi.

Bu işlev, OBJ_VLINE nesnesini geçerli çizelgede dikey bir çizgiye ayarlar.

  • cl - DİKEY HATTI nesnesinin 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üresi. Varsayılan değer 0'dır - mevcut çubuğun açılma zamanı.
  • 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2008                                                     |
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время                      (0  - время открытия текущего бара)     |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (1  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetVLine ( color cl , string nm = "" , datetime t1 = 0 , int st = 0 , int wd = 1 ) {
   if ( nm == "" ) nm = DoubleToStr ( Time [ 0 ] , 0 ) ;
   if ( t1 <= 0 ) t1 = Time [ 0 ] ;
   if ( ObjectFind ( nm ) < 0 ) ObjectCreate ( nm , OBJ_VLINE , 0 , 0 , 0 ) ;
   ObjectSet ( nm , OBJPROP_TIME1 , t1 ) ;
   ObjectSet ( nm , OBJPROP_COLOR , cl ) ;
   ObjectSet ( nm , OBJPROP_STYLE , st ) ;
   ObjectSet ( nm , OBJPROP_WIDTH , wd ) ;
}
 

SetVLine() işlevini kullanma örnekleri.

  1. Geçerli çubukta mavi düz dikey çizgi .
     SetVLine ( Aqua ) ;
  2. Sekizinci çubukta leylak kalın çizgi.
     SetVLine ( Magenta , "" , Time [ 8 ] , STYLE_SOLID , 3 ) ;
  3. Çubuklarda noktalı çizgiler ızgarası 14:00.
     for ( int i = 0 ; i < 7 ; i ++ ) {
       datetime dt = StrToTime (( TimeToStr ( TimeCurrent () - i * 1440 * 60 , TIME_DATE )) + " 14:00 " ) ;
       int nb = iBarShift ( NULL , 0 , dt , True ) ;
       SetVLine ( Coral , " VLine " + i , Time [ nb ] , STYLE_DOT ) ;
    }

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

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

BÜYÜK BİR ŞEKİLDE. DAKUYU.

Resimde göster, yapmaya çalışalım.

 
TheXpert писал (а) >>

Resimde göster, yapmaya çalışalım.

Gösterge tarafından açıklanan alanları hesaplayan özel işlev, örneğin RSI ve orta çizgi.

Orta çizginin altında ve orta çizginin kendisi ile sınırlanan alan -S1 alanıdır ve orta çizginin üstündeki alan +S2'dir.

Karışmamak için https://www.mql5.com/ru/forum/109590 şubesine taşındı.

 

SetTline() işlevi.

Bu işlev, OBJ_TREND nesnesini geçerli grafikteki eğilim çizgisine ayarlar.

  • cl - TREND LINE nesnesinin 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ı.
  • p1 - Nesnenin kurulum fiyatının ilk koordinatı. Varsayılan değer 0 - onuncu çubuk düşük.
  • t2 - Nesnenin kurulum süresinin ikinci koordinatı. Varsayılan değer 0'dır - mevcut çubuğun açılma zamanı.
  • p2 - Nesnenin kurulum fiyatının ikinci koordinatı. Varsayılan değer 0 - mevcut çubuğun en düşük değeridir.
  • ry - RAY özelliğini işaretler. 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_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine ( color cl , string nm = "" ,
               datetime t1 = 0 , double p1 = 0 , datetime t2 = 0 , double p2 = 0 ,
               bool ry = False , int st = 0 , int wd = 1 ) {
   if ( nm == "" ) nm = DoubleToStr ( Time [ 0 ] , 0 ) ;
   if ( t1 <= 0 ) t1 = Time [ 10 ] ;
   if ( p1 <= 0 ) p1 = Low [ 10 ] ;
   if ( t2 <= 0 ) t2 = Time [ 0 ] ;
   if ( p2 <= 0 ) p2 = Bid ;
   if ( ObjectFind ( nm ) < 0 ) ObjectCreate ( nm , OBJ_TREND , 0 , 0 , 0 , 0 , 0 ) ;
   ObjectSet ( nm , OBJPROP_TIME1 , t1 ) ;
   ObjectSet ( nm , OBJPROP_PRICE1 , p1 ) ;
   ObjectSet ( nm , OBJPROP_TIME2 , t2 ) ;
   ObjectSet ( nm , OBJPROP_PRICE2 , p2 ) ;
   ObjectSet ( nm , OBJPROP_COLOR , cl ) ;
   ObjectSet ( nm , OBJPROP_RAY    , ry ) ;
   ObjectSet ( nm , OBJPROP_STYLE , st ) ;
   ObjectSet ( nm , OBJPROP_WIDTH , wd ) ;
}
 

SetTLine() işlevini kullanma örnekleri.

  1. 15. ve mevcut çubukların en düşük seviyeleri boyunca turuncu katı ışın.
     SetTLine ( Orange , "" , Time [ 15 ] , Low [ 15 ] , 0 , Low [ 0 ] , True ) ;
  2. 35. ve 10. çubukların tepe noktalarından geçen kırmızı trend çizgisi .
     SetTLine ( Red , "" , Time [ 35 ] , High [ 35 ] , Time [ 10 ] , High [ 10 ]) ;
  3. Önceki iki günün yükseklerinden leylak kalın ışın.
     datetime d0 = StrToTime ( TimeToStr ( TimeCurrent () , TIME_DATE )) ;
    datetime d1 = TimeCurrent () - 24 * 60 * 60 ;
    while ( TimeDayOfWeek ( d1 ) == 0 || TimeDayOfWeek ( d1 ) == 6 ) d1 -= 24 * 60 * 60 ;
    d1 = StrToTime ( TimeToStr ( d1 , TIME_DATE )) ;
    datetime d2 = d1 - 24 * 60 * 60 ;
    while ( TimeDayOfWeek ( d2 ) == 0 || TimeDayOfWeek ( d2 ) == 6 ) d2 -= 24 * 60 * 60 ;
    d2 = StrToTime ( TimeToStr ( d2 , TIME_DATE )) ;
    int b2 = iBarShift ( NULL , 0 , d2 ) ;     // номер бара начала второго дня
    int b1 = iBarShift ( NULL , 0 , d1 ) ;     // номер бара начала первого дня
    int b0 = iBarShift ( NULL , 0 , d0 ) ;     // номер бара начала текущего дня
    int n2 = iHighest ( NULL , 0 , MODE_HIGH , b2 - b1 - 1 , b1 ) ;
    int n1 = iHighest ( NULL , 0 , MODE_HIGH , b1 - b0 - 1 , b0 ) ;
    datetime t1 = Time [ n2 ] ;
    double    p1 = High [ n2 ] ;
    datetime t2 = Time [ n1 ] ;
    double    p2 = High [ n1 ] ;
    SetTLine ( Magenta , "" , t1 , p1 , t2 , p2 , True , STYLE_SOLID , 3 ) ;

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

Dosyalar:
 

Igor, sana daha deneyimli bir MQL4 kodlayıcı olarak hitap ediyorum.

Kohonen'in ağı için bir kütüphane yazmak üzere oturdum.

Bunu en esnek ve kullanışlı şekilde yapmak istiyorum ama yine de üstesinden gelemediğim bir an ile karşılaştım.

Örnek 1:

 int & value ; // так нельзя, интересует аналог на MQL4, если он есть
 
void AssignValue ( int & newValue )
{
   value = newValue ;
}
 
void SetValue ( int newValue )
{
   value = newValue ;
}
 
int init ()
{
   int someValue = 5 ;
   AssignValue ( someValue ) ;
   SetValue ( 10 ) ;
   Print ( someValue ) ; // очень хочется, чтобы вывелось 10
}

Bunu MQL4 kullanarak yapmak mümkün mü ve mümkünse nasıl?



Örnek2:

 void SetSize ( double & matrix [][] , int inSize , int outSize )
{
     // требуется установить размеры матрицы, не осилил
}
 
void Init ( double & matrix [][])
{
     // допустим, требуется проиниализировать всю матрицу значением 1, также не осилил
}

Yine, bunu yapabilirseniz, lütfen kodu sağlayın. Bu örnek bana gerçekleştirilebilir gibi görünüyor.



Şimdiden teşekkürler.

 
TheXpert писал (а) >>
Bunu en esnek ve kullanışlı şekilde yapmak istiyorum ama yine de üstesinden gelemediğim bir an ile karşılaştım.
Örnek 1:
Bunu MQL4 kullanarak yapmak mümkün mü ve mümkünse nasıl?

İşaretçilerle çalışmayı organize etmek istediğinizi anladım. Bir değişkenin diğerine işaret etmesi için... Yoksa ben mi yanlış anladım? Neye ihtiyacınız olduğunu kelimelerle açıklamaya çalışın.

TheXpert yazdı >>
Örnek2:
Yine, bunu yapabilirseniz, lütfen kodu sağlayın. Bu örnek bana gerçekleştirilebilir gibi görünüyor.
 void start ()
{
   double arr [ 3 ][ 2 ] ;
   Init ( arr ) ;
   for ( int i = 0 ; i < 3 ; i ++ )
   {
     for ( int j = 0 ; j < 2 ; j ++ )
     {
       Print ( " arr[ " , i , " ][ " , j , " ]= " , arr [ i ][ j ]) ;
     }
   }
}
void Init ( double & matrix [][])
{
   ArrayInitialize ( matrix , 1 ) ;
}
 
KimIV писал (а) >>

İşaretçilerle çalışmayı organize etmek istediğinizi anladım. Bir değişkenin diğerine işaret etmesi için... Yoksa ben mi yanlış anladım? Neye ihtiyacınız olduğunu kelimelerle açıklamaya çalışın.

Evet, böyle.


İkincisine gelince - rastgele değerlerle başlatmaya ne dersiniz?

Evet, yine de benim için dinamik diziler gerekli.

 
TheXpert писал (а) >>
Evet, böyle.

MQL4'te işaretçilerle çalışmak zordur. Doğrudan destek yok. Görünüşe göre burada forumda biri dizileri kullanarak bunu yapmaya çalıştı. Tam olarak söyleyemem. Kendiniz arayın...

TheXpert yazdı >>
İkincisine gelince - rastgele değerlerle başlatmaya ne dersiniz?

MathRand()

TheXpert yazdı >>
Evet, yine de benim için dinamik diziler gerekli.
Dizinin yalnızca ilk boyutunu programlı olarak değiştirebilirsiniz. ArrayResize() işlevi. İkinci, üçüncü ve dördüncü boyutların sabit kodlanması gerekecektir.