KimIV'ten faydalı özellikler - sayfa 34

 
KimIV писал (а) >>

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...

MathRand()

Bir dizinin yalnızca ilk boyutunu programlı olarak değiştirebilirsiniz. ArrayResize() işlevi. İkinci, üçüncü ve dördüncü boyutların sabit kodlanması gerekecektir.

Pekala, dinamik dizilerle de işaretçilerle geçtik ...

Dilin 5. sürümünü dört gözle bekliyorum...

yardım için teşekkürler



Tek bir ağla çalışmanın uygulanması kolaydır.

Şaka, benim fikrim için bir ağ yeterli değildi ve ağlar arasında geçiş yapmak için işaretçilerle bir algoritma yapmak istedim, bu zor değil.

Ama hayır ... sert olmalısın.

 

SetTLineByAngle() işlevi.

Bu fonksiyon, trend çizgisinin OBJ_TRENDBYANGLE nesnesini mevcut grafiğin eğimine göre 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ı. Bu parametre bir çeşit anahtardır. Sıfır olmayan değeri, bu işlevi SetTLine() işlevine eşitler, yani eğilim çizgisi zaman/fiyat koordinat çifti kullanılarak çizilir ve eğilim çizgisi eğiminin değeri yok sayılır. Varsayılan değer 0'dır - eğime dayalı bir trend çizgisi oluşturma.
  • an - Derece cinsinden eğim açısı. Varsayılan değer - 0 - yatay çizgi.
  • 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_TRENDBYANGLE трендовая линия по углу     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - время открытия текущего бара)  |
//|    p2 - ценовой уровень            (  0   - по углу)                       |
//|    an - угол                       (  0   - по умолчанию)                  |
//|    ry - луч                        (False - не луч)                        |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLineByAngle ( color cl , string nm = "" ,
               datetime t1 = 0 , double p1 = 0 , datetime t2 = 0 , double p2 = 0 ,
               double an = 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 ( ObjectFind ( nm ) < 0 ) ObjectCreate ( nm , OBJ_TRENDBYANGLE , 0 , 0 , 0 ) ;
   ObjectSet ( nm , OBJPROP_TIME1 , t1 ) ;
   ObjectSet ( nm , OBJPROP_PRICE1 , p1 ) ;
   ObjectSet ( nm , OBJPROP_TIME2 , t2 ) ;
   if ( p2 > 0 ) ObjectSet ( nm , OBJPROP_PRICE2 , p2 ) ;
   else ObjectSet ( nm , OBJPROP_ANGLE , an ) ;
   ObjectSet ( nm , OBJPROP_COLOR , cl ) ;
   ObjectSet ( nm , OBJPROP_RAY   , ry ) ;
   ObjectSet ( nm , OBJPROP_STYLE , st ) ;
   ObjectSet ( nm , OBJPROP_WIDTH , wd ) ;
}
 

SetTLineByAngle() işlevini kullanma örnekleri.

  1. 5. çubuğun alt kısmından 45°'de turuncu katı ışın.
     SetTLineByAngle ( Orange , "" , Time [ 5 ] , Low [ 5 ] , 0 , 0 , 45 , True ) ;
  2. 13. çubuğun alt kısmından kırmızı noktalı ışınların hayranı.
     for ( int i = 0 ; i < 90 ; i += 10 )
       SetTLineByAngle ( Red , " TL " + i , Time [ 13 ] , Low [ 13 ] , 0 , 0 , i , True , STYLE_DOT ) ;

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

Dosyalar:
 

SetArrow() işlevi.

Bu işlev, nesnenin OBJ_ARROW simgesini geçerli grafiğe ayarlar.

  • cd - Simge kodu. Gerekli parametre.
  • cl - Simge 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'dır - mevcut çubuğun açılma zamanı.
  • p1 - Nesnenin kurulum fiyatının ilk koordinatı. Varsayılan değer 0'dır - mevcut Teklif fiyatı.
  • sz - Simge boyutu. Varsayılan değer 0'dır .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объекта OBJ_ARROW.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow ( int cd , color cl ,
               string nm = "" , datetime t1 = 0 , double p1 = 0 , int sz = 0 ) {
   if ( nm == "" ) nm = DoubleToStr ( Time [ 0 ] , 0 ) ;
   if ( t1 <= 0 ) t1 = Time [ 0 ] ;
   if ( p1 <= 0 ) p1 = Bid ;
   if ( ObjectFind ( nm ) < 0 ) ObjectCreate ( nm , OBJ_ARROW , 0 , 0 , 0 ) ;
   ObjectSet ( nm , OBJPROP_TIME1     , t1 ) ;
   ObjectSet ( nm , OBJPROP_PRICE1    , p1 ) ;
   ObjectSet ( nm , OBJPROP_ARROWCODE , cd ) ;
   ObjectSet ( nm , OBJPROP_COLOR     , cl ) ;
   ObjectSet ( nm , OBJPROP_WIDTH     , sz ) ;
}
 

SetArrow() işlevini kullanma örnekleri.

  • Altın fiyat etiketi 9. çubuğun zirvesinde kaldı.
     SetArrow ( 5 , Gold , "" , Time [ 9 ] , High [ 9 ] , 3 ) ;

  • 2. çubuğun en üstünde kırmızı sağ fiyat etiketi.
     SetArrow ( 6 , Red , "" , Time [ 2 ] , High [ 2 ] , 3 ) ;

  • 3. 2. çubuğun üst kısmının üzerindeki mavi ok.
     SetArrow ( 242 , Blue , "" , Time [ 2 ] , High [ 2 ] + 50 * Point , 2 ) ;
    

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

Dosyalar:
 
Yaptıklarınız için çok teşekkür ederim, bu şubeden fonksiyonları toplayıp web sitemde, forum göstergesiyle ayrı bir bölümde ve web sitenizde yayınlasam sorun olur mu?
 

Genel olarak, şubenin "İçeriği" ni bu yazının ilk sayfasında yapmak güzel olurdu. Sayfaların özelliklerini, açıklamalarını ve bağlantılarını listeleyen bir tablo. Veya ilk sayfada güncellenmiş bir arşiv bulundurun, açıklama diğer sayfalarda bulunabilir.

Bu nedenle, xrust teklifinde ustalaşırsa, burada tekrarlamak iyi olur. Fazla çalışma ile elde edilen sistematizasyon uğruna :))

 
xrust писал (а) >>
...bu daldan işlevler toplayıp web sitemde, forum göstergesiyle ayrı bir bölümde ve web sitenizde yayınlamamın sakıncası var mı?

Hayır, yapmayacağım...

 
xrust писал (а) >>
Yaptıklarınız için çok teşekkür ederim, bu şubeden fonksiyonları toplayıp web sitemde, forum göstergesiyle ayrı bir bölümde ve web sitenizde yayınlasam sorun olur mu?

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. Böylece her danışmandaki herkes tekerleği yeniden icat etmesin.

:)

 
Tekrar teşekkürler, biraz tembelim, elimde olsun diye her şeyi yığına toplamak istiyorum. 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ı?