Características del lenguaje mql5, sutilezas y técnicas - página 220

 
Nikolai Semko #:

significa que en el modo de combate debes desactivar todas las tonterías gráficas sin minimizar. Deja que los gráficos se congelen si la ventana permanece visible pero no activa.
Y es más fácil y mejor, según me parece, apagar y eliminar automáticamente todos los gráficos cuando el ratón está inactivo, por ejemplo, durante 1 minuto. En cuanto el ratón está activo, los gráficos se reanudan.

Esto no es nada bueno. Aquí se mira el gráfico durante 2 minutos, y el gráfico murió hace un minuto. ¿Qué necesidad hay entonces?

 
Vitaly Muzichenko #:

Esto no es nada bueno. Miras el gráfico durante dos minutos y el gráfico ha muerto hace un minuto. Entonces, ¿para qué sirve?

Por supuesto, se necesita un interruptor "Auto-ocultar" para ese modo.

 
Nikolai Semko #:

significa que en el modo de combate todos los gastos generales gráficos deben ser desactivados sin minimización.

El kanvas del propio gráfico se dibuja sin minimizar. De manera experimentada se encontró el modo de funcionamiento del Terminal, cuando el VPS se carga mínimamente.

 

Espero estar escribiendo en el tema correcto.

1. Ejecutar una prueba en varios pares al mismo tiempo, multidivisa

Pregunta: ¿Cómo puedo obtener el resultado de cada par?

2Llevamos a cabo la optimización de varios pares al mismo tiempo

Pregunta: ¿cómo obtener un resultado para cada par?

---

Hace tiempo, unos 3 años, prometieron incluir esto en el probador, pero hasta ahora no hay nada. ¿O es que no lo encuentro?

 

Existe una forma legal de impedir el funcionamiento del Asesor de Mercado o del Servicio de Señales, por ejemplo. Digamos que no hay acceso a ellos por una u otra razón - VPS.

El método funcionará si hay una restricción en el servidor de comercio. Sólo tiene que llenar todo con órdenes pendientes, pero con cuidado, de lo contrario será imposible cerrar las posiciones abiertas.


Tal vez alguien escriba un producto de mercado de emergencia de este tipo...

 

MQL5. El buzón de mensajes duplica los mensajes en el registro de "Expertos". Por favor, indíqueme cómo desactivarlo. ***

Gracias.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Características del lenguaje mql5, sutilezas y trucos

fxsaber, 2017.09.22 20:43

POSITION_TIME_UPDATE sólo es relevante para cambiar el lote de una posición. Por ejemplo, un cierre parcial de una posición en cualquier tipo de cuenta o un complemento de compensación.

Los cambios en los niveles de SL/TP no afectan a POSITION_TIME_UPDATE.

Parafraseando, POSITION_TIME_UPDATE sólo se ve afectado por las modificaciones reflejadas en el Historial de operaciones - operaciones. Los niveles SL/TP no se aplican a estas modificaciones, por lo que no se ven afectados.

Puede haber situaciones en las que POSITION_TIME_UPDATE_MSC == POSITION_TIME_UPDATE a pesar de los cambios en el tamaño del lote.

 
Los comentarios no relacionados con este tema han sido trasladados a "Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos".
 
fxsaber #:
Ordenación práctica de un conjunto de estructuras


Aplicación


Resultado

¡Hola y gracias por compartirlo!

Esto sería perfecto si funcionara. Sin embargo, cuando se pega en un script .mq5 y se ejecuta lamentablemente su código arroja el siguiente error(es):

  • Las declaraciones de plantillas no están permitidas en las clases locales ArraySortStruct.mq5 87 4
  • (después de cambiar ligeramente su código): las declaraciones de plantillas sólo se permiten en el ámbito global, de espacio de nombres o de clase ArraySortStruct.mq5 90 4 )

¿Podría arreglar esto? Para ti probablemente sea fácil, mientras que yo no sabría por dónde empezar :-)

 
Bodolino #:

