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

 
Vladimir Karputov:

El punto no cambia - usted está tratando de eliminar una orden pendiente con una entrada "0" en cada tick.

¿Y quién dice que tiene una orden pendiente con un "0" en cada tick? ¿Has comprobado cuántas órdenes pendientes hay? ¿Y cómo sabes que ....?

¿Con qué tilde está el "0"? OrderGetTicket(0) no significa que se seleccione una orden con ticket 0, sino que devuelve una orden con ticket de la lista de órdenes pendientes bajo el índice 0.

 
ascerdfg:


Probablemente, debe ser más específico en su tarea.

Por ejemplo: si hay una orden pendiente cuya magia es "1" - entonces elimínela.

En este caso, la aplicación será la siguiente:

#include <Trade\Trade.mqh>

CTrade trader;
int OnInit()
  {

   trader.SetExpertMagicNumber(1);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
  
  }
void OnTick()
  {
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(OrderGetTicket(i)>0)     // selects the pending order by index for further access to its properties
         if(OrderGetInteger(ORDER_MAGIC)==1)
            trader.OrderDelete(OrderGetTicket(i));
  }

Recorrer todas las órdenes pendientes

Si se ha seleccionado con éxito una orden pendiente (el valor devuelto es el ticket mayor que cero)

Si el valor mágico de la orden pendiente seleccionada es "1"

Borrarlo

 
Alexey Viktorov:

¿Con qué billete "0"? OrderGetTicket(0) no significa que se seleccione una orden con ticket 0, sino que devuelve un ticket de una orden de la lista de órdenes pendientes bajo el índice 0.

Sí, así es.

 

¿Puedes decirme cuánta RAM se necesita para ejecutar el probador de 30 caracteres desde 2004 hasta hoy?

El comprobador dice que no hay suficiente, pero no dice cuánto se necesita.

 
Igor Zakharov:

¿Puedes decirme cuánta RAM se necesita para ejecutar el probador de 30 caracteres desde 2004 hasta hoy?

El probador dice que no hay suficiente, pero no dice cuánto.

Ejecutar dos caracteres, cinco caracteres ...

 
Vladimir Karputov:

Ejecutar dos caracteres, cinco caracteres ...

Esa no es realmente la pregunta: ¿cuál es la cantidad de memoria que tengo que comprar para que esa prueba sea posible?

este es el resultado para un símbolo (del registro en modo de precio de apertura)

264  Mb memory used including 6 Mb of history data, 64  Mb of tick data

aquí hay 2:

271 Mb memory used including 12 Mb of history data, 64 Mb of tick data

3:

1038  Mb memory used including 12 Mb of history data, 832 Mb of tick data

Y aquí hay 4:

1450 Mb memory used including 18 Mb of history data, 1216  Mb of tick data

Fueexponencialmente:) No puedo rastrear la lógica, ya que los ticks son más o menos los mismos:

EURUSD,H1: 21470549 ticks, 94233 bars generated. 63097850 total ticks for all symbols
EURUSD: generate 21470549 ticks in 0:00:05.375, passed to tester 21470549 ticks
USDCAD: generate 20302871 ticks in 0:00:05.062, passed to tester 20302871 ticks
USDJPY: generate 21324430 ticks in 0:00:05.641, passed to tester 21324430 ticks
1450 Mb memory used including 18 Mb of history data, 1216 Mb of tick data

He visto muchos informes de 20 o más caracteres, no creo que alguien utilice terabytes de RAM. ¿Tal vez haya un secreto?

 

¿Es posible fijar el número de topes gráficos en el indicador?

Y la segunda pregunta, ¿existe la posibilidad de reiniciar de forma forzada el indicador utilizado por el Asesor Experto para ahorrar memoria RAM?

 
Aleksey Vyazmikin:

¿Es posible fijar el número de topes gráficos en el indicador?

Y la segunda pregunta, ¿existe la posibilidad de reiniciar de forma forzada el indicador utilizado por el Asesor Experto para ahorrar memoria RAM?

Es posible disminuir el número de indicator_plots indicado en #property indicator_plots, yo lo hice. Pero apenas es posible aumentarla. Pero esta disminución no supondrá un ahorro de memoria. Después de todo, los topes permanecen. Sólo se transfieren de INDICATOR_DATA a INDICATOR_CALCULATIONS y nada más.

 
Alexey Viktorov:

Lo indicado en #property indicator_plots se puede reducir, yo lo hice. Pero es poco probable que se pueda aumentar. Sin embargo, esta reducción no ahorrará memoria RAM. Al fin y al cabo, los topes permanecen. Sólo se transfieren de INDICATOR_DATA a INDICATOR_CALCULATIONS y nada más.

Gracias por su respuesta. Un cambio cosmético en el número de topes no es relevante, desafortunadamente.

 

Quiero obtener las asas del indicador MACD de tres marcos temporales en el bloque OnInit(). En el gráfico funciona, pero en el probador no funciona y el terminal se cuelga. Entonces, ¿quiero obtener los datos que no existen? ¿Pueden aconsejarme cómo solucionarlo?


//+------------------------------------------------------------------+
//|                                                        Test.mq5  |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//--- Количество периодов торгуемых символов
#define  NUMBER_OF_PERIODS 3

ENUM_TIMEFRAMES Periods[NUMBER_OF_PERIODS]={PERIOD_M1,PERIOD_M2,PERIOD_M3};
int handles[NUMBER_OF_PERIODS];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArrayInitialize(handles,INVALID_HANDLE);
      for(int p=0; p<NUMBER_OF_PERIODS; p++)
        {
         if(handles[p]==INVALID_HANDLE)
           {
            handles[p]=iCustom(NULL,Periods[p],"Examples\\MACD");
            Print(handles[p]);
            if(handles[p]==INVALID_HANDLE)  Print("Не удалось получить хэндл индикатора для символа !");
           }
        }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
Razón de la queja: