Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 827

 

Hola.

Digamos que tengo 2 indicadores, el primero tiene 4 buffers, el segundo tiene 2. Los pongo en un gráfico y abro la ventana de datos (CTRL+D). La lista contiene 6 buffers de 0 a 5. ¿Cómo puedo leer el valor del buffer 5, por ejemplo, de esta lista en MQL? No es conveniente utilizar iCustom por el indicador requerido. Es más conveniente utilizar esta lista. Sé que lo hacen, pero ¿cómo?

 

Estudiando los ejemplos de la ayuda, la creación de objetos se hace siempre con una comprobación:

//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим кнопку 
   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать кнопку! Код ошибки = ",GetLastError()); 
      return(false); 
     } 


¿Por qué se hace esto para los objetos? ¿Cuál es la probabilidad de que un objeto no se cree?


En general, me interesa saber dónde puedo leer sobre reglas de buenas maneras en la programación de mql, para saber en qué arbustos se encuentra el rastrillo, aconsejar.

 
psyman:

Estudiando los ejemplos de la ayuda, la creación de objetos se hace siempre con una comprobación:


¿Por qué se hace esto para los objetos? ¿Cuál es la probabilidad de que un objeto no se cree?


En general, me interesa saber dónde puedo leer sobre las buenas maneras en la programación de mql, para saber dónde están las trampas, aconséjame.

Por ejemplo, un objeto con este nombre ya existe.
Las reglas de la buena forma son las mismas para cualquier idioma. Recibir datos - comprobar lo que tienes, crear un objeto, comprobar lo que has creado, y si lo has creado... Y así sucesivamente.
 
Cómo llenar un array de 4 dimensiones con valores del formato int Mas[1][2][2][2], cómo asignar un valor a cada celda del array, tenemos en mente tal notación por ejemplo un array de 2 dimensiones int Arr[1][2]={3,4};, ¿cómo llenar 4 dimensiones?
 
Artyom Trishkin:
Por ejemplo, un objeto con este nombre ya existe.
Y las reglas de etiqueta son las mismas para cualquier idioma. Recibe datos - comprueba lo que ha recibido, crea un objeto, comprueba lo que ha creado y si lo ha creado... Y así sucesivamente.


Cuando creo un botón dentro de una función, me sale una palabrota

 return(false);


'return' - La función 'void' devuelve un valor 112 16


¿Qué debo hacer en este caso?

 
Seric29:
¿Cómo llenar un array de 4 dimensiones con valores del formato int Mas[1][2][2][2], cómo asignar un valor a cada celda del array, en este caso, hay un array de 2 dimensiones int Arr[1][2]={3,4}; cómo llenar 4 dimensiones?

Las matrices multidimensionales suelen rellenarse en los bucles con los valores correctos - eso hace más difícil cometer un error, para una matriz de cuatro dimensiones debería ser algo así, pero podría estar equivocado:

int A[2,2,4,3] = {
                     {/*----------- 3-e измерение = 4 ---------------------------*/ 
/*2-e измерение=2 */ {  {0,1,2/*4-e измерение = 3 */}, {0,1,2}, {0,1,2}, {0,1,2} },
                        { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }   
               
                     },
 // 1-е измерение = 2           
                     {  { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} },
                     {   {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }}
                  }; 

psyman:

Cuando creo un botón dentro de una función, se me jura

La función 'return' - 'void' devuelve un valor 112 16

¿Qué debo hacer en este caso?

empezar a leer la ayudaen https://www.mql5.com/ru/docs/basis/function

Si necesitas más ayuda, deberías leer cualquier libro de C++. El primer capítulo debería explicar las funciones

 
psyman:


Cuando creo un botón dentro de una función, me sale una palabrota


La función 'return' - 'void' devuelve un valor breakeven_fish.mq5 112 16


¿Qué hacer en este caso?

Si devuelve un valor bool desde una función, no es necesario que el tipo de la función sea void, sino que adivine lo que es.
 

Camaradas - miren el indicador para ver si es correcto. Hay una fórmula Valor = (Open[0]-SMA(P,n))/SMA(P,n))*100%.

Lo pongo en el gráfico - calcula y traza todo. Comienzo a comprobar en alguna barra de la calculadora - su valor no coincide con el dibujado...

Aquí hay un ejemplo - Calculo 1,0178 para la Apertura y 1,0182 para la MA(13) usando la fórmula ((1,0178-1,0182)/1,0182) * 100% - el resultado en la calculadora es -0,0393. Y el gráfico de MT4 muestra -0,0929. ¿Es un error en el código o la calculadora no calcula correctamente algunos valores allí? Por favor, ayuda. Adjunto el indicador.

#property indicator_separate_window 
#property indicator_buffers 1       // Количество буферов
#property indicator_color1  Blue    // Цвет линии 0 буфера

#property  indicator_level1  1
#property  indicator_level2  -1
//--------------------------------------------------------------- 2 --
//---- indicator parameters 

extern int History    =5000;      // Колич.баров в расчётной истории
extern int Period_SMA =13; 
 

double
   Line_0[];                        // Инд. массив  ravi 
    
//--------------------------------------------------------------- 4 --

int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Line_0);        // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   
   IndicatorShortName("KRI");
//--------------------------------------------------------------- 5 --
   
   return(0);                          // Выход из спец. функции init()
  }

//--------------------------------------------------------------- 8 --
int start()                         // Специальная функция start()
  {
//--------------------------------------------------------------- 9 --
  
   double
   SMA;                   //  МА для расчета значений индикатора 
                                 // формyла (PRICE-SMA/SMA)*100); 
                             
   int
   i,                            // Индекс бара
   n,                            // Формальн. параметр(индекс бара)
   Counted_bars;                 // Количество просчитанных баров 

//-------------------------------------------------------------- 10 --
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
//-------------------------------------------------------------- 11 --
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      //-------------------------------------------------------- 12 --
        
      SMA=iMA(NULL,0,Period_SMA,0,MODE_SMA,PRICE_CLOSE,i); // Значение  SМА
     
      
      Line_0[i] =0; 
      if (SMA>0) Line_0[i] = ((Open[0]-SMA)/SMA)*100;    //  Индик. массив линии KPI
     
      //-------------------------------------------------------- 13 --
      i--;                          // Расчёт индекса следующего бара
      //-------------------------------------------------------- 14 --
     }
   return(0);                          // Выход из спец. ф-ии start()
  }
//-------------------------------------------------------------- 15 --
Archivos adjuntos:
KRI.mq4  7 kb
 
Artyom Trishkin:
Si estás haciendo la devolución de un valor de tipo bool desde la función, entonces el tipo de la función no debería ser void, pero adivina cuál es.

¿Y si quieres devolver datos de una función?


¿Es posible hacer un bucle a través de las posiciones sólo para un símbolo determinado sin utilizar PositionsTotal cada vez?


De momento, lo único que se me ha ocurrido es escribir los tickets en un array y trabajar con ellos por separado, pero quizá haya una opción más sencilla.

 
psyman:

¿Y si quieres devolver datos de una función?


¿Es posible hacer un bucle a través de las posiciones sólo para un símbolo determinado sin utilizar PositionsTotal cada vez?


De momento, lo único que se me ha ocurrido es escribir las entradas en un array y trabajar con ellas por separado, pero quizá haya una opción más sencilla.

No está claro lo que se necesita al final - algunos pensamientos inconexos.