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

 

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.

 
ski1973:

¡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:

bool var = true;
Print("1. var=",(string)var);
var=!var;
Print("2. var=",(string)var);
 

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.

 
ski1973:

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:

void Subr2(int order)
{
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket());
}

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

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Vitaly Muzichenko:

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 .

Библиотека "Easy And Fast GUI" для создания графических интерфейсов на MQL
  • tol64.blogspot.com
С этой статьи я начинаю еще одну серию, относящуюся к разработке графических интерфейсов. На текущий момент нет ни одной библиотеки кода, которая позволяла бы легко и быстро создавать качественные графические интерфейсы в MQL-приложениях. Я имею в виду графические интерфейсы, к которым мы все привыкли в известных операционных системах. Цель проекта — дать конечному пользователю такую возможность и научить это делать с помощью моей библиотеки. Я постарался сделать ее максимально понятной в изучении, с возможностями дальнейшего развития.
 
neverness:

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

FileOpenHistory - Файловые операции - Справочник MQL4
FileOpenHistory - Файловые операции - Справочник MQL4
  • docs.mql4.com
[in]  Режим открытия. Это может быть одна величина или их комбинация: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE, FILE_SHARE_READ, FILE_SHARE_WRITE. Клиентский терминал может подключаться к серверам разных брокерских компаний. Исторические данные (файлы HST) каждой брокерской компании хранятся в соответствующей подпапке папки истории...
 
Igor Makanu:

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.

 
neverness:

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

No hay nada que hacer:

Me refería a conjuntos de datos DINÁMICOS. Este es un tema totalmente diferente. Siente la diferencia.

sentido, también debes entender que en todos los lenguajes de programación los arrays dinámicos son sólo arrays dinámicos ylas timeseries sontimeseries y parte del trabajo (acceso) contimeseries está organizado como el trabajo con arrays...
 
Igor Makanu:

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.

Чтение файла HST истории котировок Metatrader 4 — ProfiTraders.com
  • profitraders.com
Файлы истории котировок Metatrader 4 имеют расширение и находятся в папке данных торгового терминала, в каталоге . Они сгруппированы в подкаталогах, имена которых совпадают с названиями серверов, например: или . Имена файлов начинаются с наименования торгового инструмента, далее указывается таймфрейм (количество минут), например, для часового...