¡Hola y gracias por compartirlo!

Esto sería perfecto si funcionara. Sin embargo, cuando se pega en un script .mq5 y se ejecuta lamentablemente su código arroja el siguiente error(es):

  • las declaraciones de plantillas no están permitidas en las clases locales ArraySortStruct.mq5 87 4
  • (después de cambiar ligeramente su código): las declaraciones de plantillas sólo se permiten en el ámbito global, de espacio de nombres o de clase ArraySortStruct.mq5 90 4 )

¿Podría arreglar esto? Para ti probablemente sea fácil, mientras que yo no sabría por dónde empezar :-)

No estoy seguro de cómo mantener la funcionalidad (subcampo y método) y la usabilidad. Tal vez este se adapte a sus necesidades.

// Сортировка массива структур и указателей на объекты 
по полю.
#define  ArraySortStruct_Define(TYPE, FIELD)                                      \
namespace TYPE##FIELD                                                            \
{                                                                                \
  class SORT                                                                     \
  {                                                                              \
  private:                                                                       \
    template <typename T>                                                        \
    static void Swap( T &Array[], const int i, const int j )                     \
    {                                                                            \
      const T Temp = Array[i];                                                   \
                                                                                 \
      Array[i] = Array[j];                                                       \
      Array[j] = Temp;                                                           \
                                                                                 \
      return;                                                                    \
    }                                                                            \
                                                                                 \
    template <typename T>                                                        \
    static int Partition( T &Array[], const int Start, const int End )           \
    {                                                                            \
      int Marker = Start;                                                        \
                                                                                 \
      for (int i = Start; i <= End; i++)                                         \
        if (Array[i].##FIELD <= Array[End].##FIELD)                              \
        {                                                                        \
          SORT::Swap(Array, i, Marker);                                          \
                                                                                 \
          Marker++;                                                              \
        }                                                                        \
                                                                                 \
       return(Marker - 1);                                                       \
    }                                                                            \
                                                                                 \
    template <typename T>                                                        \
    static void QuickSort( T &Array[], const int Start, const int End )          \
    {                                                                            \
      if (Start < End)                                                           \
      {                                                                          \
        const int Pivot = Partition(Array, Start, End);                          \
                                                                                 \
        SORT::QuickSort(Array, Start, Pivot - 1);                                \
        SORT::QuickSort(Array, Pivot + 1, End);                                  \
      }                                                                          \
                                                                                 \
      return;                                                                    \
    }                                                                            \
                                                                                 \
  public:                                                                        \
    template <typename T>                                                        \
    static void Sort( T &Array[], int Count = WHOLE_ARRAY, const int Start = 0 ) \
    {                                                                            \
      if (Count == WHOLE_ARRAY)                                                  \
        Count = ::ArraySize(Array);                                              \
                                                                                 \
      SORT::QuickSort(Array, Start, Start + Count - 1);                          \
                                                                                 \
      return;                                                                    \
    }                                                                            \
  };                                                                             \
}

#define  ArraySortStruct(TYPE, ARRAY, FIELD) TYPE##FIELD::SORT::Sort(ARRAY)


Aplicación.

ArraySortStruct_Define(MqlRates, open)
ArraySortStruct_Define(MqlRates, high)
ArraySortStruct_Define(MqlRates, time)

void OnStart()
{
  MqlRates Rates[];
  
  CopyRates(_Symbol, PERIOD_CURRENT, 0, 5, Rates); // Взяли бары
  
  Print("\nБары без сортировки - как получили.");
  ArrayPrint(Rates);
  
  Print("\nСортируем по open-цене.");
  ArraySortStruct(MqlRates, Rates, open);
  ArrayPrint(Rates);

  Print("\nСортируем по high-цене.");
  ArraySortStruct(MqlRates, Rates, high);
  ArrayPrint(Rates);

  Print("\nСортируем по времени.");
  ArraySortStruct(MqlRates, Rates, time);
  ArrayPrint(Rates);
}