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

 

Tünaydın!

Söyleyin lütfen, kodun kendisinde kodun derlenmesini ayarlamak mümkün müdür? Teşekkür ederim.

 

Tekerleğe tıkladığınızda yorumlarda fare parametrelerini ve 4 karakterlik bir fiyat etiketini gösteriyorum.

Tekerleğe basıldığında, etiket imleçten sonra çalışır, ancak fare LC'ye basmadan tekerlek serbest bırakıldığında aynı şeyin olması mümkün değildir.

Anlamama yardım et.


 //+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
void OnInit () 
  { 
//--- включение сообщений о перемещении мыши по окну чарта 
   ChartSetInteger ( 0 , CHART_EVENT_MOUSE_MOVE , 1 ); 
//--- принудительное обновление свойств графика гарантирует готовность к обработке событий 
   ChartRedraw (); 
  } 
//+------------------------------------------------------------------+ 
//| MouseState                                                       | 
//+------------------------------------------------------------------+ 

string xlabel= "Bid" ;
input color xcolor = clrCrimson ;

string MouseState( uint state) 
  { 
   string res; 
   res+= "\nML: "    +(((state& 1 )== 1 )? "DN" : "UP" );   // mouse left 
   res+= "\nMR: "    +(((state& 2 )== 2 )? "DN" : "UP" );   // mouse right  
   res+= "\nMM: "    +(((state& 16 )== 16 )? "DN" : "UP" );   // mouse middle 
   res+= "\nMX: "    +(((state& 32 )== 32 )? "DN" : "UP" );   // mouse first X key 
   res+= "\nMY: "    +(((state& 64 )== 64 )? "DN" : "UP" );   // mouse second X key 
   res+= "\nSHIFT: " +(((state& 4 )== 4 )? "DN" : "UP" );   // shift key 
   res+= "\nCTRL: " +(((state& 8 )== 8 )? "DN" : "UP" );   // control key 
   res+= "\nBID" + DoubleToString ( SymbolInfoDouble ( Symbol (), SYMBOL_BID ), _Digits - 1 );
   return (res); 
  }
   
//+------------------------------------------------------------------+ 
//| ChartEvent function                                              | 
//+------------------------------------------------------------------+ 
void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam) 
  { 
  
int x=( int )lparam; 
int y=( int )dparam; 
datetime dt    = 0 ; 
double    price = 0 ;
int       window= 0 ;

   if (id== CHARTEVENT_MOUSE_MOVE ) 
       Comment ( "POINT: " ,( int )lparam, "," ,( int )dparam, "\n" ,MouseState(( uint )sparam)); 

   if (sparam == "16" )
      {
         
       if (! ObjectCreate ( 0 , xlabel, OBJ_LABEL , 0 , 0 , 0 ));
       //ObjectCreate(0, xlabel, OBJ_LABEL,0, 0, 0);
       ObjectSetInteger ( 0 , xlabel, OBJPROP_XDISTANCE , 100 );
           ObjectSetInteger ( 0 , xlabel, OBJPROP_YDISTANCE , dparam+ 7 );
       ChartXYToTimePrice ( 0 ,x,y,window,dt,price);
       ObjectSetString ( 0 , xlabel, OBJPROP_TEXT , DoubleToString (price, _Digits - 1 ));
      }
      
      
   /*  while(sparam !="1")
      {
         ObjectMove(0,xlabel,0,lparam,dparam+7);      
      }
  */
  }
  
void OnDeinit ( const int reason) 
   { 
       Comment ( "" );
       ObjectDelete ( 0 ,xlabel);
   } 
 
psyman :

Tekerleğe tıkladığınızda yorumlarda fare parametrelerini ve 4 karakterlik bir fiyat etiketini gösteriyorum.

Tekerleğe basıldığında, etiket imleçten sonra çalışır, ancak fare LC'ye basmadan tekerlek serbest bırakıldığında aynı şeyin olması mümkün değildir.

kaldır (yorum yap)
// if(sparam =="16")

 
Taras Slobodyanik :

kaldır (yorum yap)
// if(sparam =="16")


Ardından etiket her zaman ekrandadır, ancak yalnızca tekerleğe bastıktan sonra görünmesi gerekir.



not

Cevabınız beni düşündürdü, teşekkürler :-)

 
psyman :

Tekerleğe tıkladığınızda yorumlarda fare parametrelerini ve 4 karakterlik bir fiyat etiketini gösteriyorum.

Tekerleğe basıldığında, işaret imleçten sonra gelir, ancak fare LC'sine basmadan tekerlek serbest bırakıldığında aynı şeyin olması mümkün değildir.

Anlamama yardım et.


 if (label)
{
   //применение изменяющихся параметров(перемещение и прочее)
}
if (sparam == "16" )
{
   label = true ;
   //создание метки и настройка неизменяющихся параметров метки
}
if (sparam == "1" ) // или какой там символ у ЛК мыши
{
   label = false ;
   //удаление/скрытие метки, если нужно
}

bool tipi etiket

 
Ilya Prozumentov :

bool tipi etiket

Etiket oluşturulmadan önce taşıma yapılabilir mi?


Şimdi başka bir soru ortaya çıktı: Etiketi ekranın sağ tarafına bağlamak istiyorum, bu OnCalculate'de hesaplanıyor

 int width = ( int ) ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS , 0 );

ObjectSetInteger ( 0 , objname, OBJPROP_XDISTANCE , width); 

Print (width);

Bir nedenden dolayı, en sol konumda sona eriyor ve başka bir etiket için OnChartEvent'te aynı hesaplama doğru sonucu veriyor.

Sayı ters çevirme neden açılır?

 
psyman :

Etiket oluşturulmadan önce taşıma yapılabilir mi?


Şimdi başka bir soru ortaya çıktı: Etiketi ekranın sağ tarafına bağlamak istiyorum, bu OnCalculate'de hesaplanıyor

Bir nedenden dolayı, en sol konumda sona eriyor ve başka bir etiket için OnChartEvent'te aynı hesaplama doğru sonucu veriyor.

Sayıyı tersine çevirme neden etkinleştirildi?

etiket başlangıçta false olarak ayarlanır, bu nedenle etiketi hareket ettiren kod parçası yürütülmez. Ancak etiket oluşturulmadan önce çalıştırılsa bile hiçbir şey olmayacak, program çalışmaya devam edecek ve daha sonra oluşturulan etiket etkilenmeyecektir.

Farklı noktalardan dolayı bağlantı noktasına bakın ve sonuç farklıdır. Hemen genişlik yerine 0 yazmayı deneyebilirsiniz ve olması gerektiği gibi davranırsa bağlantı noktalarındadır.

OBJ_LABEL - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
OBJ_LABEL - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Следующий скрипт создает и перемещает на графике объект "Текстовая метка". Для создания и изменения свойств графического объекта написаны специальные функции, которые вы можете использовать "как есть" в своих собственных программах. //| Создает текстовую метку                                          |...
 
Ilya Prozumentov :

etiket başlangıçta false olarak ayarlanır, bu nedenle etiketi hareket ettiren kod parçası yürütülmez. Ancak etiket oluşturulmadan önce çalıştırılsa bile hiçbir şey olmayacak, program çalışmaya devam edecek ve daha sonra oluşturulan etiket etkilenmeyecektir.

Farklı noktalardan dolayı bağlantı noktasına bakın ve sonuç farklıdır. Hemen genişlik yerine 0 yazmayı deneyebilirsiniz ve olması gerektiği gibi davranırsa bağlantı noktalarındadır.

Bağlantı noktalarım yok, sadece dikey hareket var, yatayı ekranın genişliği boyunca bir kez ayarladım. Diğer taraftan saymak sorun değil ama aynı işlemin farklı fonksiyonlarda farklı şekilde gerçekleştirilmesi şaşırtıcı.


Ve başka bir soru daha var - Teklif etiketin metni olarak görüntüleniyorsa, bu OnChartEvent veya OnCalculate'i yapmak hangi işlevde daha uygundur?

 
novichok2018 :

Tünaydın!

Söyleyin lütfen, kodun kendisinde kodun derlenmesini ayarlamak mümkün müdür? Teşekkür ederim.

Belki de soru aptalca, çünkü kimse cevap vermiyor, ancak danışmanın çalışmasını durdurmak ve derlemeden sonra devam etmekle başka nasıl başa çıkılır?

Platform bir mesaj veriyor: dizi aralık dışı (284,17).

satır 284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh); konum 17, NomNews, cat ile bir köşeli parantez açar. küresel olarak başlatılan 0  

0 olarak 1 olarak değiştirildi, boşuna.
if(NomNews==300)break satırında değiştirildi; 300'ün üzerinde 360.000, boşuna.

Derliyorum - birkaç dakika iyi çalışıyor. Ve ne yapmalı?

 
novichok2018 :

Belki de soru aptalca, çünkü kimse cevap vermiyor, ancak danışmanın çalışmasını durdurmak ve derlemeden sonra devam etmekle başka nasıl başa çıkılır?

Platform bir mesaj veriyor: dizi aralık dışı (284,17).

satır 284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh); konum 17, NomNews, cat ile bir köşeli parantez açar. küresel olarak başlatılan 0  

0 olarak 1 olarak değiştirildi, boşuna.
if(NomNews==300)break satırında değiştirildi; 300'ün üzerinde 360.000, boşuna.

Derliyorum - birkaç dakika iyi çalışıyor. Ve ne yapmalı?

İkinci boyutta NewsArr dizisinin boyutu nedir?