Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 823

 

Veterros :
Ребят подскажите, почему 4202 выдаёт (Объект не существует). Правильно что не существует его создать надо, а он мне (не существует)! Чего можно с ним сделать? Или я где-то опять накосячил?

kapanış küme parantezinden sonra başka bir şey ekleyin veya nesne değiştirme operatörlerini bu küme ayracının içine taşıyın.

 
tara :

Teşekkürler ama sorun ortadan kalkmadı.

 

Söyleyin bana, bu ifadelerin eşdeğer olup olmadığını kim düşünüyor:  

 1 ) double BarN= NormalizeDouble (iHigh( Symbol (), 5 ,iHighest( Symbol (), 5 ,MODE_HIGH,num, 1 )), Digits ) 

2 ) double BarN= NormalizeDouble (High[iHighest( Symbol (), 5 ,MODE_HIGH,num, 1 )], Digits )
 
Veterros :
Beyler, bana neden 4202 sorun olduğunu söyleyin (Nesne mevcut değil). Var olmadığı doğru, onu yaratmak gerekiyor ama benim için var (yok)! Bununla ne yapılabilir? Yoksa bir yeri batırdım mı?

Sürümünüzü hızlı bir şekilde bir komut dosyası biçiminde denedim, zamanı ve işaretleri değiştirdim ve nesnelerin varlığı için bir kontrol önerdim, ancak bana herhangi bir hata vermedi.

Belki, acı çekmemek için, yeni MQL4 dilini dikkate alarak ok nesnelerinin oluşumunu kullanmaya çalışın?

İşte yeni dili dikkate alarak belirlediğiniz ok nesnelerini oluşturan komut dosyasının "gövdesi" (şimdiye kadar yalnızca sizin tarafınızdan bilinen SignalBarsTime, Hi2, SignalBarsTime, Lo2 yerine zaman ve işaretler keyfi olarak ayarlanır):

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   if ( ObjectFind ( 0 , "Продажа" )< 0 )
     {
      ArrowDownCreate( 0 , "Продажа" , 0 ,Time[ 2 ],High[ 2 ],
                       ANCHOR_BOTTOM , clrRed , STYLE_SOLID , 5 , false , false , true , 0 );
     }
   if ( ObjectFind ( 0 , "Покупка" )< 0 )
     {
      ArrowUpCreate( 0 , "Покупка" , 0 ,Time[ 1 ],Low[ 1 ],
                    ANCHOR_TOP , clrGreen , STYLE_SOLID , 5 , false , false , true , 0 );
     }
  }
