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

 
Artyom Trishkin:
barras[]
Si puedes, por favor muéstrame el código.
 
Vitaly Muzichenko:

Lo llamóBars, el compilador está regañando a los cielos. ¿Has probado este diseño, o simplemente has asumido que debería funcionar, o estoy haciendo algo mal?

Sí, mi error. Dígalo. En general, la idea es dar nombres expresivos a las variables, así no necesitarás crear variables adicionales, cuya existencia no siempre está justificada.
 
Vasiliy Sokolov:
Sí, mi error. Dígalo. En general, la idea es dar nombres expresivos a las variables, así no necesitarás crear variables adicionales, cuya existencia no siempre está justificada.

El motivo no es expresar algo, sino acortar el código cuando se trabaja con ellos:

if(open1<close1 && close2>close3 && close1>close2 &&

Y el resto de la misma manera, de lo contrario la longitud de las líneas aumenta

Gracias a todos por las aclaraciones.

 
Vitaly Muzichenko:

No lo nombré para expresar algo, sino para reducir el código al trabajar con ellos:

if(open1<close1 && close2>close3 && close1>close2 &&

Y el resto de la misma manera, de lo contrario la longitud de las líneas aumenta

Gracias a todos por las aclaraciones.

Si quiere reducir el código al mínimo, haga referencia directamente a la matriz de datos

//+------------------------------------------------------------------+
//|                                                       test09.mq5 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"

MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar=0; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(bars, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CopyRates(Symbol(),PERIOD_CURRENT, start_bar, count_bar, bars)<count_bar) return;
  
   if(bars[1].open<bars[1].close && bars[2].close>bars[3].close && bars[1].close>bars[2].close)
   {
  
   }
  }
//+------------------------------------------------------------------+

...
 

¡Buenas tardes!

¿Dónde y cómo borrar correctamente las órdenes colocadas y las posiciones abiertas al descargar (borrar) un Asesor Experto? Si no es difícil, por favor comparta un ejemplo.

Gracias.

 

Uno de los EAs está teniendo algunas tonterías extrañas. Prueba el EA normalmente, haciendo clic en "Ejecutar una sola prueba" sólo se ejecuta una sola, la primera vez. Entonces, cuando se hace clic en la prueba individual o se hace clic en cualquier línea de la Optimización, se muestra en el Diario:

2017.02.08 13:31:05.165 El comprobador no puede obtener entradas para el pase 4234087422336

2017.02.08 13:31:34.829 El comprobador no puede obtener entradas para el pase 4076312468706

2017.02.08 13:31:47.973 El comprobador no puede obtener entradas para el pase 1004506640527

Los otros EAs se comportan normalmente. ¿Qué puede ser?

 

Señores, grabando una enorme matriz de 10000*10000

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

¿Cómo cree que este algoritmo es eficiente en términos de velocidad?

Porque cuando la matriz es de 1000*1000 la velocidad es de unos pocos segundos, al aumentar a 10000*10000 el sistema se levanta

 
Top2n:

Señores, grabando una enorme matriz de 10000*10000

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

¿Cómo cree que este algoritmo es eficiente en términos de velocidad?

Porque cuando la matriz es de 1000*1000 la velocidad es de unos pocos segundos, al aumentar a 10000*10000 el sistema se levanta

¿Cómo se puede obtener una matriz de este tipo si no se permiten matrices de más de cuatro dimensiones?
¿Hay alguna confusión?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
¿Cómo es posible obtener una matriz de este tipo si no se permiten matrices de más de cuatro dimensiones?
¿No hay ninguna confusión?

¿No es 10000 x 10000 una matriz bidimensional?

double arr[10000][10000];

y todo eso...

 
Alexey Viktorov:
¿Cómo es posible obtener una matriz de este tipo si no se permiten matrices de más de cuatro dimensiones?
¿Hay alguna confusión?
Sí, es bidimensional, así que no lo digo bien, digo que no es una matriz, sino un array. ¿Una matriz implica multidimensionalidad?