asesor experto - preguntas varias - página 13

 

Puedes escribir una función así:

void DrawLabel(string name, string text, int x, int y, int fontsize=10)

Si la llama sin el valor final, se utilizará el valor por defecto, es decir, fontsize será 10

DrawLabel("MyLabel","Hello,World!",50,50); // final parameter not passed (default value used)

O puedes anular explícitamente el valor por defecto de fontsize:

DrawLabel("MyLabel","Hello,World!",50,50,24); // fontsize parameter is 24

¿Es eso lo que quieres decir?

 
honest_knave:

¿Es eso lo que quieres decir?

Tal vez mi Inglés prevenir para entender su comentario.
Gracias por tu comentario.
Si estoy entendiendo correctamente, lo entiendo así: Puedo escribir 1 función Void para Label, y puedo usarla con dos métodos como los siguientes. ( Puedo usar una función Void, para el objeto label con el parámetro del tamaño de la fuente y sin él, ¿es correcto? )

DrawLabel("MyLabel","Hello,World!",50,50);    // #1
DrawLabel("MyLabel","Hello,World!",50,50,24); // #2

Por lo tanto, me gustaría decir que pasé algunas horas para este objeto de hoja de cálculo para que el problema viene y cómo puedo resolverlo.
Así que, creo que viene de abajo del código, no de las funciones de la etiqueta, porque he tenido 2x funciones de la etiqueta, he eliminado uno de ellos, Bid y Ask indicadores de precios (precios de mercado) todavía funciona bien, pero la hoja de cálculo no funciona con la función de la etiqueta. La hoja de cálculo funciona bien sin la función Label.

Necesito compartir algo de código de la hoja de cálculo. Dudo como el código de abajo. ( Incluso - tengo que mencionar una vez más por debajo de código funciona bien cuando creo objeto de la etiqueta sin la función de la etiqueta para la hoja de cálculo )

double  spread                                                 ;
        spread       = MarketInfo  ( symbol, MODE_SPREAD ) / 10;
        spreadstring = DoubleToStr ( spread, 1           )     ;

Gracias por todo.

 

Bueno, es una buena práctica para verificar que algo que se intenta crear, realmente se crea.

Por ejemplo, cuando se trata de tamaños de pantalla, muchos usuarios utilizan diferentes resoluciones, y siempre que, por alguna razón, un objeto se crea por encima de los límites de la anchura o la altura del gráfico, el objeto no se dibuja, o desaparece.

O por ejemplo el error 4200 mostrará que el objeto que se intenta crear ya existe.

Esto es importante si usted está tratando de asignar diferentes valores a su objeto, los nuevos valores no serán asignados si la creación falla.

Por eso esas funciones devuelven un valor para que puedas comprobar si la creación ha sido exitosa o no.

Depende de ti comprobar si la función tuvo éxito o no, pero un buen codificador comprobará el resultado.

Si escribes una función void no devuelve nada por lo que no puedes comprobar el resultado analizando lo que te devuelve cuando la llamas.

Pero también puedes simplemente comprobar en la propia función y lanzar una simple alerta si algo ha ido mal.

Si haces eso entonces no verás esas alertas normalmente, pero cuando algo vaya mal, te indicará inmediatamente el problema en sí.


Para la segunda cuestión, muchas veces puedes omitir al menos algunos de los parámetros, si lo haces entonces la función asumirá los valores por defecto.

Así que a menos que usted necesita o quiere desviar de los parámetros estándar que se especifica.

El tamaño de la fuente es un buen ejemplo, cuando no se especifica simplemente se utilizará la configuración por defecto.

También hay pequeñas diferencias entre ciertos objetos y esto se puede ver al analizar los parámetros que se pasan a la función.

No todos comparten el mismo conjunto de variables por lo que es importante mirar lo que puede y lo que no puede ser pasado como una referencia.

No estoy seguro de lo que quieres hacer con el spreadstring quizás puedas explicar un poco más para qué sirve y cómo quieres usarlo ?

 
Marco vd Heijden:

No estoy seguro de lo que quieres hacer con el spreadstring quizás puedas explicar un poco más para qué sirve y cómo quieres usarlo ?

Yo uso la función de objeto de etiqueta para la oferta, la demanda, la hoja de cálculo, y así sucesivamente. Todo funciona perfectamente, sin hoja de cálculo - y he eliminado y volver a escribir, no hay buenos efectos.

Después de usar el método @honest_knave de código de errores para la descripción de errores. No veo más advertencias 4200.
Como mencioné uso'Spreadsheet' en dos lugares, #1 en Init() función - #2 en OnTick() función, pero también uso Bid, Ask en 2 lugares con 'Spreadsheet', no tienen ningún error, advertencias. Pero esta hoja de cálculo no me da ninguna advertencia, pero tampoco se actualiza.

Creación absolutamente exitosa, sin errores, sin advertencias, para cualquier objeto, en los códigos de mi EA.

No sé si soy un buen codificador o qué? ( No me considero un codificador o programador. ) Pero veo el resultado. Por lo tanto, puedo utilizar sólo Label Object ( sin función sólo para la hoja de cálculo ).

La función Void devuelve resultados para lo que quiero, también esta función crea el objeto para el valor inicial de la hoja de cálculo, pero no actualiza.



No estoy seguro de lo que quieres hacer con el spreadstring tal vez puedas explicar un poco más para qué sirve y cómo quieres usarlo ?

OK, solo quiero usarlo así: Solo quiero que me de el tamaño de la hoja de cálculo ( / Valor ), cuando abra / añada mis EA's al gráfico por ahora. Entonces voy a tratar de escribir el código para actualmente Hour Spread High / Low tamaños ( / valores ).

Gracias de antemano.

 

Bueno, también puedes almacenarlo en un array[] doble y luego comparar todos ellos para ver dónde está la menor dispersión.


double spread[];
--

ArrayResize(spread,SymbolsTotal(1),0);
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      spread[i]=MarketInfo(SymbolName(i,1),13);
     }
 

Cuando quito el código de abajo, entonces la hoja de cálculo comienza a trabajar perfecto.
Por lo tanto, sólo necesito ayuda, ¿cómo puedo escribir un buen ( / óptima ) código en lugar de ella, por favor?

{
    Print(__FUNCTION__, ": failed to create text label! Error code = ", GetLastError());
    return(false);
}

Sólo mantengo el código de abajo para la función Label Object.

if( !ObjectCreate( chart_ID, name, OBJ_LABEL, sub_window, 0, 0 ) ) 

Gracias de antemano.

( si este problema es real - espero que MetaQuotes lo arregle - porque me tomó algunas horas, ayude a otros que son nuevos en esta industria del código )

 

Elimina el "return(false)" pero mantén la sentencia Print y ejecuta tu código.

Creo que puedes obtener algunos mensajes. Creo que estás tratando de crear la etiqueta una y otra vez, en lugar de cambiar el valor.

 
honest_knave:

Elimina el "return(false)" pero mantén la sentencia Print y ejecuta tu código.

¡QUE DEMONIOS!
Esta
mierda me ha llevado unas cuantas horas, no sé qué puedo decir al respecto.
¿Puedo eliminarlo de todas mis funciones Objects?
También puedes decirme cómo funciona?

return(false);

Sólo gracias.

 
Max Enrik:

¿¡QUÉ DEMONIOS!
¿Puedo
eliminarlo de todas mis funciones Objects?

Sí, pero sería mejor mantenerlo y abordar el origen del error.

Max Enrik:

¿¡QUÉ DEMONIOS!
Además,
¿puede decirme cómo funciona?

return(false);

El operador return simplemente indica a la función que salga inmediatamente. Si la función devuelve un valor (en su caso, es un bool) también debe devolver un valor.

Te librarás de tu error (4200, ¿verdad?) si compruebas si el objeto existe antes de crearlo.

Return Operator - Operators - Language Basics - MQL4 Reference
Return Operator - Operators - Language Basics - MQL4 Reference
  • docs.mql4.com
Return Operator - Operators - Language Basics - MQL4 Reference
 
honest_knave:

Gracias por tus comentarios tan claros.

Ya lo he sustituido por tu método, como el código de abajo. ( para la función Label Object )

Era - antes de sus comentarios sobre la descripción del error:

if( !ObjectCreate( chart_ID, name, OBJ_LABEL, sub_window, 0, 0 ) )
{
    Print( __FUNCTION__, ": failed to create text label! Error code = ", GetLastError() );
    return(false);
}

// which one this code gives me error no: 4200 

después:

if( !ObjectCreate( chart_ID, name, OBJ_LABEL, sub_window, 0, 0 ) )
{
    if( errorcode !=0 ) printf( "Error %i: %s", errorcode, ErrorDescription( errorcode ) );
    return(false);
}

// prevent error no: 4200 - but was not update spreadsheet values 

Ahora - y funciona perfectamente:

if( !ObjectCreate( chart_ID, name, OBJ_LABEL, sub_window, 0, 0 ) )
{
    if( errorcode !=0 ) printf( "Error %i: %s", errorcode, ErrorDescription( errorcode ) );
    return(false); // removed this line
}

// now spreadsheet values updates, no any more error no: 4200 

Todo lo mejor para usted.