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

 
Taras Slobodyanik :

OnInit'te değişkenlerin başlatılmasını yapın (nesnelerin yeniden çizilmesi dahil)


Ne hakkında konuştuğunu açıkla.

Etiket oluşturulduktan sonra OnInit'e eklendi

     ObjectSetInteger ( 0 , objname, OBJPROP_YDISTANCE , y);
     ChartRedraw ();


ancak sonuç aynı.

 
psyman :


Ne hakkında konuştuğunu açıkla.

Etiket oluşturulduktan sonra OnInit'e eklendi


ancak sonuç aynı.

koda bakmam lazım...

not. yukarıdaki kod iyi çalışıyor (herhangi bir aksaklık görmüyorum)
(https://www.mql5.com/en/forum/160683/page739#comment_10290585)


pps. Bid değişkenini Bid0 ile değiştirmeme rağmen

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2019.01.17
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
İyi günler nasıl yazayım ki taşınma fiyatına dokunulduğunda emir açılsın?
 
Ivan Rozhkov :
İyi günler nasıl yazayım ki taşınma fiyatına dokunulduğunda emir açılsın?
 if ((prev_bid>ma && curr_bid<=ma) || (prev_bid<ma && curr_bid>=ma))
   //открывается ордер
 
Taras Slobodyanik :

koda bakmam lazım...

not. yukarıdaki kod iyi çalışıyor (herhangi bir aksaklık görmüyorum)
(https://www.mql5.com/en/forum/160683/page739#comment_10290585)


pps. Bid değişkenini Bid0 ile değiştirmeme rağmen

5-ke'de test ettiğimi eklemeyi unuttum. MT4'te, bir grafik açılırken etiket gerçekten dikey olarak yerine hareket eder, bir onay işareti beklemeye veya fareyi hareket ettirmeye gerek yoktur. Birkaç kez yatay yer değiştirme ile ilgili aksaklıklar oldu, sadece göstergeyi yeniden derleyerek üstesinden gelmeyi başardık.

 
psyman :


Denedim, etiketin dönmesi için fareyi hareket ettirmeniz gerekiyor. Bu aynı koltuk değneği, sadece diğer yandan :-)

Ve CHARTEVENT_CHART_CHANGE için çizelgeler arasında geçiş yapmak bir olay değildir.

Bu anomalinin üstesinden nasıl gelineceğini bilen var mı?


grafik penceresini değiştirirsem, her ikisi de anahtarın ters yönünde (gerçekten MT4'teyim, ancak MT4 rıhtımlarında, grafiği değiştirmenin bir olay olarak yakalanabileceği yazılı değil) CHARTEVENT_CHART_CHANGE )

 void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
   if (id== CHARTEVENT_CHART_CHANGE ) Print ( "graph" );
}

Ama evet, hala bir koltuk değneği yöntemi. Başka bir grafiğe geçtiğinizde Y koordinatının neden farklı olduğuna bakmanız gerekir. Ancak koda bakıldığında, bu ChartTimePriceToXY'nin bir nedenden dolayı farklı bir sonuç ürettiği sonucuna varılıyor.

 
psyman :

5-ke'de test ettiğimi eklemeyi unuttum. MT4'te, bir grafiği açarken etiket gerçekten dikey olarak yerine hareket eder, bir onay işareti beklemeye veya fareyi hareket ettirmeye gerek yoktur. Birkaç kez yatay yer değiştirme ile ilgili aksaklıklar oldu, sadece göstergeyi yeniden derleyerek üstesinden gelmeyi başardık.

Pekala, ilk beşte bir çok "özellik" var - grafik kuyruğundan dakikalardan çubuklar oluşturmaya ve mevcut başlatmadan sonra önceki tanımlamayı tetiklemeye kadar)

genel olarak - çubukları / çizelgeyi / nesneleri kontrol etmeniz gerekir - hatanın hangi noktada oluştuğunu ve düzeltin.

 
Taras Slobodyanik :


genel olarak - çubukları / çizelgeyi / nesneleri kontrol etmeniz gerekir - hatanın hangi noktada oluştuğunu ve düzeltin.


Nasıl yapılır, nereden başlamalı?

 
psyman :


Nasıl yapılır, nereden başlamalı?

her yerde bir baskı yapın, yani onit'te teklifi yazdırıyoruz (geçerli tarihi de kullanabilirsiniz) ve sonra hesaplarken de ...
Bu hikayenin hemen oluşturulacak zamanı olmadığını ve çubukların daha sonra ortaya çıktığını telepati ediyorum.

 
Taras Slobodyanik :

her yerde bir baskı yapın, yani onit'te teklifi yazdırıyoruz (geçerli tarihi de kullanabilirsiniz) ve sonra hesaplarken de ...
Bu hikayenin hemen oluşturulacak zamanı olmadığını ve çubukların daha sonra ortaya çıktığını telepati ediyorum.

Aşağıdaki kod için resimlerdeki hikaye:

 //+------------------------------------------------------------------+
//|                                              !_clr_indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window


string objname= "Bid" ;
input color Bid_color = clrCrimson ;

int OnInit ()
  {

int x,y;
double Bid0 = SymbolInfoDouble ( Symbol (), SYMBOL_BID );
int width = ( int ) ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS , 0 );   //ширина графика



         Print ( "1 Bid0 = " , Bid0,   " x = " , x, " y = " , y, " TimeCurrent()=" , TimeCurrent () );

   ObjectCreate ( 0 , objname, OBJ_LABEL , 0 , 0 , 0 );
   
   ObjectSetString ( 0 , objname, OBJPROP_TEXT , DoubleToString (Bid0, _Digits - 1 ));
         ObjectSetInteger ( 0 , objname, OBJPROP_FONTSIZE , 12 );
         ObjectSetInteger ( 0 , objname, OBJPROP_COLOR , Bid_color);
         ObjectSetString ( 0 , objname, OBJPROP_FONT , "Verdana" );

         ChartTimePriceToXY ( 0 , 0 , TimeCurrent (), Bid0, x, y);
         Print ( "2 Bid0 = " , Bid0,   " x = " , x, " y = " , y, " TimeCurrent()=" , TimeCurrent () );
         
         ObjectSetInteger ( 0 , objname, OBJPROP_XDISTANCE , width- 60 );

   ObjectSetInteger ( 0 , objname, OBJPROP_YDISTANCE , y);

   

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {

return (rates_total);

  }

void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam) 
  { 

int x2,y2;
double Bid2 = SymbolInfoDouble ( Symbol (), SYMBOL_BID );
double   cprice;
datetime ctime;
int       cwindow= 0 ;



if (id== CHARTEVENT_CHART_CHANGE ) 
   {
   



           ChartTimePriceToXY ( 0 , 0 , TimeCurrent (), Bid2, x2, y2); 
      
       Print ( "5 Bid2 = " , Bid2,   " x2 = " , x2, " y2 = " , y2, " TimeCurrent2()=" , TimeCurrent () );
      
         ObjectSetInteger ( 0 , objname, OBJPROP_YDISTANCE , y2);
   
   ChartXYToTimePrice ( 0 ,x2,x2,cwindow, ctime, cprice);
   

   }



  }



void OnDeinit ( const int reason) 
   { 

       ObjectDelete ( 0 ,objname);
   } 
 
 


Ağ bağlantısı kesildi, bir gösterge eklendi

Sonraki grafiğe geç


y2 değeri değişti, geri dönüyorum


y2 değerini döndürdü, ancak etiket "sol" değere göre hesaplandı! Fare tekerleğini döndürmek

Etiket geri geldi!