Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 739

 
Ilya Prozumentov:

Es el autor el que tiene que resolverlo. Mejor trae el código de OnTick()

Me puse en contacto con el autor. Yo no ayudé. Él mismo apenas sabe qué hacer: "Comprueba tus condiciones aquí, no te ayudaré".

Puedo (!) ser responsable de mi parte del código, pero no puedo ser responsable de la tuya".

Aquí está el código OnTick():

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:

Intenta sustituir

con esta línea.

¡Creo que está funcionando! Hace 20 minutos que no hay ningún mensaje. Vamos a ver cómo reacciona a la noticia a la 1 de la tarde.

 
Artyom Trishkin:
El número es NaN - Not a Number - No es un número. Intenta normalizar los números en el cálculo del recuento Z

Gracias, eso ayudó.

Es extraño queMathCeil() no funcione. NormalizeDouble() número ayudado - == Z-score es igual a = -92233720368547.77 . La cifra es impresionante, pero el balance es casi igual




 
Alekseu Fedotov:

Intenta sustituir

con esta línea.

¡Oh, eso es genial! Todo ha funcionado según la configuración, sin fallos. Gracias.

Me encantan las soluciones sencillas y los códigos simples.

Gracias también a todos los que prestaron atención e intentaron ayudar a un completo aficionado.

 

Adjunto el marcador de precios a la Oferta, observo que funciona bien, cambio a otro gráfico y veo que la coordenada vertical se desplaza inmediatamente unos 15 píxeles.

Vuelvo, el marcador se "escapó" y no está en su sitio hasta el siguiente tick, entonces vuelve "a la patria". ¿A qué puede deberse?




//+------------------------------------------------------------------+
//|                                              !_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:

Adjunto el marcador de precios a la Oferta, observo que funciona bien, cambio a otro gráfico y veo que la coordenada vertical se desplaza inmediatamente unos 15 píxeles.

Vuelvo, el marcador se "escapó" y no está en su sitio hasta el siguiente tick, entonces vuelve "a la patria". ¿A qué puede deberse?

Porque el gráfico sólo se redibuja en el siguiente tick. Pero es peligroso establecer un rediseño forzado del gráfico ahora. Las dos versiones anteriores de MT5 no eran frenos infantiles. No sé cómo es en MT4, debería comprobarlo.

 
Alexey Viktorov:

La situación puede resolverse debido aque el gráfico se vuelve a dibujar sólo en el siguiente tick. Pero el rediseño forzado del gráfico es peligroso. Las dos versiones anteriores de MT5 eran bastante complicadas. No sé cómo es en MT4, debería comprobarlo.

Esto es una consecuencia, no está claro cuál es la causa del cambio.

Lo mismo ocurre en horizontal y lo más desagradable es que el marcador se superpone al precio, he recortado gran parte del código para entender la situación.

¿Cómo salir de esta situación?

 
psyman:

Esta es la consecuencia, no está claro cuál es la causa del cambio.

Lo mismo ocurre en horizontal y lo más desagradable es que el marcador se superpone al precio, he recortado gran parte del código para entender la situación.

¿Cómo salir de esta situación?

intente actualizar las coordenadas del marcador de la misma manera y en el evento CHARTEVENT_CHART_CHANGE

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

Intente actualizar las coordenadas del marcador de la misma manera que el evento CHARTEVENT_CHART_CHANGE


Lo he probado, tienes que mover el ratón para recuperar la marca. Es la misma muleta, pero en otra mano :-)

Y el cambio entre gráficos paraCHARTEVENT_CHART_CHANGE no es un evento.

¿A alguien se le ocurre cómo superar esta anomalía?

 
psyman:


Lo he probado, tienes que mover el ratón para recuperar la marca. Es la misma muleta, pero en otra mano :-)

Y el cambio entre gráficos paraCHARTEVENT_CHART_CHANGE no es un evento.

¿A alguien se le ocurre cómo superar esta anomalía?

Hacer la inicialización de las variables en OnInit (incluyendo el redibujado de los objetos)

Razón de la queja: