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

 
Ilya Prozumentov :

Bu sadece yazarın kendisi burada neler olduğunu anlayacaktır. OnTick() taşımadan daha iyi kod

Yazarla yazıştım. Yardım etmedim. Kendisi zar zor geziniyor: " Şartlarınızı buradan kontrol edin, size hiç yardımcı olmayacağım.

Kodun kendi kısmı için cevap verebilirim (!) ve cevap verebilirim, ancak sizinki için değil ".

İşte OnTick() kodu:

 void OnTick ()
  { RefreshRates ();
//---
   string TextDisplay= "" ;

/*  Check News   */
   bool trade= true ; string nstxt= "" ; int NewsPWR= 0 ; datetime nextSigTime= 0 ;
   if (MidleNews || HighNews) 
     { RefreshRates ();
       if (SourceNews== 0 )
        { // Investing
         RefreshRates ();
         if (CheckInvestingNews(NewsPWR,nextSigTime)){ trade= false ; } // news time
        }
     }
   if (trade)
     { // No News, Trade enabled
      nstxt= "No News, Waiting" ;
       if ( ObjectFind ( 0 , "NS_Label" )!=- 1 ){ ObjectDelete ( 0 , "NS_Label" ); }

        } else { // waiting news , check news power
       color clrT=LowColor;
       if (NewsPWR> 3 )
        {
         nstxt= "Waiting Non-farm Payrolls News" ;
         clrT = HighColor;
           } else {
         if (NewsPWR> 2 )
           {
            nstxt= "Waiting High News" ;
            clrT = HighColor;
              } else {
             if (NewsPWR> 1 )
              {
               nstxt= "Waiting Midle News" ;
               clrT = MidleColor;
                 } else {
               nstxt= "Waiting Low News" ;
               clrT = LowColor;
              }
           }
        }
       // Make Text Label
       if (nextSigTime> 0 ){ nstxt=nstxt+ " " + TimeToString (nextSigTime, TIME_MINUTES ); }
       if ( ObjectFind ( 0 , "NS_Label" )==- 1 )
        {
         LabelCreate( StringConcatenate (nstxt),clrT);
        }
       if ( ObjectGetInteger ( 0 , "NS_Label" , OBJPROP_COLOR )!=clrT)
        {
         ObjectDelete ( 0 , "NS_Label" );
         LabelCreate( StringConcatenate (nstxt),clrT);
        }
     }
   nstxt= "\n" +nstxt;
/*  End Check News  */ 


   if (trade && oppoz)  
     { // No news and Trade Allowed
     Fun_New_Bar();
            
       if (New_Bar)      
     { 
       Alert ( "Открыть позицию" ); ManageTrade(); // Your trade functions
     }
     oppoz= false ;
     }

   TextDisplay=TextDisplay+nstxt;
   Comment (TextDisplay);

   return ;
  }
 
Alekseu Fedotov :

değiştirmeyi dene

burada bu hatta

İşe yaradı gibi görünüyor! 20 dakikadır mesaj gelmedi. Bakalım saat 13.00'te gelen haberlere nasıl tepki verecek.

 
Artyom Trishkin :
nan - NaN - Sayı değil - sayı değil. Z puanı hesaplamasındaki sayıları normalleştirmeyi deneyin

Teşekkürler, yardımcı oldu.

MathCeil() işlevinin çalışmaması garip. Helped NormalizeDouble() basamak - == Z-skoru = -92233720368547.77 . Gösterge harika, ancak denge neredeyse değişmiyor




 
Alekseu Fedotov :

değiştirmeyi dene

burada bu hatta

İyi! Her şey ayarlara göre çalıştı, arıza yok. Teşekkür ederim!

Basit çözümleri ve basit kodları seviyorum.

Ayrıca ilgilenen ve tam bir meslekten olmayana yardım etmeye çalışan herkese teşekkürler.

 

Fiyat etiketini Teklife bağlıyorum, iyi çalıştığını görüyorum, başka bir grafiğe geçiyorum ve dikey koordinatın hemen yaklaşık 15 piksel kaydığını görüyorum.

Geri dönüyorum, "kaçtı" etiketi ve bir sonraki onay işaretine kadar yerinde değil, ardından "Anavatan'a" dönüyor. Bu neyden olabilir?




 //+------------------------------------------------------------------+
//|                                              !_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 Bid = SymbolInfoDouble ( Symbol (), SYMBOL_BID );
int width = ( int ) ChartGetInteger ( 0 , CHART_WIDTH_IN_PIXELS , 0 );   //ширина графика

   ObjectCreate ( 0 , objname, OBJ_LABEL , 0 , 0 , 0 );
   
   ObjectSetString ( 0 , objname, OBJPROP_TEXT , DoubleToString ( Bid , _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 (), Bid , x, y); 
   ObjectSetInteger ( 0 , objname, OBJPROP_XDISTANCE , width- 60 );

   Print ( "y=" , y, "  " , ObjectGetInteger ( 0 ,objname, OBJPROP_TIME , 0 ));

   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[])
  {


int x2,y2;
double Bid2 = SymbolInfoDouble ( Symbol (), SYMBOL_BID );


           ChartTimePriceToXY ( 0 , 0 , TimeCurrent (), Bid2, x2, y2); 
      
         ObjectSetInteger ( 0 , objname, OBJPROP_YDISTANCE , y2);

   Print ( "x2=" , x2, "  y2=" , y2, "  " , "  Bid=" ,Bid2);

   return (rates_total);
  }


void OnDeinit ( const int reason) 
   { 

       ObjectDelete ( 0 ,objname);
   } 
 
 
 
psyman :

Fiyat etiketini Teklife bağlıyorum, iyi çalıştığını görüyorum, başka bir grafiğe geçiyorum ve dikey koordinatın hemen yaklaşık 15 piksel kaydığını görüyorum.

Geri dönüyorum, "kaçtı" etiketi ve bir sonraki onay işaretine kadar yerinde değil, ardından "Anavatan'a" dönüyor. Bu neyden olabilir?

Çünkü grafik sadece bir sonraki tikte yeniden çizilir . Ancak grafiğin zorla yeniden çizilmesini şimdi ayarlamak tehlikelidir. Önceki iki MT5 yapısında, frenler çocuklar için değildi. MT4'te olduğu gibi bilmiyorum, kontrol etmem gerekiyor.

 
Alexey Viktorov :

Çünkü grafik yalnızca bir sonraki tikte yeniden çizilir . Ancak grafiğin zorla yeniden çizilmesini şimdi ayarlamak tehlikelidir. Önceki iki MT5 yapısında, frenler çocuklar için değildi. MT4'te olduğu gibi bilmiyorum, kontrol etmem gerekiyor.

Yani bu bir sonuç, yer değiştirmenin sebebinin ne olduğu belli değil.

Yatay olarak aynı şey oluyor ve en tatsız olan şey etiketin fiyata uyması, bu durumu analiz etmek için, kodun çoğunu kestim.

Bu durumdan nasıl çıkılır?

 
psyman :

Yani bu bir sonuç, yer değiştirmenin sebebinin ne olduğu belli değil.

Yatay olarak aynı şey oluyor ve en tatsız olan şey etiketin fiyata uyması, bu durumu analiz etmek için, kodun çoğunu kestim.

Bu durumdan nasıl çıkılır?

CHARTEVENT_CHART_CHANGE olayı ile aynı şekilde etiketin koordinatlarını güncellemeye çalışın

 if (id== CHARTEVENT_MOUSE_MOVE || id== CHARTEVENT_CHART_CHANGE )
 
Ilya Prozumentov :

CHARTEVENT_CHART_CHANGE olayında etiket koordinatlarını aynı şekilde güncellemeyi deneyin


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ı?

 
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ı?

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

Neden: