[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 181

 
Activict:

Buenas tardes. Tengo una pregunta de este tipo.

He rediseñado este indicador para mis propias necesidades con gran dificultad a partir de trozos de código de otros Asesores Expertos e Inductores. No es un código grande y funciona como quiero.

El asunto es que realiza algunos cálculos internamente y muestra flechas hacia arriba o hacia abajo en el gráfico.

Por favor, aconsejar cómo hacer un Asesor Experto para abrir una orden en la dirección correcta cuando la flecha aparece en el gráfico

Más precisamente, sólo necesito saber qué flecha está activa ahora, creo que puedo hacer el resto

Aquí hay un trozo de código para que quede más claro, es una inicialización en el indicador

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

Gracias de antemano a todos

Utilice la función iCustom incorporada para recibir los valores del indicador personalizado que necesita en el Asesor Experto.



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Por ejemplo, necesita saber si hay una flecha hacia arriba o hacia abajo en la última barra completamente formada:


double Up=iCustom(NULL, 0, name/* название индикатора */, /* настраиваемые параметры индикатора через запятую */, 1, 1); // стрелка вверх
double Dw=iCustom(NULL, 0, name/* название индикатора */, /* настраиваемые параметры индикатора через запятую */, 2, 1); // стрелка вниз
 

Gracias por la respuesta. Sí, las flechas a veces se pierden. ¿Este método leerá "0" si la flecha desaparece?

Y la flecha se dibuja sólo en la barra emergente, las barras anteriores no se vuelve a dibujar, en el momento de la ocurrencia es necesario abrir un acuerdo y, respectivamente, si la flecha desaparece entonces cerrar

 
¿Hay alguna forma de hacer que el EA envíe peticiones al servidor con más frecuencia de la habitual utilizando el código del programa? Para que en lugar de una petición haya dos, o para que sólo se pueda repetir el programa shell ... Si tres peticiones en lugar de una, entonces repetirlo dos veces ...? ?
 
Activict:

Sí, las flechas a veces se pierden. ¿Este método a través de la personalización leerá '0' si la flecha desaparece?

Sí, lo hará.

Activar:

Y la flecha se dibuja sólo en la barra de formación, las barras anteriores no se vuelve a dibujar, en el momento de la ocurrencia es necesario abrir la posición y, respectivamente, si la flecha desaparece entonces cerrar

En consecuencia, si la flecha se encuentra en una de las barras completamente formadas, ya no desaparecerá. La flecha puede aparecer y desaparecer varias veces en la barra actual.
 
Activar:

спасибо за ответ! Да стрелки иногда пропадают. Этот способ через кастом будет считывать "0" если стрелка пропадет?

El valor que se especifica como "vacío" en el código del indicador se considera con iCustom. Por regla general, puede ser 0 o EMPTY_VALUE.

EMPTY_VALUE es el valor por defecto en los indicadores, pero si pones SetIndexEmptyValue en init(), será diferente.

 
yellownight:
¿Hay alguna forma de hacer que el EA envíe peticiones al servidor con más frecuencia de la habitual utilizando el código del programa? Para que en lugar de una petición haya dos, o para que sólo se pueda repetir el programa shell ... Si tres peticiones en lugar de una, entonces repite dos veces... ?
Esto no le servirá de nada. Bombardee el servidor con peticiones y su cuenta puede ser desactivada por completo. Sé que esto le ocurre a la gente que "se pasa de la raya" y "bombardea" al servidor con demasiadas peticiones.
 

He escrito un indicador sencillo. Aquí está el código:

//+------------------------------------------------------------------+
//|                                            AngleByLineFromMA.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string  h1 = "основные параметры машки";
extern int     maTF = 0;
extern int     maPeriod = 50;
extern int     maShiftByPrice = 0;
extern int     maMethod = 0;
extern int     maPrice = 0;
extern int     shiftBarsBack1 = 2;                       // Первое значение shift
extern int     shiftBarsBack2 = 7;                       // Второе значение shift
extern string  h2 = "===============================";

string         h3 = "Другие переменные";
double         pointOfMaFirst,                           // Первая тока (начало отрисовки отрезка)
               pointOfMaLast,                            // Вторая тока отрезка (конец отрисовки отрезка)
               varsAngle[1000];                              // Буфер для хранения значение возвращаемых машкой

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//#property indicator_minimum -45
//#property indicator_maximum 45
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   SetIndexBuffer(0,varsAngle);                          // Связываем массив значений угла с буфером
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2); 
   
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {
    ObjectsDeleteAll();                                  // Очистим график от всего
    
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
    int i, countedBars = IndicatorCounted();
    int limit = Bars - countedBars;
    if (limit > 400) limit = 400;
        
    for(i = limit;i > 1;i--)
    {
      pointOfMaFirst = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1+i);   // Начальная точка прямой
      pointOfMaLast = iMA(Symbol(),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2+i);     // Крайняя точка прямой
    
      varsAngle[i] = pointOfMaFirst - pointOfMaLast;
      Print("varsAngle[i] = ", varsAngle[i]);
    }

    return(0);
  }
Sólo hay un búfer en él. Los valores de los indicadores son del tipo double.

En Expert Advisor, decidí obtener el valor del indicador y aplicarlo a la operación como un filtro.

Aquí escribí una simple llamada a la función de este búfer indicador en la última barra formada:

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
El valor de la pendiente no es correcto en el probador:
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 16:57:26     2009.10.26 00:23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647

¿Por qué? El tipo es correcto. La llamada también es correcta. El indicador funciona correctamente en absoluto. Aquí está el registro del probador, pero de un mercado actual real:

2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02.26 16:57:05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001

¿Por qué se devuelve siempre el número 2147483647 en lugar del número requerido?

 
hoz:

He escrito un indicador sencillo. Aquí está el código:

Sólo tiene un búfer. Los valores del indicador son de tipo doble.

En Expert Advisor, decidí obtener el valor del indicador y aplicarlo a la operación como un filtro.

Aquí escribí una simple llamada a la función de este búfer indicador en la última barra formada:

El valor de la pendiente devuelto en el comprobador no es correcto:

¿Por qué? El tipo es correcto. La llamada también es correcta. El indicador funciona correctamente en absoluto. Aquí está el registro en el probador, y desde el mercado actual real:

¿Por qué se devuelve siempre el número2147483647 en lugar del número requerido?

En el probador al principio del trabajo no hay suficientes barras en el historial para el cálculo correcto del indicador.

//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF)<maPeriod) { Print("Недостаточно баров в истории для корректного расчёта значений индикатора!"); return(-1.0); }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   
   return(slope);
}
 
//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if(iBars(NULL, i_TF) < maPeriod)
   {
      Print("Недостаточно баров в истории для корректного расчёта значений индикатора!");
      return(0);
   }
   double slope = iCustom(NULL, i_TF, "AngleByLineFromMA simplest", 0, 1);
   Print ("slope = ", slope);
   Print ("iBars(NULL, i_TF) = ", iBars(NULL, i_TF));
   
   return(slope);
}

He descargado una historia de Dukascopy desde 2007... es imposible que no haya suficientes bares. El periodo de MA es sólo de 50.

He pegado tu línea, pero he corregido return(0) ... y he añadido la salida del número de barras en el gráfico:

Aquí en el registro:

2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647


 
hoz:

He descargado una historia de Dukascopy desde 2007... es imposible que no haya suficientes bares. El periodo de MA es sólo de 50.

Esta es tu línea, pero la he corregido con return(0) ...

Aquí está en el registro:


El problema parece estar en el indicador

 if (limit > 400) limit = 400;
Razón de la queja: