Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 321

 
C-4:

Una vez más (lea atentamente):

En MetaTrader4 sólo se pueden cerrar órdenes de forma secuencial: enviar una orden para cerrar una orden, esperar su ejecución, pasar a la siguiente orden, etc. Por esta razón, el tiempo para cerrar un lote de órdenes en MetaTrader4 es sustancial y no puede ser reducido por medios triviales. Sin embargo, puede cargar varios Asesores Expertos en sus propios gráficos y hacer que intercambien información entre ellos y cierren las órdenes mediante un comando común. Cada experto cierra las órdenes sólo en su símbolo. Dado que hay varios hilos comerciales en MetaTrader4, no se bloquearían entre sí ni se enviarían órdenes entre sí. Sin embargo, la organización de un grupo de expertos de este tipo es complicada y, a juzgar por tu nivel de conocimientos, no te aconsejaría nada parecido.

Si todavía crees que he escrito demasiadas palabras, aquí tienes un breve resumen:

1. La respuesta a tu pregunta es no, no puedes ejecutar un script desde un Asesor Experto.

2. No se puede aumentar la velocidad de ejecución de las órdenes comerciales en MetaTrader4 sin utilizar métodos complejos.

La única manera de resolver su pregunta normalmente es la función OrderSendAsync, que no existe en MetaTrader4.

Muchas gracias por su detallada respuesta. Si no le importa, por favor, comparta su opinión sobre esta idea:

Añade 2 parámetros al Asesor Experto que cierra todas las órdenes a beneficio total para ordenar las órdenes:
(1 parámetro - 1-clasificación por mag en orden descendente o 2 - orden ascendente y 2 - 0-venta y compra, 1-órdenes de venta, 2-órdenes de compra)
Abrir 4 terminales con 1 cuenta y 1 gráfico conjunto del mismo par, para que los ticks coincidan y establecer diferentes parámetros como 1-1, 1-2, 2-1, 2-2
que los dividirá en 4 flujos: mago mínimo vende, mago mínimo compra, mago máximo vende, mago máximo compra

¿O estoy siendo estúpido otra vez? Y sí, tienes razón en cuanto a mi nivel de conocimientos.

 
Novikov:

Muchas gracias por la detallada respuesta. Si no le importa, por favor, comparta su opinión sobre esta idea:

Añade 2 parámetros al Asesor Experto que cierra todas las órdenes a beneficio total, para ordenar las órdenes:
(1 parámetro - 1-clasificación por mag en orden descendente o 2 - orden ascendente y 2 - 0-venta y compra, 1-órdenes de venta, 2-órdenes de compra)
Abrir 4 terminales con 1 cuenta y 1 gráfico conjunto del mismo par, para que los ticks coincidan y establecer diferentes parámetros como 1-1, 1-2, 2-1, 2-2
que los dividirá en 4 flujos: mago mínimo vende, mago mínimo compra, mago máximo vende, mago máximo compra

¿O estoy siendo estúpido otra vez? Y sí, tienes razón en cuanto a mi nivel de conocimientos.

Sí, se puede hacer así. Pero no es necesario ejecutar varios terminales. Ejecuta un terminal, y tiene 4 ventanas. Coloca un robot en cada ventana. Utiliza números como uno de los parámetros de este robot: 1-4. En otras palabras, debe asignar el robot con el parámetro 1 a la primera ventana, con el parámetro 2 a la segunda ventana y así sucesivamente. Cuando llegue el momento de cerrar las órdenes, cada uno de los robots comparará el número mágico de la orden seleccionada con el número mágico del parámetro y la cerrará. Las órdenes con otros majicks se darán a otros Asesores Expertos para que las cierren.
 
C-4:
Sí, podemos hacerlo. Pero no es necesario ejecutar varios terminales. Tienes que lanzar un terminal, y tiene 4 ventanas. Coloca un robot en cada ventana. Utiliza números como uno de los parámetros de este robot: 1-4. Es decir, debes asignar el robot con el parámetro 1 a la primera ventana, con el parámetro 2 a la segunda ventana y así sucesivamente. Cuando llegue el momento de cerrar las órdenes, cada uno de los robots comparará el número mágico de la orden seleccionada con el número mágico del parámetro y la cerrará. Las órdenes con otros majicks se darán a otros Asesores Expertos para que las cierren.

En el foro de mt5, cuando inicialmente consideré 4 ventanas, como sugieres, un programador respondió: "La terminal es una. Esto significa que sólo hay un "agujero", es decir, sólo hay un pequeño "agujero" en el terminal para acceder al servidor, del tamaño de una solicitud, que es utilizado por todos los EAs y scripts, que se ejecutan en el terminal. Nadie puede acceder al servidor hasta que se procese la solicitud única.

Entonces, ¿qué es mejor y más verdadero: 4 gráficos en 1 terminal o 4 terminales?

 
Novikov:

En el foro de mt5, cuando inicialmente consideré 4 ventanas, como sugieres, un programador respondió: "La terminal es una. Esto significa que sólo hay un "agujero", es decir, sólo hay un pequeño "agujero" en el terminal para acceder al servidor, del tamaño de una solicitud, que es utilizado por todos los EAs y scripts, que se ejecutan en el terminal. Mientras no se procese una solicitud, nadie más podrá acceder al servidor.

Entonces, ¿qué será mejor y más correcto: 4 gráficos en 1 terminal o 4 terminales?

Piensa tú mismo en la respuesta de este "programador". Si fuera así, sería imposible operar con varios Asesores Expertos en un mismo terminal. Constantemente se ocupaban del contexto, es decir, se bloqueaban mutuamente. Anteriormente en las versiones de MT4 había un error de este tipo y uno podía encontrarse con él, pero ahora incluso se ha eliminado porque ya no es relevante. El multithreading de la ejecución de órdenes en MT4 se ha ampliado mucho y existe desde hace tiempo.

En cualquier caso, deberías seguir mis consejos y si algo va mal será fácil mover algunos EAs a otro terminal.

 
Novikov:

En el foro de mt5, cuando inicialmente consideré 4 ventanas, como sugieres, un programador respondió: "La terminal es una. Esto significa que sólo hay un "agujero", es decir, sólo hay un pequeño "agujero" en el terminal para acceder al servidor, del tamaño de una solicitud, que es utilizado por todos los EAs y scripts, que se ejecutan en el terminal. Nadie puede acceder al servidor hasta que se procese la solicitud única.

Entonces, ¿qué es mejor y más verdadero: 4 gráficos en 1 terminal o 4 terminales?

¿Dónde se encuentran esos "programadores"?
 

Estimado, una pregunta más: ¿La función OrderCloseBy ayudaría a acelerar el cierre de una gran pila de pedidos?

Por ejemplo: Cuando se alcance un beneficio determinado, abra 1 orden más en el par o pares para igualar el tamaño del lote de las órdenes de compra y venta, y luego ejecute "cerrar órdenes superpuestas".

Las comillas son de 5 dígitos.

 

Chicos, podéis aconsejaros sobre esta cuestión, puede ser de carácter organizativo. No puedo mostrar el código del indicador. Está escrito de forma competente, todo ha sido probado antes.

Inició la pregunta desde aquí: https://www.mql5.com/ru/forum/6343/page323

Instalé el terminal desde el sitio web de MQ - ofrecía un servidor de demostración de Alp por defecto. Terminé haciendo la prueba en eurobucks:

Tengo entendido que está esperando los datos de la libra-dólar. No se abre ninguna operación en ningún sitio.

A continuación, cuando se ejecuta en la libra-dólares que dice:

datos pendientes para el USDJPY.

 

Y sólo cuando se ejecuta en USDJPY - no hay datos de espera - pero todavía no hay operaciones abiertas.

No he especificado explícitamente un par para abrir operaciones en el código, es decir, por ejemplo

Todo para cualquier símbolo _Symbol. Y no se trata de abrir órdenes... ¿Cuál podría ser la razón? Gracias.

 for(int i=0;i<10;i++)
     {
      volume=NormalizeDouble(volume,1);
      if(volume<=0) break;
      if(Type==POSITION_TYPE_SELL)
        {
         request.type=ORDER_TYPE_SELL;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
         if(TP!=0) takeprofit = request.price-TP*_Point;
         if(SL!=0) stoploss = request.price+SL*_Point;
        }
      if(Type==POSITION_TYPE_BUY)
        {
         request.type=ORDER_TYPE_BUY;
         request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
         if(TP!=0) takeprofit = request.price+TP*_Point;
         if(SL!=0) stoploss = request.price-SL*_Point;
        }
      request.action = TRADE_ACTION_DEAL;
      request.symbol = _Symbol;
      request.volume = MathMin(volume,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX));
      request.sl = stoploss;
      request.tp = takeprofit;
      request.deviation=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
      request.type_filling=ORDER_FILLING_FOK;
      request.comment=" ";//DoubleToString(Money,2)+"$";
      if(!OrderCheck(request,check))
        {
         if(check.margin_level<100) volume-=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
 

El indicador asigna pesos a cada instrumento, lo que da lugar a una especie de análisis de grupos. No quiere funcionar en el probador. ¿Cuál puede ser la razón? Se lo agradezco.

Y los agentes funcionan bien, todo está cargado y listo para funcionar...


 
R0MAN:

El indicador asigna pesos a cada instrumento, lo que da lugar a una especie de análisis de grupos. No quiere funcionar en el probador. ¿Cuál puede ser la razón? Se lo agradezco.

Y los agentes funcionan bien, todo está cargado y listo para funcionar...


Escribe a servicedesk. Sin embargo, tendrán que darte el código.
Razón de la queja: