¡Pide! - página 21

 
billworld2:
¿Existe una forma de eliminar objetos basándose en una cadena de texto seleccionada dentro del nombre del objeto?

Este es el ejemplo:

datetime currentDay = StrToTime(Year()+". "+Month()+". "+Day()+" 00.00");

for(int i=0;i<ObjectsTotal();i++)

{

string name = ObjectName(i);

if( ObjectGet(name,OBJPROP_TIME1) < currentDay && ObjectGet(name,OBJPROP_TIME2) < currentDay && ObjectGet(name,OBJPROP_TIME3) < currentDay)

{

ObjectDelete(ObjectName(i));

return (false);

}

}

return(true);

 
billworld2:
Uno de mis proyectos de aprendizaje es ir sobre la personalización de la tester.tpl que gobierna la opción de visualización de gráficos para el Probador de Estrategias. Encuentro que el estilo de gráfico por defecto es muy difícil de visualizar. Así que creé una nueva plantilla y luego construí un script para reemplazar todas las flechas por flechas más atractivas.

Sin embargo, también me gustaría tomar la información de los nombres de las flechas y mostrarla como texto en el gráfico. Los nombres de las flechas incluyen cosas como "#62 comprar" o "73 vender cerrar". De esta manera usted puede mirar el gráfico y ver exactamente cuando un comercio en particular # se introduce / sale. No sé por qué esto no está incluido por defecto con el Probador de Estrategias como lo está con otras plataformas (por ejemplo, TradeStation).

De todos modos, me gustaría coger el texto en cuestión e insertar nuevos objetos de texto justo debajo de las flechas existentes en el gráfico. Pero, no estoy averiguando cómo lograr esto.

¿Cómo puedo hacer esto?

Gracias

Bill

Bueno, puedes escribir un script o una función que lea la información de la flecha y haga una etiqueta de texto debajo de ella. Luego ejecutar el script cada vez que una nueva flecha se dibuja. O simplemente colocar la función al final de la función principal de la ea. No sé por qué esta información no es estándar en Metatrader, pero es simple para el código de ese tipo de funcionalidad.

 
Kalenzo:
Deberías leer sobre las funciones de Fecha y Hora, y usar la función iBarShift para obtener el desplazamiento de la primera barra del mes especificado en el marco de tiempo especificado.

Sé que debe ser trivial para ti. Sólo que aún no lo consigo siguiendo la limitada documentación (no hay muchos ejemplos). ¿Podría usted proporcionar un ejemplo de cómo hacer esto?

Gracias

Bill

 
Kalenzo:
Bueno, puedes escribir un script, o una función que lea la información de la flecha y haga una etiqueta de texto debajo de ella. Luego ejecutar el script cada vez que se dibuje una nueva flecha. O simplemente colocar la función al final de la función principal de la ea. No sé por qué esta información no es estándar en Metatrader, pero es simple para el código de ese tipo de funcionalidad.

Gracias, pero, estoy atascado específicamente en cómo codificar el script. Si usted tiene tiempo para proporcionar un breve ejemplo, que sería muy apreciada.

Gracias de nuevo.

Bill

 

No estoy seguro de entender. Para ser claro, estoy buscando una manera de hacer una coincidencia de subcadena basada en el nombre de un objeto. Digamos, por ejemplo, que tengo un grupo de objetos con la cadena "-206" en ellos (junto con otro texto). Quiero localizar y eliminar todos los objetos que contienen "-206" en su nombre.

Lo que me confunde en el ejemplo siguiente es la asociación con OBJPROP_TIME1, OBJPROP_TIME2 y OBJPROP_TIME3. Sé que los objetos pueden tener hasta tres coordenadas de tiempo. No estoy siguiendo cómo eso encaja con lo que estoy tratando de hacer.

Kalenzo:
Este es el ejemplo:

datetime currentDay = StrToTime(Year()+". "+Month()+". "+Day()+" 00.00");

for(int i=0;i<ObjectsTotal();i++)

{

string name = ObjectName(i);

if( ObjectGet(nombre,OBJPROP_TIME1) < día actual && ObjectGet(nombre,OBJPROP_TIME2) < día actual && ObjectGet(nombre,OBJPROP_TIME3) < día actual)

{

ObjectDelete(ObjectName(i));

return (false);

}

}

return(true);
 
billworld2:
No estoy seguro de entender. Para ser claro, estoy buscando una manera de hacer una coincidencia de subcadena basada en el nombre de un objeto. Digamos, por ejemplo, que tengo un grupo de objetos con la cadena "-206" en ellos (junto con otro texto). Quiero localizar y eliminar todos los objetos que contengan "-206" en su nombre. Lo que me confunde en el ejemplo siguiente es la asociación con OBJPROP_TIME1, OBJPROP_TIME2 y OBJPROP_TIME3. Sé que los objetos pueden tener hasta tres coordenadas de tiempo. No entiendo cómo eso encaja con lo que estoy tratando de hacer.

Ok , prueba esto

for(int i=0;i<ObjectsTotal();i++)

{

string name = ObjectName(i);

if(StringSubstr( nombre, 0, 3)==206)

{

ObjectDelete(ObjectName(i));

}

}

Si las 3 primeras letras del nombre del objeto son 206 entonces el objeto será borrado

 
billworld2:
Gracias, pero, estoy atascado específicamente en la forma de codificar la secuencia de comandos. Si tienes tiempo para dar un ejemplo corto, sería muy apreciado.

Gracias de nuevo.

Bill

primero declare la variable global (global para el script) int objectCount;

entonces al final del ea procesar todos los objetos (u puede por ejemplo buscarlos por nombre)

for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++)

{

//entonces si la etiqueta del objeto no existe dibujarla, digamos que tomaremos el

//nombre de la flecha existente y le añadimos la etiqueta L, para identificarla

if(ObjectFind(ObjectName(i)+"L")== -1)

{

ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i),(OBJPROP_PRICE1+3*Point));

// y ya está

}

}

Esto es solo un ejemplo, no tengo tiempo de comprobarlo por posibles bugs pero esto debería funcionar, y ya sabes el camino correcto.

 

De acuerdo. Lo tengo. En realidad necesitaba usar StringFind(). Gracias por las indicaciones.

#property show_inputs

extern string stringname="blah";

//+------------------------------------------------------------------+

//| función de inicio del programa de scripting ||

//+------------------------------------------------------------------+

int inicio()

{

//----

for(int i=0;i<ObjectsTotal();i++)

if(StringFind(ObjectName(i),stringname,0)>0)

{

ObjectDelete(ObjectName(i));

}

Kalenzo:
Ok , prueba esto:

for(int i=0;i<ObjectsTotal();i++)

{

string name = ObjectName(i);

if(StringSubstr( nombre, 0, 3)==206)

{

ObjectDelete(ObjectName(i));

}

}

Si las 3 primeras letras del nombre del objeto son 206, el objeto será eliminado
 

Gracias, pero esto no funciona. Primero, cambié "i>=ObjetosTotal" por "i<=ObjetosTotal" (error tipográfico). Entonces, me di cuenta de que está creando otro objeto flecha donde queremos crear un nuevo objeto de texto que incluye el nombre del objeto flecha. De todos modos, el código de abajo está creando un montón de flechas (alrededor de 50) todas superpuestas en las mismas coordenadas.

Todavía estoy perdido en esto. Si usted tiene la oportunidad de echar otro vistazo, que sería muy apreciada. Para ser claro, estoy buscando crear un nuevo objeto de texto que se posiciona debajo de cada objeto de flecha existente donde la descripción de texto del objeto de texto es igual al nombre del objeto de flecha.

Proyecto de ley

Kalenzo:
primero declarar la variable global (global para el script) int objectCount;

entonces al final del proceso ea todos los objetos (u puede por ejemplo buscarlos por nombre)

for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++)

{

//entonces si la etiqueta del objeto no existe dibujarla, digamos que tomaremos el

//nombre de la flecha existente y le añadimos la etiqueta L, para identificarla

if(ObjectFind(ObjectName(i)+"L")== -1)

{

ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i),(OBJPROP_PRICE1+3*Point));

// y ya está

}

}

Esto es sólo un ejemplo, no tengo tiempo para comprobar los posibles errores pero esto debería funcionar, y ahora sabes la forma correcta.
 

Eliminación de objetos basada en el contenido

¿Existe una forma de borrar objetos basada en una cadena de texto seleccionada dentro del nombre del objeto?

Editado: Lo he descubierto con el puntero de Kalenzo. La respuesta está en el post #212.

Razón de la queja: