La gran y terrible MT4 para siempre (o cómo hacer una estrategia de transición) - página 18

 
PapaYozh:
No.
El resultado no está garantizado.

Si hay suficientes centavos, está garantizado

 
fxsaber:

Necesito escribir un script en una MT5 que abra 100 posiciones en una cuenta vacía.


En MT4 lo resolví de esta manera.


¿Quién tiene una solución en MT5?

¿Es posible una actuación parcial?
 
SanAlex:

Si hay suficientes centavos, está garantizado.

No ha contabilizado el rendimiento parcial, y cuando lo haga, también tendrá que contabilizar la doble contabilidad

 
Alexey Viktorov:
¿Es posible la ejecución parcial?

Supongamos que no hay ejecución parcial. Sin embargo, mientras se ejecuta el script, alguien puede hacer clic accidentalmente en la cruz de la tabla de posiciones, cerrando una/varias de ellas. Sin embargo, debería seguir habiendo exactamente 100 posiciones al final de la ejecución del script.


La versión MT4 es increíblemente sencilla. Por eso escribí en este hilo.

 
fxsaber:

¿Quién tiene una solución en MT5?

No hay manera sin un sincronizador.

Puede haber recotizaciones elementales o pérdida de conectividad en el proceso, 100 órdenes no siempre producirán 100 operaciones.

 
Andrey Khatimlianskii:

No hay manera sin un sincronizador.

Puede haber recotizaciones elementales o pérdidas de comunicación en el proceso, 100 órdenes no siempre resultarán en 100 operaciones.

El sincronizador sólo se asegurará de que los valores de PositionsTotal y OrdersTotal no sean mentirosos. Precisamente porque mienten en el tiempo es por lo que obtenemos los dobles recuentos.

En principio, el sincronizador es una sola línea. Y si no se mira su mecanismo, la aplicación es sencilla.


Sin embargo, incluso con el sincronizador, todo es extremadamente complicado. Puede utilizar dicha condición:

while (OrdersTotal() + PositionsTotal < 100)

Sin embargo, esta condición será un total fracaso si alguien hace lo siguiente.

fxsaber:

Supongamos que no hay ejecución parcial. Sin embargo, mientras se ejecuta el script, alguien puede hacer clic accidentalmente en una cruz de la tabla de posiciones, cerrando una o más de ellas. Sin embargo, al final de la ejecución del script debería seguir habiendo exactamente 100 posiciones.


Es decir, una tarea elemental, que se resuelve en dos líneas en MT4, no se resuelve fácilmente en MT5. Por eso el estilo MT4+Sincronizador manda en MT5. Por eso no entiendo muy bien cómo se pueden escribir otros EAs en MT5, de los que hay tantos en el Mercado.

 
fxsaber:

El sincronizador sólo se asegurará de que los valores de PositionsTotal y OrdersTotal no sean falsos. Precisamente porque son temporalmente falsas, resultan en entradas dobles.

En principio, el sincronizador es una sola línea. Y si no se mira su mecanismo, la aplicación es sencilla.


Sin embargo, incluso con el sincronizador, todo es extremadamente complicado. Puede utilizar dicha condición:

Sin embargo, esta condición será un total fracaso si alguien hace lo siguiente.


Es decir, un problema elemental, que se resuelve en dos líneas en MT4, no se resuelve fácilmente en MT5. Por eso el estilo MT4+Sincronizador manda en MT5. Por eso no entiendo cómo se pueden escribir otros EAs en MT5, de los que hay tantos en el Mercado.

En MT5 todo se resuelve de la misma manera que en MT4 y a menudo es mucho más fácil, porque el lenguaje y la API son mucho más ricos. Más concretamente, los lenguajes son casi los mismos, aquí Metacquotes ha hecho un gran trabajo de compatibilidad, pero las APIs son bastante diferentes. Renat (director de Metakvotes) dijo una vez en los foros que MT4 está muerto y no será desarrollado. Pero, al parecer, los intereses comerciales eran más importantes y, sin embargo, las actualizaciones salen a la luz. Pero en su mayoría son correcciones de errores y nuevas características de MKL 5. Así que los desarrolladores bien hecho, me quito el sombrero, que no).

Y en general, no entiendo los lamentos de algunos compañeros, como difícil de cambiar a MKL5. No hay complicaciones, bueno otra API, por lo que hay fuentes detalladas, prefiero aprender de ellos. Quienes aún no tienen suficientes conocimientos, bienvenidos a ayudar, es breve pero claro. En cualquier caso la quinta es más rápida que la cuarta al menos 10 veces, y en el modo de optimización en general utiliza todos los núcleos de la CPU que le son permitidos y con una videocard moderna supera a la cuarta en cientos de veces. Así que no hay necesidad de escribir canciones tristes. ))

 
Andrei Trukhanovich:

no has tenido en cuenta el rendimiento parcial, y cuando lo haces, tienes que tener en cuenta también el rebasamiento

¿y eso tampoco es correcto? - Aunque no entiendo qué quiere nadie de esta función - ¡¡¡pero hace su trabajo al 100%!!!

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits = 3;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots   = 0.01; // Lots
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double sl=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      //if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
 
fxsaber:

Supongamos que no hay ejecución parcial. Sin embargo, mientras se ejecuta el script, alguien puede hacer clic accidentalmente en la cruz de la tabla de posiciones, cerrando una/varias de ellas. Sin embargo, debería seguir habiendo exactamente 100 posiciones al final de la ejecución del script.


La versión MT4 es increíblemente sencilla. Por eso escribí en este hilo.

Entonces, ¿para MQL5 se establecen tales condiciones que alguien puede jugar, mientras que para MQL4 no? ¿Y si me conecto a la cuenta desde otro ordenador y coloco un par de pips... qué abrirá el MQL4?

¿Quieres meter la pata sin ningún tipo de control? ¿Estás abogando por la permisividad en la programación, o sólo intentas calumniar a MQL5 por intereses egoístas de alguien?

Escriba lo mismo en mql4 con comprobaciones y a prueba de tontos.

 
Alexey Viktorov:

¿Así que para MQL5 se establecen tales condiciones que alguien puede trastear, pero no para MQL4? ¿Y si me conecto a mi cuenta desde otro ordenador y coloco un par de pips... qué abrirá el MQL4?

Los términos y condiciones de MT4 y MT5 son los mismos.

¿Quieres meter la pata sin hacer ninguna comprobación? ¿Estás abogando por la permisividad en la programación, o sólo estás tratando de derogar MQL5 por intereses egoístas de alguien?

Si no sabes cómo hacerlo, tendrás que mostrar los mismos problemas con mql4 con ticks y a prueba de tontos.

Lo hago todo en MT5 solamente. Sólo digo que MT5 no es más complicado que MT4. Es mucho más complicado que eso. Sólo esta semana hay una solución de inversión de posiciones, y no está funcionando al 100%.

Durante muchos años todo el mundo conoció el backtesting, llegando a... Dormir. Porque es MUY complicado. Muchas peculiaridades de la API de comercio, que se plantearon en el foro, los desarrolladores no son conscientes de, o no dieron sus comentarios.


Nadie critica a MT5. He mostrado con ejemplos algunos problemas en la resolución de problemas elementales.