//+------------------------------------------------------------------+//| Búsqueda de posición de elemento en un array ordenado |//+------------------------------------------------------------------+int CArrayObj::Search(const CObject *element) const
{
int pos;
//--- comprobarif(m_data_total==0 || !CheckPointer(element) || m_sort_mode==-1)
return(-1);
//--- búsqueda
pos=QuickSearch(element);
if(m_data[pos].Compare(element,m_sort_mode)==0)
return(pos);
//--- no encontradoreturn(-1);
}
//+------------------------------------------------------------------+
Compare() dentro del método, que es lo que hay que sobreescribir en las clases heredadas.
En la clase CBar, cuyos objetos se almacenan en la lista donde buscamos la barra deseada, el método Compare() ya está sobrescrito (al igual que en todas las clases de objetos de la biblioteca):
//+------------------------------------------------------------------+//| Compara objetos CBar entre sí por la propiedad especificada |||//+------------------------------------------------------------------+int CBar::Compare(const CObject *node,constint mode=0) const
{
const CBar *bar_compared=node;
//--- comparación de las propiedades enteras de dos barrasif(mode<BAR_PROP_INTEGER_TOTAL)
{
long value_compared=bar_compared.GetProperty((ENUM_BAR_PROP_INTEGER)mode);
long value_current=this.GetProperty((ENUM_BAR_PROP_INTEGER)mode);
return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
}
//--- comparación de las propiedades reales de dos barraselseif(mode<BAR_PROP_DOUBLE_TOTAL+BAR_PROP_INTEGER_TOTAL)
{
double value_compared=bar_compared.GetProperty((ENUM_BAR_PROP_DOUBLE)mode);
double value_current=this.GetProperty((ENUM_BAR_PROP_DOUBLE)mode);
return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
}
//--- comparación de las propiedades de las cadenas de dos barraselseif(mode<BAR_PROP_DOUBLE_TOTAL+BAR_PROP_INTEGER_TOTAL+BAR_PROP_STRING_TOTAL)
{
string value_compared=bar_compared.GetProperty((ENUM_BAR_PROP_STRING)mode);
string value_current=this.GetProperty((ENUM_BAR_PROP_STRING)mode);
return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
}
return0;
}
//+------------------------------------------------------------------+
La estructura de búsqueda de objetos en la librería está organizada correctamente.
¿Por qué falla? ¿Quizás es simplemente porque no has empezado a estudiar la biblioteca desde el principio?
¿Qué es lo que no funciona? ¿Quizá es porque no empezaste con la biblioteca desde el principio?
Hola. No me quejo, claro que no he leído todos tus artículos. Dudo que hubiera alguno. Pero las cosas simples no funcionan y ni siquiera se describe cómo deberían funcionar.
Aquí tienes elementos gráficos estándar. Por cierto, ni siquiera hay ejemplos para muchos elementos básicos (Edit en este caso).
Por lo tanto, CreateEditField() no funciona. Se bloquea en el método CreateNewStdGraphObjectAndGetCtrlObj(). Aquí:
CChartObjectsControl *CGraphElementsCollection::GetChartObjectCtrlObj(constlong chart_id)
{
//--- En un bucle a través del número total de objetos en la listafor(int i=0;i<this.m_list_charts_control.Total();i++)
{
//--- Obtener un puntero al siguiente objeto
CChartObjectsControl *obj=this.m_list_charts_control.At(i);
//--- Si no se ha podido obtener el puntero - pasar al siguienteif(obj==NULL)
continue;
//--- Si el identificador de la tabla del objeto es igual al buscado - devuelve el puntero al objeto en la listaif(obj.ChartID()==chart_id)
return obj;
}
//--- No se ha encontrado el objeto - devolver NULLreturnNULL;
}
Bueno, y m_list_charts_control está vacío... en consecuencia, no se añade nada y el método no devuelve nada.
En general, hay bastantes errores. Tengo la sensación de que nadie utiliza la biblioteca en la práctica. Tome una herramienta con el único tipo permitido de llenado IOC. No funcionará. No lo define correctamente. Tuve que editar un montón de métodos.... Usted acaba de ir a través de su método de negociación. Además, el método inicial en la inicialización corrige el relleno, pero el método de trading no lo recoge.
Hola. No me quejo, claro que no he leído todos tus artículos. Dudo que hubiera alguno. Pero las cosas simples no funcionan y ni siquiera se describe cómo deberían funcionar.
Aquí tienes elementos gráficos estándar. Por cierto, ni siquiera tienes ejemplos para muchos elementos básicos (Edit en este caso).
Así, CreateEditField() no funciona. Se bloquea en el método CreateNewStdGraphObjectAndGetCtrlObj(). Aquí está:
Bueno, m_list_charts_control está vacío... en consecuencia, no se añade nada y el método no devuelve nada.
En general, hay bastantes errores. Tengo la sensación de que nadie utiliza la biblioteca en la práctica. Tome una herramienta con el único tipo permitido de llenado IOC. No funcionará. No lo define correctamente. Tuve que editar un montón de métodos.... Usted acaba de ir a través de su método de negociación. Y el método inicial en la inicialización corrige el relleno, pero el método de comercio no lo recoge.
Método CTrading::OpenPosition()
Ok, hemos encontrado el tipo correcto de relleno, si no se especifica explícitamente en la orden.
Pero entonces pasamos la variable original al siguiente método. ¿Qué sentido tiene? O no entiendo algo...
¿Esta discusión tiene alguna relación con este artículo? No.
¿De qué artículo son las preguntas?
Vamos a tratar con ellos en su discusión.
PD No recuerdo haber hecho una clase de campo de entrada para la librería CreateEditField() ¿de dónde la has sacado?
leonerd #: Pues bien, CreateEditField() no funciona. Se bloquea en el método CreateNewStdGraphObjectAndGetCtrlObj().
¿Por qué te metes en métodos privados? Son necesarios sólo para que la librería funcione.
El usuario necesita métodos públicos. El usuario final no necesita el trabajo de los métodos internos.
Si quieres entender el trabajo de todo esto, entonces los artículos que describen toda esta cocina están escritos para este propósito. No está muy claro qué y cómo quieres hacer. No lo dices, no das ejemplos, simplemente señalas una línea sacada de un gran número de ellas y dices que no funciona....
leonerd #: En general, hay bastantes articulaciones. Tengo la sensación de que nadie usa la librería en la práctica.
Si no lees la descripción e intentas modificar y usar los métodos internos por ti mismo, entonces no es el autor el que tiene bastantes fallos, sino el que la modifica.
Y sí, la librería aún está en desarrollo.
Le echaré un vistazo al tipo de relleno, gracias.
Pero es mejor que lo discutamos en la discusión de los artículos correspondientes, así se ve la descripción de una vez, en vez de hablar de una cosa en la discusión de otra.
leonerd #: He proporcionado el máximo de detalles en este comentario.
Máximo detalle es código que se puede compilar, ejecutar, ver lo que no funciona y encontrar e informar de la causa.
Sin pruebas, los artículos no se publican. Todo funciona en las pruebas. Por eso pregunto por tercera vez: qué estás haciendo y qué no funciona ahí. El código, por favor.
No. Hay un método Sort() en CArrayObj:
Compare() dentro del método, que es lo que hay que sobreescribir en las clases heredadas.
En la clase CBar, cuyos objetos se almacenan en la lista donde buscamos la barra deseada, el método Compare() ya está sobrescrito (al igual que en todas las clases de objetos de la biblioteca):
La estructura de búsqueda de objetos en la librería está organizada correctamente.
¿Por qué falla? ¿Quizás es simplemente porque no has empezado a estudiar la biblioteca desde el principio?
¿Qué es lo que no funciona? ¿Quizá es porque no empezaste con la biblioteca desde el principio?
Hola. No me quejo, claro que no he leído todos tus artículos. Dudo que hubiera alguno. Pero las cosas simples no funcionan y ni siquiera se describe cómo deberían funcionar.
Aquí tienes elementos gráficos estándar. Por cierto, ni siquiera hay ejemplos para muchos elementos básicos (Edit en este caso).
Por lo tanto, CreateEditField() no funciona. Se bloquea en el método CreateNewStdGraphObjectAndGetCtrlObj(). Aquí:
Bueno, y m_list_charts_control está vacío... en consecuencia, no se añade nada y el método no devuelve nada.
En general, hay bastantes errores. Tengo la sensación de que nadie utiliza la biblioteca en la práctica. Tome una herramienta con el único tipo permitido de llenado IOC. No funcionará. No lo define correctamente. Tuve que editar un montón de métodos.... Usted acaba de ir a través de su método de negociación. Además, el método inicial en la inicialización corrige el relleno, pero el método de trading no lo recoge.
Método CTrading::OpenPosition()
Ok, hemos encontrado el tipo correcto de relleno, si no está explícitamente especificado en la orden.
Pero entonces pasamos la variable original al siguiente método. ¿Qué sentido tiene? O no entiendo algo...
Hola. No me quejo, claro que no he leído todos tus artículos. Dudo que hubiera alguno. Pero las cosas simples no funcionan y ni siquiera se describe cómo deberían funcionar.
Aquí tienes elementos gráficos estándar. Por cierto, ni siquiera tienes ejemplos para muchos elementos básicos (Edit en este caso).
Así, CreateEditField() no funciona. Se bloquea en el método CreateNewStdGraphObjectAndGetCtrlObj(). Aquí está:
Bueno, m_list_charts_control está vacío... en consecuencia, no se añade nada y el método no devuelve nada.
En general, hay bastantes errores. Tengo la sensación de que nadie utiliza la biblioteca en la práctica. Tome una herramienta con el único tipo permitido de llenado IOC. No funcionará. No lo define correctamente. Tuve que editar un montón de métodos.... Usted acaba de ir a través de su método de negociación. Y el método inicial en la inicialización corrige el relleno, pero el método de comercio no lo recoge.
Método CTrading::OpenPosition()
Ok, hemos encontrado el tipo correcto de relleno, si no se especifica explícitamente en la orden.
Pero entonces pasamos la variable original al siguiente método. ¿Qué sentido tiene? O no entiendo algo...
¿Tiene esta discusión algo que ver con este artículo en particular? No.
CreateEditField() en Engine.mqh
CreateEditField() en Engine.mqh
Pues bien, CreateEditField() no funciona. Se bloquea en el método CreateNewStdGraphObjectAndGetCtrlObj().
¿Por qué te metes en métodos privados? Son necesarios sólo para que la librería funcione.
El usuario necesita métodos públicos. El usuario final no necesita el trabajo de los métodos internos.
Si quieres entender el trabajo de todo esto, entonces los artículos que describen toda esta cocina están escritos para este propósito. No está muy claro qué y cómo quieres hacer. No lo dices, no das ejemplos, simplemente señalas una línea sacada de un gran número de ellas y dices que no funciona....
En general, hay bastantes articulaciones. Tengo la sensación de que nadie usa la librería en la práctica.
Si no lees la descripción e intentas modificar y usar los métodos internos por ti mismo, entonces no es el autor el que tiene bastantes fallos, sino el que la modifica.
Y sí, la librería aún está en desarrollo.
Le echaré un vistazo al tipo de relleno, gracias.
Pero es mejor que lo discutamos en la discusión de los artículos correspondientes, así se ve la descripción de una vez, en vez de hablar de una cosa en la discusión de otra.
No tengo ningún deseo de entrar ahí. Si todo funcionara, ni siquiera lo abriría.
¿Qué es lo que no funciona? El código, por favor. Sólo decir que no funciona no es productivo.
¿Qué es lo que no te funciona? El código, por favor. Decir simplemente que no funciona no es productivo.
Estoy de acuerdo en que no es productivo. Por eso he dado el máximo de detalles en este comentario https://www.mql5.com/ru/forum/438481/page2#comment_53551638.
He proporcionado el máximo de detalles en este comentario.
Máximo detalle es código que se puede compilar, ejecutar, ver lo que no funciona y encontrar e informar de la causa.
Sin pruebas, los artículos no se publican. Todo funciona en las pruebas. Por eso pregunto por tercera vez: qué estás haciendo y qué no funciona ahí. El código, por favor.