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

 
Taras Slobodyanik:

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


Explique de qué se trata.

Lo he añadido a OnInit después de crear una etiqueta

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


Pero el resultado es el mismo.

 
psyman:


Explique de qué se trata.

Lo he añadido a OnInit después de crear la etiqueta


pero el resultado es el mismo.

necesito ver el código, lo que hay...

ps. el código anterior funciona bien (sin fallos)
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


oops. aunque he sustituido la variable Bid por Bid0

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2019.01.17
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Buenas tardes, ¿cómo escribo la orden para que se abra cuando el precio toque un muvingio?
 
Ivan Rozhkov:
Buenas tardes, ¿cómo escribo la orden para que se abra cuando el precio toque un muvingio?
if ((prev_bid>ma && curr_bid<=ma) || (prev_bid<ma && curr_bid>=ma))
   //открывается ордер
 
Taras Slobodyanik:

Tengo que mirar el código para ver qué hay...

psst. El código anterior funciona bien (sin fallos)
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


oops. aunque he sustituido la variable Bid por Bid0

Olvidé añadir que este soy yo probando en el 5. En MT4 el marcador vertical se mueve rápidamente en su lugar cuando se abre el gráfico, sin necesidad de esperar a un tick o mover el ratón. Unas cuantas veces hubo fallos con el desplazamiento horizontal, conseguidos sólo con la recompilación del indicador.

 
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?


La impresión me muestra un mensaje si cambio una ventana de gráfico, tanto hacia adelante como hacia atrás (estoy en MT4, pero no está escrito en los documentos de MT4 que el cambio de gráfico puede ser capturado como un eventoCHARTEVENT_CHART_CHANGE)

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

Pero sí, sigue siendo un método de muleta. Tenemos que averiguar por qué la coordenada Y es diferente cuando se cambia a otro gráfico. Pero mirando el código, podemos concluir que elChartTimePriceToXY da resultados diferentes por alguna razón.

 
psyman:

Se me olvidó añadir que estoy probando esto en el 5. En MT4, el marcador vertical se mueve rápidamente en su lugar cuando se abre el gráfico, sin necesidad de esperar un tick o mover el ratón. Unas cuantas veces hubo fallos con el desplazamiento horizontal, conseguidos sólo con la recompilación del indicador.

Bueno, en el Five hay muchas "características" - desde la cola en el gráfico hasta la creación de barras a partir de los minutos, y la activación del deinit anterior después del actual)

Así que hay que comprobar las barras/el gráfico/los objetos, en qué momento se produce un error y corregirlo.

 
Taras Slobodyanik:


en general - hay que comprobar las barras/gráficos/objetos - en qué momento se produce un error y corregirlo.


¿Cómo hacerlo, por dónde empezar?

 
psyman:


¿Cómo hacerlo, por dónde empezar?

hacer una impresión en todas partes, es decir, imprimimos la oferta (también se puede imprimir la fecha actual) en oninit y luego en el cálculo también...
Puedo telepatear que la historia no se construye inmediatamente y las barras aparecen más tarde

 
Taras Slobodyanik:

hacer una impresión en todas partes, es decir, en oninit imprimir la oferta (también puede imprimir la fecha actual) y luego al calcular también...
Telepateo que esta historia no tiene tiempo de construirse inmediatamente y las barras aparecen más tarde

Para el siguiente código, una historia en imágenes:

//+------------------------------------------------------------------+
//|                                              !_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);
   } 
 
 


Desconectada la red, añadiendo un indicador

Paso al siguiente gráfico


y2 cambió de valor, vuelvo


y2 ha devuelto su valor, pero el marcador cuenta con el valor "desaparecido". Hago girar la rueda del ratón.

El marcador vuelve a estar en su sitio.

Razón de la queja: