KimIV'ten faydalı özellikler - sayfa 116

 

SetChannel() işlevi.

Bu işlev, OBJ_CHANNEL nesnesini geçerli çizelgede eşit uzaklıkta bir kanala ayarlar.

  • cl - Nesnenin rengi. Gerekli parametre.
  • t[] - Zaman ekseni boyunca üç değerden oluşan bir dizi. Gerekli parametre.
  • p[] - Fiyat ekseni boyunca üç değerden oluşan bir dizi. Gerekli parametre.
  • nm - Nesnenin adı. Varsayılan değeri - "" geçerken ad olarak mevcut çubuğun açılış zamanı kullanılır.
  • 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                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2013                                                     |
//|  Описание : Установка объекта OBJ_CHANNEL Равноудаленный канал.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl  - цвет линии                                                        |
//|    t[] - время открытия бара                                               |
//|    p[] - ценовой уровень                                                   |
//|    nm  - наименование              (  ""  - время открытия текущего бара)  |
//|    ry  - луч                       (False - по умолчанию)                  |
//|    st  - стиль линии               (  0   - простая линия)                 |
//|    wd  - ширина линии              (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetChannel( color cl, datetime & t[], double & p[],
                 string nm= "" , bool ry=False, int st= 0 , int wd= 1 ) {
   if (nm== "" ) nm=DoubleToStr(Time[ 0 ], 0 );
   if (t[ 0 ]<= 0 ) t[ 0 ]=Time[ 20 ];
   if (p[ 0 ]<= 0 ) p[ 0 ]=High[ 20 ];
   if (t[ 1 ]<= 0 ) t[ 1 ]=Time[ 0 ];
   if (p[ 1 ]<= 0 ) p[ 1 ]=High[ 0 ];
   if (t[ 2 ]<= 0 ) t[ 2 ]=Time[ 15 ];
   if (p[ 2 ]<= 0 ) p[ 2 ]=Low[ 15 ];
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_CHANNEL , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
  ObjectSet(nm, OBJPROP_TIME1 , t[ 0 ]);
  ObjectSet(nm, OBJPROP_PRICE1, p[ 0 ]);
  ObjectSet(nm, OBJPROP_TIME2 , t[ 1 ]);
  ObjectSet(nm, OBJPROP_PRICE2, p[ 1 ]);
  ObjectSet(nm, OBJPROP_TIME3 , t[ 2 ]);
  ObjectSet(nm, OBJPROP_PRICE3, p[ 2 ]);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY    , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
not. Ekli, SetChannel() işlevini test etmek için bir komut dosyasıdır.
Dosyalar:
 

Tünaydın.

KimIV https://forum.mql4.com/ru/38949/page6#434255 adresinden SetTLine() işlevini kullanıyorum.   Sorun şu ki, iki satıra (üst ve alt) ihtiyacım var, ancak bu benim için çalışmıyor. Diğer değişkenlerle başka bir SetTLine1() işlevi yaptım, ancak yine de çalışmadı.   Nasıl yapılır?

 //+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
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=iLowest( NULL , 0 , MODE_LOW, b2-b1- 1 , b1);
int n1=iLowest( NULL , 0 , MODE_LOW, b1-b0- 1 , b0);
datetime t1=Time[n2];
double    p1=Low[n2];
datetime t2=Time[n1];
double    p2=Low[n1];
SetTLine(Magenta, "" , t1, p1, t2, p2, True, STYLE_SOLID , 3 );   


datetime di0=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE));
datetime di1= TimeCurrent ()- 24 * 60 * 60 ;
while (TimeDayOfWeek(di1)== 0 || TimeDayOfWeek(di1)== 6 ) di1-= 24 * 60 * 60 ;
di1=StrToTime(TimeToStr(di1, TIME_DATE));
datetime di2=di1- 24 * 60 * 60 ;
while (TimeDayOfWeek(di2)== 0 || TimeDayOfWeek(di2)== 6 ) di2-= 24 * 60 * 60 ;
di2=StrToTime(TimeToStr(di2, TIME_DATE));
int bi2=iBarShift( NULL , 0 , di2);     // номер бара начала второго дня
int bi1=iBarShift( NULL , 0 , di1);     // номер бара начала первого дня
int bi0=iBarShift( NULL , 0 , di0);     // номер бара начала текущего дня
int ni2=iHighest( NULL , 0 , MODE_HIGH, bi2-bi1- 1 , bi1);
int ni1=iHighest( NULL , 0 , MODE_HIGH, bi1-bi0- 1 , bi0);
datetime t1i=Time[ni2];
double    p1i=High[ni2];
datetime t2i=Time[ni1];
double    p2i=High[ni1];
SetTLine1(Magenta, "" , t1i, p1i, t2i, p2i, True, STYLE_SOLID , 3 );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}


void SetTLine1( color cli, string nmi= "" ,
               datetime t1i= 0 , double p1i= 0 , datetime t2i= 0 , double p2i= 0 ,
               bool ryi=False, int sti= 0 , int wdi= 1 ) {
   if (nmi== "" ) nmi=DoubleToStr(Time[ 0 ], 0 );
   if (t1i<= 0 ) t1i=Time[ 10 ];
   if (p1i<= 0 ) p1i=Low[ 10 ];
   if (t2i<= 0 ) t2i=Time[ 0 ];
   if (p2i<= 0 ) p2i=Bid;
   if ( ObjectFind (nmi)< 0 ) ObjectCreate (nmi, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
  ObjectSet(nmi, OBJPROP_TIME1 , t1i);
  ObjectSet(nmi, OBJPROP_PRICE1, p1i);
  ObjectSet(nmi, OBJPROP_TIME2 , t2i);
  ObjectSet(nmi, OBJPROP_PRICE2, p2i);
  ObjectSet(nmi, OBJPROP_COLOR , cli);
  ObjectSet(nmi, OBJPROP_RAY    , ryi);
  ObjectSet(nmi, OBJPROP_STYLE , sti);
  ObjectSet(nmi, OBJPROP_WIDTH , wdi);
}
 

İki fonksiyon yapmaya gerek yok. Farklı parametrelere sahip birini çağırmanız gerekir. İki işlevi çağırdınız, ancak her ikisi de LINE nesnesinin boş adını iletti. Varsayılan olarak SetTLine() işlevi , geçerli çubuğun açılış saatini ad olarak ayarlar. Sizin durumunuzda bu, SetTLine() işlevini kaç kez çağırırsanız çağırın, her seferinde aynı ada sahip bir nesnenin, yani BİR nesne HATTI oluşturulmasına neden oldu.

Kodunuzu değiştirdim. Eki görmek. Peki, kodunuzun ne çizdiğine bir örnek olarak, resim

Dosyalar:
 
KimIV :

İki fonksiyon yapmaya gerek yok. Farklı parametrelere sahip birini çağırmanız gerekir. İki işlevi çağırdınız, ancak her ikisi de LINE nesnesinin boş adını iletti. Varsayılan olarak SetTLine() işlevi, geçerli çubuğun açılış saatini ad olarak ayarlar. Sizin durumunuzda bu, SetTLine() işlevini kaç kez çağırırsanız çağırın, her seferinde aynı ada sahip bir nesnenin, yani BİR nesne HATTI oluşturulmasına neden oldu.

Kodunuzu değiştirdim. Eki görmek. Peki, kodunuzun ne çizdiğine bir örnek olarak, resim


Tamam teşekkürler.

 

Merhaba!

Emekleriniz için ÇOK TEŞEKKÜR EDERİM. Sitenizden 2 dosya indirdim (( ByMarketBuy( Sell) + e-SARTrailing ) ticaret sistemi kurmak için ByMarketBuy( Sell) scriptini EUR/USD'ye 1 ekran atıyorum   Bir sipariş için MAGIC 30, diğer sipariş için MAGIC 60 (sırasıyla M30 ve H1) kayıt edildikten sonra 2. ve 3. ekranlarda sırasıyla SAR.TF = 30 ve 60 ayarlı e-SARTrailing Expert Advisor bulunmaktadır . Ve aynı döviz çifti için iki emir açıldığı için aynı yöne gittikleri anlamına geliyor ve MagicNumber olmadan e-SARTrailing Expert Advisors'ın iki ekranda birbiriyle çelişeceği ortaya çıkıyor. Sizden BÜYÜK BİR TALEPİM var , danışmanı düzeltir (ekler misiniz) gibi bir işlevi yerine getirir misiniz?   MagicNumber , belki de birçok insan böyle bir eklemeyi takdir edecektir. Ve bu danışmanın, eş yönlülükten bağımsız olarak, birbiriyle çelişmeden tüm zaman dilimlerinde aynı anda çalışabileceği ortaya çıktı .

şimdiden teşekkürler _

 
tim-time :

Sizden BÜYÜK BİR TALEPİM var, danışmanınızı MagicNumber gibi bir işlevi düzeltebilir (ekleyebilir) misiniz?

Bahşiş için teşekkürler. Sihirli bir filtre eklendi...
 

GetTimeOpenBar() işlevi.

Bu işlev, isteğe bağlı bir sembolün bir çubuğunun açılma zamanını ve isteğe bağlı bir zaman çerçevesini döndürür. Temel olarak, yalnızca temel iBarShift() ve iTime() işlevlerinin bir birleşimidir. Bu nedenle, burada yeni bir şey yok ve bir veya başka bir seçeneğin kullanımı bir kolaylık meselesidir. Aşağıdaki isteğe bağlı parametreleri işleve iletebilirsiniz:

  • sy - İşlem aracının adı (sembol). "" ve NULL değerleri geçerli karakter anlamına gelir. Varsayılan değer "" dir.
  • tf - Zaman çerçevesi. Varsayılan değer - 0 - mevcut zaman dilimi.
  • dt - Tarih ve saat. Varsayılan değer - 0 - geçerli saat.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия бара.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий)                 |
//|    dt - дата/время                 (    0       - текущее)                 |
//+----------------------------------------------------------------------------+
datetime GetTimeOpenBar( string sy= "" , int tf= 0 , int dt= 0 ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   if (tf== 0 ) tf= Period ();
   if (dt== 0 ) dt= TimeCurrent ();
  
   int sh=iBarShift(sy, tf, dt, False);

   return (iTime(sy, tf, sh));
}

 
KimIV :
Bahşiş için teşekkürler. Sihirli bir filtre eklendi...

MERHABA!

VAY !!! BU SICAKLIKTIR!!! (Kendim yaparım ya da hemen HAYIR derim)

BİR PROFESYONEL İÇİN BÜYÜK SAYGI İLE! (Bir profesyonel, en küçük ayrıntıları bilmeli + kendi yönünde sıkı çalışmalı ve elbette yıllar içinde biriken TECRÜBE'yi bilmelidir).

4. beş yıllık dönem ve 1 beş yıllık dönem için yerleşik mobilyalarla uğraşıyorum forex ticaretini bitiriyorum (sıkı çalışma + Ticarette başarılı ve başarısız anların deneyimi, en küçük MAKSİMUM'u bulmaya devam ediyor detaylar).

HEDEFİM TİCARETTE PROFESYONEL OLMAK.

YARDIMINIZ İÇİN TEŞEKKÜRLER !

SAYGILARLA!

 

Hatanın kısa veya ayrıntılı bir Rusça açıklamasını koduna göre döndüren ErrorRU() işlevi derlendi. Hem ticaret sunucusu tarafından döndürülen hatalar hem de MQL program yürütme hataları tanınır. Bununla birlikte, herkes için değil, "Ne yapmalı" önerileri ile hataların ayrıntılı bir açıklaması var, ancak orada ne var.

İşlevi, test etmek için bir komut dosyasının parçası olarak yayınlıyorum.

Birinin MQH dosyası biçiminde bir varyasyona ihtiyacı varsa, onu sitemden alın .

Dosyalar:
 

Merhaba!

Lütfen e-SignalOfTrade Uzman Danışmanınıza PUSH bildirimleri eklemenin mümkün olup olmadığını söyleyin?

https://www.mql5.com/ru/forum/6960

https://www.mql5.com/ru/docs/common/sendnotification

( Kiralanan VPS sunucusu, danışmanın UseSendMail = True - E-mail işlevi etkin durumda çalışabilmesi için MT4 mail ayarlarında belirtilmesi gereken SMTP sunucu verilerini vermeyi reddeder. )

   şimdiden teşekkürler _