Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 674
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Queridos conocedores
¡Espero estar haciendo una pregunta en la rama correcta!
La pregunta es: ¿es posible utilizar #define para definir una construcción que se desdoble en el siguiente código:
if(a) printf("%s(%04d)", __FUNCTION__, __LINE__) +printf("%s", _Symbol);
Esto es para entender... La construcción correcta podría ser diferente. Idealmente, me gustaría encontrar una solución para que cualquier printf() al principio de la cadena de salida se imprima con la construcción "Function(string in function) " precediendo a la cadena cuando la condición coincida. Todo esto es para acortar las instrucciones escritas
Y me gustaría que la construcción resaltada en rojo fuera sustituida por esto (similar):
#define P(a) if(variable>=a) printf("%s(%04d)", __FUNCTION__, __LINE__)
He encontrado algo en Inet, un poco similar, pero no he trabajado con las clases, por lo tanto no puedo llegar a trabajar los códigos de trabajo todavía. Intenté aplicar la construcción inferior en la forma
P(3)+printf("%s(%s) Precisión=%d", Símbolo, (¿Comando==0? "Compra": "Venta"), Precisión);
Pero cualquier entrada de este tipo en el código provoca el error 'Print' - la expresión de tipo 'void' es ilegal ...
¡Hola!
Por favor, explique la diferencia entre
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}
и
if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError());return;}
Gracias.
¡Hola!
Por favor, explique la diferencia entre
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}
и
if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError());return;}
Gracias.
No hay ninguna diferencia lógica. La diferencia radica únicamente en la forma de redactar esta comparación lógica.
El signo "!" es "NO". Es decir, if(!Select()) es lo mismo que if(Select()==false). En ruso, se ve así: if(NOT Select()).
Puede "invertir" rápidamente el valor de una variable booleana:
Tengo otra pregunta. El siguiente es un ejemplo de programa.
doble Lotes=0,01;
int deslizamiento=30;
int Subr1()
{
int resultado=-1;
int_resultado=Enviar orden(_símbolo,OP_BUY,Lotes,deslizamiento,0,0);
if(int_res<0){PrintFormat("Error de envío de pedido = ",GetError());}
devolver int_resultado;
}
void OnTick()
{
int numer=-10;
if(OrdersTotal()==0)numer=Subr1();
if(PedidosTotal()>0)Subr2(numer);
volver;
}
void Subr2(int order)
{
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket());
}
Respuesta: OrderSelect error 4051. Si lo sustituyo por SELECT_BY_POS, OrderSelect error 1. La reacción es la misma para el probador de estrategias y la "ejecución con datos reales". He intentado eliminar MODE_TRADES para el caso de SELECT_BY_TICKET: No hay diferencia. ¿Cuál es el problema y cómo solucionarlo? Gracias.
Respuesta: OrderSelect error 4051. Si lo sustituyo por SELECT_BY_POS, OrderSelect error 1. La reacción es la misma para el probador de estrategias y la "ejecución con datos reales". He intentado eliminar MODE_TRADES para el caso de SELECT_BY_TICKET: No hay diferencia. ¿Cuál es el problema y cómo solucionarlo? Gracias.
SELECT_BY_POS es la selección de una orden "por prioridad" en la lista de órdenes y en su diseño:
Está tratando de seleccionar un pedido que es por cola de pedido # ... y está utilizando el ticket # aquí y sólo tiene 1 orden y el ticket # 10023444 .... ¿que? aquí se necesita un número de 1 a 2,3... bueno, cuantos pedidos tiene en el mercado ,... corrigió el número de 0,1,2 ... - La numeración empieza por 0 y llega hastaOrdersTotal()-1...
¡SELECT_BY_TICKET debería funcionar, pero sólo hasta el momento en que se tiene el número de ticket, es decir, la orden que se tiene en el mercado, y por encima se tiene una comprobación del envío de la orden, y si la orden no se envía, el ticket = -1 !
Y en definitiva, su diseño para trabajar con órdenes no es correcto. Si ha decidido estudiar MQL, aquí tiene ejemplos listos para trabajar con órdeneshttps://www.mql5.com/ru/forum/131859
Se habla de arrays y se habla de forex. ¡Qué paradoja!
Y un tonto sabe que todas las matrices básicas en MT4/MT4 tienen un buffer.
No hay el mismo nivel de programadores en MT4/MT5, para permitir a los usuarios trabajar con matrices básicas.
Además, las matrices básicas en MT4/MT5 tienen su propia extensión (.hts o .hss - no recuerdo exactamente, pero algo así).
Así, no llegan al terminal en formato de texto (con extensión .txt), sino en su propio formato.
Y en MT4/MT5 las matrices básicas se decodifican y se convierten en matrices de marcos temporales seleccionados (1 minuto, 5 minutos, 15 minutos, etc.), y sólo después se duplican y se almacenan en el buffer.
¿Por qué se amortiguan?
Para comparar. Para que no se pierdan datos. Una de estas matrices se recalcula constantemente (cada cierto tiempo), y la segunda (copiada de la primera) se utiliza cuando copiamos en nuestros datos de usuario.
En otras palabras, el procedimiento para poner los datos a disposición de los usuarios es bastante complejo.
Se trata de arrays, por si te interesa.
Por cierto, tanto las matrices básicas MT4/MT5 de Android como las de Window tienen la misma extensión.
--------------------------------------------------------------------------------------------------------------------------------
En cuanto a la importación de datos DYNAMIC en MT4/MT5 desde fuentes de terceros, por lo que tengo entendido, no se proporciona dicha importación.
Así que no hay ningún procedimiento Cliente/Servidor en C++Builder en MT4/MT5.
--------------------------------------------------------------------------------------------------------------------------------
Me pregunto si este procedimiento estará en la biblioteca
http://tol64.blogspot.com/2015/12/easy-and-fast-gui-mql.html
Lo más probable, por supuesto, es que tampoco esté allí.
Es decir, puede intentar importar matrices dinámicas a MT4/MT5 sólo en formato básico, donde pasarán automáticamente por el procesamiento de datos estándar .
Y un tonto sabe que todas las matrices básicas en MT4/MT4 tienen un buffer.
Los programadores de MT4/MT5 no tienen el mismo nivel que los de MT4/MT5, que permiten trabajar con matrices básicas.
Además, las matrices básicas en MT4/MT5 tienen su propia extensión (.hts o .hss - no recuerdo exactamente, pero algo así).
Así, no llegan al terminal en formato de texto (con extensión .txt), sino en su propio formato.
Y en MT4/MT5 las matrices básicas se decodifican y se convierten en matrices de marcos temporales seleccionados (1 minuto, 5 minutos, 15 minutos, etc.), y sólo después se duplican y se almacenan en el buffer.
¿Por qué se amortiguan?
Para comparar. Para que no se pierdan datos. Una de estas matrices se recalcula constantemente (cada cierto tiempo), y la segunda (copiada de la primera) se utiliza cuando copiamos en nuestros datos de usuario.
En otras palabras, el procedimiento para poner los datos a disposición de los usuarios es bastante complejo.
Se trata de arrays, por si te interesa.
Por cierto, tanto las matrices básicas MT4/MT5 de Android como las de Window tienen la misma extensión.
Tienes tal lío en la cabeza que ni siquiera pude pasar
Usted ha hecho un lío de cosas en MQL - arrays, archivos, series de tiempo y buffers de indicadores.
Si consigues digerir la información que he dado en una línea, te daré algunos elementos de reflexión: MT4 y MT5 almacenan los datos históricos de forma diferente, en MT4 un usuario tiene acceso a los archivos.hst https://docs.mql4.com/ru/files/fileopenhistory
En MT5 no hay acceso directo a los archivos del historial, pero sí se puede trabajar con símbolos personalizadoshttps://www.mql5.com/ru/docs/customsymbols
Tienes tal lío en la cabeza que ni siquiera he podido superarlo
Lo que has hecho en MQL son arrays, archivos y buffers de indicadores
Si consigues digerir la información que he dado en una línea, entonces te daré algo de reflexión: MT4 y MT5 almacenan los datos históricos de diferentes maneras, en MT4 los usuarios tienen acceso a los archivos.hst https://docs.mql4.com/ru/files/fileopenhistory
En MT5 no hay acceso directo a los archivos del historial, pero sí se puede trabajar con símbolos personalizadoshttps://www.mql5.com/ru/docs/customsymbols
No he dicho ni una sola palabra sobre archivos históricos en mi post.
Otra vez has mezclado algo, y otra vez, fuera de tema.
Me refería a conjuntos de datos DINÁMICOS. Ese es un tema completamente diferente. Siente la diferencia.
No he dicho ni una palabra sobre los archivos de la historia en mi post en absoluto.
Estás confundido de nuevo, y de nuevo fuera de tema.
Me refería a las matrices de datos dinámicas. Ese es un tema completamente diferente.
Además, las matrices básicas en MT4/MT5 tienen incluso su propia extensión (.hts o .hss - no recuerdo exactamente, pero algo así).
Vale, adelante, no entiendo el objetivo de que estés en este hilo del foro
Me refería a conjuntos de datos DINÁMICOS. Este es un tema totalmente diferente. Siente la diferencia.
Vale, adelante, no entiendo el objetivo de que estés en este hilo del foro
Creo que también deberías entender que en todos los lenguajes de programación los arrays dinámicos son simplemente arrays dinámicos ylas timeseries sontimeseries y parte del trabajo (acceso) contimeseries se organiza como trabajo con arrays...Aquí se discute con gran detalle la cuestión de la formación de datos en el terminal:
http://profitraders.com/Python/hstRead.html
Quiero llamar la atención de los lectores sobre el hecho de que este artículo NO trata de los datos históricos, que se encuentran en: MT4->Service->Figures Archive,
y directamente sobre los datos DINÁMICOS del terminal en formato .hst, que intervienen directamente en el proceso de obtención y tratamiento de las cotizaciones del mercado.
------------------------------------------------------------------------------------------
Quizás no lo he dejado suficientemente claro. Lea otros autores. Espero que se aclare.