[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 78

 

¡Hola! He empezado a aprender mquel4. Utilizaré un ejemplo de un simple indicador que calcula los precios máximos y mínimos de las velas y dibuja líneas en los extremos de las velas a través de dos buffers en la pantalla:

#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии

double Buf_0[],Buf_1[]; // Объявление массивов (под буферы индикатора)
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
SetIndexBuffer(0,Buf_0); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1,Buf_1); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1);// Стиль линии
return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
int i,// Индекс бара
Counted_bars; // Количество просчитанных баров 
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
i=Bars-Counted_bars-1;
// Индекс первого непосчитанного
while(i>=0) // Цикл по непосчитанным барам
{
Buf_0[i]=High[i]; // Значение 0 буфера на i-ом баре
Buf_1[i]=Low[i]; // Значение 1 буфера на i-ом баре

i--; // Расчёт индекса следующего бара
}
//--------------------------------------------------------------------
return; // Выход из спец. ф-ии start()
}

Entonces, ¿cómo hacer que la línea de amortiguación pase por dos (tres, etc.) velas en lugar de cada una?

 
wolf05632:

Entonces, ¿cómo puedo hacer que la línea de amortiguación pase por dos (tres, etc.) velas en lugar de por cada vela?

En primer lugar, aprende a insertar un mensaje en el código correctamente, utilizando el botón "SRC", para que tenga una forma legible y se vea como en el MetaEditor.


El segundo paso será su intento de vincular la variable Counted_bars a la sentencia if.

Por ejemplo:

Entraremos en el cálculo del indicador cada dos barras (saltamos las impares, dejamos las pares):

if (MathMod(Counted_bars, 2) == 0)
{
   // расчёт для буферов индикатора
}
else return(0);

Aquí puedes leer sobre la función MathMod(). Pero no tienes que usarlo. Puede insertar cualquier condición en la sentencia if.

Pero no olvides que estas modificaciones de código provocarán la pérdida de algunos valores en el buffer. Si lo necesitas o no, no lo sé. Todo dependerá de su tarea.

 

Estoy un poco confundido. He intentado hacer el paso del ciclo igual a dos (creo que tendría el mismo significado), pero no funciona. No necesito pasar por una en concreto, sino por un número arbitrario de velas. Entiendo que la estructura debería ser así:

buffer array[1]= array de velas[1]

buffer array[2]= array de velas[2]

buffer array[3]= array de velas[4]

...

buffer array[5]= array de velas[x] etc. Pero no funciona.

 
wolf05632:

No veo un patrón entre los índices del buffer y los índices de las velas...

Y sería aún mejor si adjuntas una foto de lo que quieres conseguir.

 

Dice así

Y lo necesito así:

Pero no te apegues específicamente a las líneas que se dibujan a través de una vela, pueden ser dibujadas a través de dos, o tres, etc.

 
sergeev:

Creo que debería haber llevado esto a los telépatas en lugar de aquí.

Sólo está jugando con nosotros.


Mira el código, se puede ver sin espacios donde el resultado de enviar la orden, su código de error y los dígitos para el instrumento.
 

Entonces hay que utilizar un indicador en forma de zig-zag (Mi punto de vista):

#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии

double Buf_0[], Buf_1[]; // Объявление массивов (под буферы индикатора)
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
   SetIndexBuffer(0, Buf_0); // Назначение массива буферу
   SetIndexStyle (0, DRAW_SECTION);
   SetIndexBuffer(1, Buf_1); // Назначение массива буферу
   SetIndexStyle (1, DRAW_SECTION);
   return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
   int i,// Индекс бара
   Counted_bars; // Количество просчитанных баров 
   //--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   if (MathMod(Bars, 2) != 0 && Counted_bars == 0)
      return(0);
   i = Bars-Counted_bars-1;
   // Индекс первого непосчитанного
   while(i >= 0) // Цикл по непосчитанным барам
   {
      if (MathMod(i, 2) == 0)
      {
         Buf_0[i] = High[i]; // Значение 0 буфера на i-ом баре
         Buf_1[i] = Low[i]; // Значение 1 буфера на i-ом баре
      }
   
      i--; // Расчёт индекса следующего бара
   }
   //--------------------------------------------------------------------
   return; // Выход из спец. ф-ии start()
}

Creo que puedes entender los cambios. Lo único en lo que me equivoqué, es mejor usar el parámetro Bars en lugar de IndicatorCounted() como índice de barra a calcular.

Su tarea ahora es llevar el divisor a un parámetro externo. Será igual al número de velas pasadas.

 
grell:

Basta con mirar el código, se puede ver sin espacios donde el resultado de enviar la orden, su código de error y los dígitos para el instrumento.

Exactamente. Por eso hablamos de telépatas.

Antes nos diste el código:

Alert("Ordersend_Number",res,err);

Y el error, por más veces que miré el código, lamentablemente, no lo detecté... No tengo experiencia en escribir Asesores Expertos multidivisa. Sólo conozco algunos principios, eso es todo.

 
Es obvio que -1129 es el código de error, ¿dónde has visto el número de error 1292?
 
grell:
Está claro que -1129 es un código de error, ¿dónde has visto el número de error 1292?

Cualquier cosa puede pasar...

¿Sólo has probado tu EA en un DC? ¿El error 129 tarda mucho en aparecer? ¿O el pedido se abre después de varias solicitudes?