//+------------------------------------------------------------------+
//| Создает знак "Стрелка вниз"  https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_arrow_down
//+------------------------------------------------------------------+
bool ArrowDownCreate( const long               chart_ID= 0 ,           // ID графика
                     const string             name= "ArrowDown" ,     // имя знака
                     const int                sub_window= 0 ,         // номер подокна
                     datetime                 time= 0 ,               // время точки привязки
                     double                   price= 0 ,               // цена точки привязки
                     const ENUM_ARROW_ANCHOR anchor= ANCHOR_BOTTOM , // способ привязки
                     const color              clr= clrRed ,           // цвет знака
                     const ENUM_LINE_STYLE    style= STYLE_SOLID ,     // стиль окаймляющей линии
                     const int                width= 3 ,               // размер знака
                     const bool               back= false ,           // на заднем плане
                     const bool               selection= true ,       // выделить для перемещений
                     const bool               hidden= true ,           // скрыт в списке объектов
                     const long               z_order= 0 )             // приоритет на нажатие мышью
  {
//--- установим координаты точки привязки, если они не заданы
   //ChangeArrowEmptyPoint(time,price);
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим знак
   if (! ObjectCreate (chart_ID,name, OBJ_ARROW_DOWN ,sub_window,time,price))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать знак \"Стрелка вниз\"! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- способ привязки
   ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
//--- установим цвет знака
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль окаймляющей линии
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим размер знака
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Создает знак "Стрелка вверх" https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_arrow_up
//+------------------------------------------------------------------+
bool ArrowUpCreate( const long               chart_ID= 0 ,           // ID графика
                   const string             name= "ArrowUp" ,       // имя знака
                   const int                sub_window= 0 ,         // номер подокна
                   datetime                 time= 0 ,               // время точки привязки
                   double                   price= 0 ,               // цена точки привязки
                   const ENUM_ARROW_ANCHOR anchor= ANCHOR_BOTTOM , // способ привязки
                   const color              clr= clrRed ,           // цвет знака
                   const ENUM_LINE_STYLE    style= STYLE_SOLID ,     // стиль окаймляющей линии
                   const int                width= 3 ,               // размер знака
                   const bool               back= false ,           // на заднем плане
                   const bool               selection= true ,       // выделить для перемещений
                   const bool               hidden= true ,           // скрыт в списке объектов
                   const long               z_order= 0 )             // приоритет на нажатие мышью
  {
//--- установим координаты точки привязки, если они не заданы
   //ChangeArrowEmptyPoint(time,price);
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим знак
   if (! ObjectCreate (chart_ID,name, OBJ_ARROW_UP ,sub_window,time,price))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
       return ( false );
     }
//--- установим способ привязки
   ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
//--- установим цвет знака
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль окаймляющей линии
   ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим размер знака
   ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
 
P./S.: Şimdi yukarıdaki mesajımdaki satırı ANCHOR_BOTTOM ile ANCHOR_TOP ile değiştirerek düzelttim:
 if ( ObjectFind ( 0 , "Покупка" )< 0 )
     {
      ArrowUpCreate( 0 , "Покупка" , 0 ,Time[ 1 ],Low[ 1 ],
                     ANCHOR_TOP , clrGreen , STYLE_SOLID , 5 , false , false , true , 0 );
     }
 
DiPach :
P./S.: Şimdi yukarıdaki mesajımdaki satırı ANCHOR_BOTTOM ile ANCHOR_TOP ile değiştirerek düzelttim:
Çok teşekkür ederim, çok yardımcı oldunuz. Ayrıca nesnelere otomatik olarak isim atamak için nasıl yapılacağını öğrenmek istiyorum, aksi halde her seferinde yeniden çizmeniz gerekiyor. Bunu nereden öğreneceğimi ve hangi alana bakacağımı söyler misin?
 
Veterros :
Çok teşekkür ederim, çok yardımcı oldunuz. Ayrıca nesnelere otomatik olarak isim atamak için nasıl yapılacağını öğrenmek istiyorum, aksi halde her seferinde yeniden çizmeniz gerekiyor. Bunu nereden öğreneceğimi ve hangi alana bakacağımı söyler misin?
Nesne adına zaman ekleyin.
 
Veterros :

Evet. Bireysel bir isim farklı şekillerde yazılabilir.

Örneğin, nesneler için ayrı adlar oluşturmaya yönelik bir işlev şöyle görünebilir:

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string nameNi( string PrefixN, datetime TimeN)
  {
   string textn= NULL ;
   textn= StringConcatenate (PrefixN, TimeToString (TimeN, TIME_DATE | TIME_MINUTES ));
   return (textn);
  }

Ve programın gövdesinde, bunun gibi bir şey görüntülenebilir (ön ek olarak hizmet edecek koşullarda önceden yazılmış):

...

string nameobj=nameNi(prefixX,timeX);

Ayrıca, yeni oluşturulan bir nesne için örneğin şöyle görünebilir:

 if ( ObjectFind ( 0 ,nameobj)< 0 )
     {
      ArrowDownCreate( 0 ,nameobj, 0 ,timeX,HiN,
                       ANCHOR_BOTTOM , clrRed , STYLE_SOLID , 5 , false , false , true , 0 );
     }


Şimdi bunu yardımda tam olarak nerede görebileceğinizi veya site aramasında en iyi nasıl soracağınızı çözemiyorum, ancak ders kitabında şu sayfayı hatırladım: https://book.mql4.com/en/functions/strings

Bilgi ve örnek kod var. TimeToStr yerine TimeToString kullanabilirsiniz. Öğretici eski MQL4 dilinde yazılmıştır, ancak yine de benim açımdan yeni MQL4 dilinde ustalaşırken çok yardımcı olabilir. Güncellenmiş dil için yardımla birlikte dahil.

 
evillive :
Nesne adına zaman ekleyin.
Çok teşekkürler!
 
DiPach :

Evet. Bireysel bir isim farklı şekillerde yazılabilir.

Örneğin, nesneler için ayrı adlar oluşturmaya yönelik bir işlev şöyle görünebilir:

Ve programın gövdesinde, bunun gibi bir şey görüntülenebilir (ön ek olarak hizmet edecek koşullarda önceden yazılmış):

Ayrıca, yeni oluşturulan bir nesne için örneğin şöyle görünebilir:


Şimdi bunu yardımda tam olarak nerede görebileceğinizi veya site aramasında en iyi nasıl soracağınızı çözemiyorum, ancak ders kitabında şu sayfayı hatırladım: https://book.mql4.com/en/functions/strings

Bilgi ve örnek kod var. TimeToStr yerine TimeToString'i kullanabilirsiniz. Öğretici eski MQL4 dilinde yazılmıştır, ancak yine de benim açımdan yeni MQL4 dilinde ustalaşırken çok yardımcı olabilir. Güncellenmiş dil için yardımla birlikte dahil.


Merhaba canım ;) Bir düşünün her türlü nesne için ne kadar kod yazdığımı, bir isim oluşturmak için ayrı bir fonksiyon yapmak hiç aklıma gelmedi - hep kodun içine yazdım. İşte nasıl kazanıldığı. Bahşiş için teşekkürler. Ve ilgili olduğu her yerde, kompaktlık için fonksiyonlar yazıyorum, ama burada her zaman bir şey işkence gördü.

not. Orada Lyova sana merhaba dedi;)