MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1792

 
Alexey Viktorov # :

Hayır Makar, şuna benziyor:

ObjectFind() işlevi, ana pencerenin numarasını döndürür. Ve bu sayı 0'a eşittir. Öte yandan, 0 == false, eğer fonksiyon 0 döndürürse, false döndürmekle aynı olur. Tabii ki bunu uygulamazdım, eğer fonksiyon birdenbire -1 döndürürse yani bir hata varsa, o zaman nesnenin konumunu ana pencerede değil de düşünebiliriz. Evet, artı her şeye, hangi düzeltmelerin yapılacağını asla bilemezsiniz...

Genel olarak, tartışmayın ve bunu yapmayı öğrenmeyin ...

ObjectFind() işlevi, ana pencerenin numarasını döndürmez. Ve nesnenin bulunduğu pencerenin numarası (0,1,2...) veya nesne yoksa -1.

Merak ediyorum, "-1" yanlış mı doğru mu?

Bool türü, sayısal gösterimi sırasıyla 1 veya 0 olan true (true) veya false (false) mantıksal değerlerini depolamak için tasarlanmıştır .
 
MakarFX # :

ObjectFind() işlevi, ana pencerenin numarasını döndürmez. Ve nesnenin bulunduğu pencerenin numarası (0,1,2...) veya nesne yoksa -1.

Nesnenin ana pencerede bulunduğu belirli bir durumdan bahsettim. Tartışmayın ve bunu yapmayı öğrenmeyin ...

 

MakarFX # :

Merak ediyorum, "-1" yanlış mı doğru mu?

Bool türü, sayısal gösterimi sırasıyla 1 veya 0 olan true (true) veya false (false) mantıksal değerlerini depolamak için tasarlanmıştır .

false yalnızca 0'dır. Diğer her şey doğrudur

 
Alexey Viktorov # :

false yalnızca 0'dır. Diğer her şey doğrudur

"-1" de doğru mu? Zaten kontrol edildi. Yalnızca "0" geçerlidir - yanlış
 
Alexey Viktorov # :

Hayır Makar, şuna benziyor:

ObjectFind() işlevi, ana pencerenin numarasını döndürür. Ve bu sayı 0'a eşittir. Öte yandan, 0 == false, eğer fonksiyon 0 döndürürse, false döndürmekle aynı olur. Tabii ki bunu uygulamazdım, eğer fonksiyon birdenbire -1 döndürürse yani bir hata varsa, o zaman nesnenin konumunu ana pencerede değil de düşünebiliriz. Evet, artı her şeye, hangi düzeltmelerin yapılacağını asla bilemezsiniz...

Genel olarak, tartışmayın ve bunu yapmayı öğrenmeyin ...

Bunun yapmaya değmediğini anlıyorum ama estetik uğruna yapmak zorunda kaldım (== 0 her durumda çirkin görünüyor). Ve nesneye sadece ana pencerede ihtiyacım var.

 
Nerd Trader # :

Bunun yapmaya değmediğini anlıyorum ama estetik uğruna yapmak zorunda kaldım (== 0 her durumda çirkin görünüyor). Ve nesneye sadece ana pencerede ihtiyacım var.

O zaman yap

 if ( ObjectFind ( "Buy Stop" ) || ObjectFind ( "not allowed" ))

nesne yoksa, "-1" alırsınız, yani. doğru

 
==0 seçeneğiyle değiştirildi.

Sorun: Grafikte düğmeye basıldığında sarı ve gri çizgiler ("Satmayı Durdur" ve "izin verilmiyor") sürekli olarak oluşturuluyor ve titriyor. Ayrıca, ObjectCreate() sürekli olarak true döndürür ve false değil, yani başka bir penceredeymiş gibi oluşturur ve bu titremeyi açıklayabilir ... ancak pencere yalnızca ana penceredir ve yeşil bir çizgiye sahiptir ("Satın Al Durdur" ) kırmızıda olduğu gibi ("Kayıp Durdur") hiçbir anormallik gözlemlenmez.

 void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam)
{
     datetime static dt          = 0 ;
     double    static price       = 0 ;
     int        static window      = 0 ;
     string    static line_name;

   if (id== CHARTEVENT_OBJECT_CLICK ){
    ...
     //Нажатие на SO в зависимоти от расположения панели создаёт линию
     if (sparam== "Button Stop Order" ){
       if (panel_position == 1 || panel_position == 2 ){
        line_name = "Buy Stop" ;
        CreateLine(line_name, clrGreen );
      }
       if (panel_position == 3 || panel_position == 4 ){
        line_name = "Sell Stop" ;
        CreateLine(line_name, clrYellow );
      }
    }
     //Нажатие на линию удаляет её и создаёт красную
     if (sparam== "Buy Stop" || sparam== "Sell Stop" ){
       ObjectDelete (line_name);
      line_name = "Stop Loss" ;
      CreateLine(line_name, clrRed );
    }
     //Нажатие на красной линии удаляет её и отжимает кнопку
     if (sparam== "Stop Loss" ){
       ObjectDelete (line_name);
      button_name = "Button Stop Order" ;
      ms= GetMicrosecondCount ();
    }
  }
   //Если кнопка SO нажата, то линия будет следовать за курсором
   if ( ObjectGetInteger ( 0 , "Button Stop Order" , OBJPROP_STATE )){
     int x = ( int )lparam;
     int y = ( int )dparam;
     //Переведём координаты X, Y в дату и время
     if ( ChartXYToTimePrice ( 0 ,x,y,window,dt,price)){
       //Линия меняет цвет с зелёного на желтый
       if (price < Bid){
         if ( ObjectFind ( "Buy Stop" ) == window || ObjectFind ( "not allowed" ) == window){
           ObjectDelete (line_name);
          line_name = "Sell Stop" ;
          CreateLine(line_name, clrYellow );
        }      
      }
       //Линия меняет цвет с желтого на зелёный
       if (price > Ask){
         if ( ObjectFind ( "Sell Stop" ) == window || ObjectFind ( "not allowed" ) == window){
           ObjectDelete (line_name);
          line_name = "Buy Stop" ;
          CreateLine(line_name, clrGreen );
        }
      }
       //Линия меняет цвет на серый если в зоне спреда
       if (price > Bid && price < Ask){
         if ( ObjectFind ( "Buy Stop" ) == window || ObjectFind ( "Sell Stop" ) == window){
           ObjectDelete (line_name);
          line_name = "not allowed" ;
          CreateLine(line_name, clrGray );
        }
      }
       //Прикрепляем линию к курсору
       if (id == CHARTEVENT_MOUSE_MOVE )
         if ( ObjectMove ( 0 ,line_name, 0 , 0 ,price))
           ChartRedraw ( 0 );
    }
  } else if ( ObjectFind (line_name) == window) Print ( ObjectDelete (line_name));
   //Если нажать Esc то удалится линия и кнопка отожмется
   if (id == CHARTEVENT_KEYDOWN && lparam == 27 ){
      button_name = "Button Stop Order" ;
      ms= GetMicrosecondCount ();
  }
}
//----------------------------------------------------------------------
void CreateLine( const string name, const color clr)
{
   Print ( ObjectCreate ( 0 , name, OBJ_HLINE , 0 , 0 , 0 ));
   ObjectSetInteger ( 0 , name, OBJPROP_COLOR , clr);
   ObjectSetInteger ( 0 , name, OBJPROP_STYLE , 3 ); 
}
 
MakarFX # :

O zaman yap

nesne yoksa, "-1" alırsınız, yani. doğru

Denedim, istisnanın çalışması için yalnızca nesnelerin adını (ters çevirme) değiştirmem gerekiyor. Ancak bu şekilde çizgiler hiç oluşturulmaz.

 if ( ObjectFind ( "Sell Stop" ) || ObjectFind ( "Stop Loss" )){
   ObjectDelete (line_name);
  line_name = "Sell Stop" ;
  CreateLine(line_name, clrYellow );
} 
 
Nerd Trader # :

Denedim, sadece nesnelerin adını değiştirmem gerekiyor. Ancak bu şekilde çizgiler hiç oluşturulmaz.

Ben de sen de yarat, sadece fiyat "0"
 
MakarFX # :
Ben de sen de yarat, sadece fiyat "0"
Evet, gerçekten, zaten 8 parça var, ancak grafikte görünmüyor, 0 fiyatının önemli olmadığı gerçeği, satır hala imlece yapışıyor (onu takip ediyor)