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

 

Estoy intentando hacer una entrada sencilla. Como quería - si el precio de apertura es menor que el precio de cierre por el número de puntos (en la barra anterior), entonces compra al principio de una nueva barra, teniendo en cuenta el take profit y el stop loss. Pero parece que algo está funcionando de una manera diferente a la que yo quería. Ayúdame a entender


   MqlRates rt[1];

   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   
   ENUM_ORDER_TYPE signal=WRONG_VALUE;

      if(rt[1].open - rt[1].close >= padenie) 
	 {
         signal=ORDER_TYPE_BUY;
         printf(rt[1].open+"____"+rt[1].close);
         }
         
      if(signal !=WRONG_VALUE && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         ExtTrade.PositionOpen(_Symbol,signal,1,SYMBOL_ASK,SymbolInfoDouble(_Symbol,SYMBOL_BID)-sl,SymbolInfoDouble(_Symbol,SYMBOL_ASK)+tp);
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
 
BorisD:

Estoy intentando hacer una entrada sencilla. Como quería - si el precio de apertura es menor que el precio de cierre por el número de puntos (en la barra anterior), entonces compra al principio de una nueva barra, teniendo en cuenta el take profit y el stop loss. Pero parece que algo está funcionando de una manera diferente a la que yo quería. Por favor, ayúdenme a entender


Error 1: Está copiando UN elemento, por lo que el índice del elemento será [0].

Apertura 100, cierre 105 - barra de toros. Abrir - Cerrar = 100 - 105 = - 5. '-5' siempre será menor que el valor establecido, ya que el resultado es un número negativo.

Apertura 110, cierre 103 - barra bajista. Abrir - Cerrar = 110 - 103 = 7. El '7' es un número positivo y esto ya funcionará correctamente.


En resumen: corregir la referencia al índice (en lugar de [1] deberíamos referirnos al índice [0]. Antes de calcular, considere el tipo de vela: si es alcista o bajista.

 

Continuación del tema de las construcciones DRAW_HISTOGRAM2.

Ejemplo:

// Индикатор Проба DRAW_HISTOGRAM2.mq5
//+------------------------------------------------------------------+
#property indicator_chart_window                   
#property indicator_buffers   20                    
#property indicator_plots     20                  

#property indicator_color1    clrOrange                
#property indicator_color2    clrOrange               
#property indicator_color3    clrLimeGreen        
#property indicator_color4    clrLimeGreen        

#property indicator_type5     DRAW_HISTOGRAM2
#property indicator_color5    clrOrange               
#property indicator_type6     DRAW_HISTOGRAM2
#property indicator_color6    clrLimeGreen        

//#property indicator_color9    clrRed                

double
   Line_High_Up[], Line_High_Dn[], Hist_High_Up[], Hist_High_Dn[],
   Line_Low_Up[],  Line_Low_Dn[],  Hist_Low_Up[],  Hist_Low_Dn[],  Line_Red[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit() 
   { 
   SetIndexBuffer     (0, Line_High_Up,      INDICATOR_DATA); 
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE,    DRAW_LINE);      
   SetIndexBuffer     (1, Line_High_Dn,      INDICATOR_DATA); 
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE,    DRAW_LINE);      

   SetIndexBuffer     (2, Line_Low_Up,       INDICATOR_DATA);
   PlotIndexSetInteger(2, PLOT_DRAW_TYPE,    DRAW_LINE);     
   SetIndexBuffer     (3, Line_Low_Dn,       INDICATOR_DATA);
   PlotIndexSetInteger(3, PLOT_DRAW_TYPE,    DRAW_LINE);     

   SetIndexBuffer     (4, Hist_High_Up,      INDICATOR_DATA); 
   SetIndexBuffer     (5, Hist_High_Dn,      INDICATOR_DATA);

   SetIndexBuffer     (6, Hist_Low_Up,       INDICATOR_DATA);
   SetIndexBuffer     (7, Hist_Low_Dn,       INDICATOR_DATA);

   //SetIndexBuffer     (8, Line_Red,          INDICATOR_DATA);
   //PlotIndexSetInteger(8, PLOT_DRAW_TYPE,    DRAW_LINE);     
   }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(  const int         rates_total,      
                  const int         prev_calculated,  
                  const datetime   &time[],                   
                  const double     &open[],                     
                  const double     &high[],                     
                  const double     &low[],                      
                  const double     &close[],                    
                  const long       &tick_volume[],                
                  const long       &volume[],                     
                  const int        &spread[]   )                   
   {  
   int i;
   for(i=prev_calculated; i<=rates_total-1; i++)      
      {
      Line_High_Up[i] = high[i] + 50*_Point;
      Line_High_Dn[i] = high[i] + 30*_Point;
      Line_Low_Up[i]  = low[i]  - 30*_Point;
      Line_Low_Dn[i]  = low[i]  - 50*_Point;

      Hist_High_Up[i] = Line_High_Up[i];
      Hist_High_Dn[i] = Line_High_Dn[i];
      Hist_Low_Up[i]  = Line_Low_Up[i];
      Hist_Low_Dn[i]  = Line_Low_Dn[i];
      
      //Line_Red[i]     = low[i]  - 70*_Point;
      }
   return(i-1);
   }           
//+------------------------------------------------------------------+

En el indicador presentado fue posible construir ambos histogramas. Una peculiaridad inesperada fue la siguiente:

Para las líneas normales en las entradas #property indicator_colorn, #property indicator_typen etc. el valor de n es 1 más que el índice del buffer.
Además, este requisito se mantiene aunque no se especifiquen los índices de los búferes en una fila y haya espacio libre entre los adyacentes.
Por ejemplo, si se utilizan los índices 0, 1, 2, 3, 8, se mostrarán las cinco líneas.

Un requisito diferente es para las construcciones de tipo DRAW_HISTOGRAM2, a saber:
Si se especifican histogramas en una fila, las entradas #property indicator_colorn, #property indicator_typen etc.
n valor se calcula a partir de un recuento y no de un índice de búfer. En el ejemplo, se especifican los índices 5 y 6, aunque lógicamente se esperan 5 y 7.

Todo este despropósito hace que no se entienda en absoluto cuál debe ser el valor de n para la línea regular (roja) que sigue a los dos histogramas.
En este ejemplo se especifica el valor de n=9, pero no funciona, por lo que se comentan todas las líneas relativas al buffer 8. Tampoco funcionó para otros valores de n.

Conclusión: todos los histogramas deben ser especificados en una fila al final de la lista del buffer. Además, sus valores deben calcularse sólo en una fila por recuento cuantitativo (a pesar de sus índices de amortiguación).
Es imposible entender esto, pero es posible vivir con ello.

Por cierto: no se ha detectado ningún efecto del orden de los buffers INDICATOR_CALCULATIONS e INDICATOR_DATA.

Gracias a Vladimir Karputov y Artem Trishkin por su participación en la solución del problema.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Continuación del tema de las construcciones DRAW_HISTOGRAM2.

Ejemplo:

En el indicador presentado fue posible construir ambos histogramas. Una peculiaridad inesperada fue la siguiente:

Para las líneas normales en las entradas #property indicator_colorn, #property indicator_typen etc. el valor de n es 1 más que el índice del buffer.
Además, este requisito se mantiene aunque no se especifiquen los índices de los búferes en una fila y haya espacio libre entre los adyacentes.
Por ejemplo, si se utilizan los índices 0, 1, 2, 3, 8, se mostrarán las cinco líneas.

Un requisito diferente es para las construcciones de tipo DRAW_HISTOGRAM2, a saber:
Si se especifican histogramas en una fila, las entradas #property indicator_colorn, #property indicator_typen etc.
n valor se calcula a partir de un recuento y no de un índice de la memoria intermedia. En el ejemplo, se especifican los índices 5 y 6, aunque lógicamente se esperan 5 y 7.

Todo este despropósito hace que no se entienda en absoluto cuál debe ser el índice de la línea regular (roja) que sigue a los dos histogramas.
En este ejemplo se especifica el valor n=9, pero no funciona, por lo que se comentan todas las líneas relativas al buffer 8. Tampoco funcionó para otros valores de n.

Conclusión: todos los histogramas deben ser especificados en una fila al final de la lista del buffer. Además, sus valores deben calcularse sólo en una fila por recuento cuantitativo (a pesar de sus índices de amortiguación).
Es imposible entender esto, pero es posible vivir con ello.

Por cierto: no se ha detectado ningún efecto del orden de los buffers INDICATOR_CALCULATIONS e INDICATOR_DATA.

Gracias a Vladimir Karputov y Artem Trishkin por su participación en la solución del problema.

No hay de qué. Pero no ha resuelto el problema.

No hay ninguna dependencia del orden de los diferentes tipos de tampón en los indicadores. Sólo los calculados deben estar después de los dibujados.

 
Artyom Trishkin:

De nada. Pero no has resuelto la cuestión.

Los indicadores no dependen del orden de los diferentes tipos de búferes. Sólo los calculados tienen que ser posteriores a los sorteados.

Sin mucha certeza, pero sigo creyendo que ambas afirmaciones son erróneas.

En cuanto a la "no dependencia". No conseguí ninguna forma de mapear el 8º buffer en el último ejemplo . Cuál debería ser el orden... ¿Tal vez puedas hacerlo?

Sobre "calculado... después de dibujado". Mi indicador utiliza más de 200 buffers, de los cuales los 100 primeros son buffers calculados.
En mi caso, todas son líneas simples, por lo que n para #propiedad se calcula a partir del valor del índice del buffer: n=b+1. Y se muestran líneas simples. La confusión comienza con la aparición de los histogramas.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Sin mucha certeza, pero sigo creyendo que ambas afirmaciones son erróneas.

En cuanto a la "no dependencia". No conseguí ninguna forma de mapear el 8º buffer en el último ejemplo . Cuál debería ser el orden... ¿Tal vez puedas hacerlo?

Sobre "calculado... después de dibujado". Mi indicador utiliza más de 200 buffers, de los cuales los 100 primeros son buffers calculados.
En mi caso, todas son líneas simples, por lo que n para #propiedad se calcula a partir del valor del índice del buffer: n=b+1. Y se muestran líneas simples. Los malentendidos comienzan con la aparición de los histogramas.

No voy a discutir. Creo los buffers para que se dibujen en cualquier secuencia. Pero en cuanto añado un buffer de cálculo entre ellos, el trazado gráfico de los indicadores a dibujar no se muestra en el gráfico. Sus valores permanecen en la ventana de datos. He realizado muchas pruebas para describir la creación de indicadores y sus topes en los artículos. He llegado a la conclusión de que sólo los búferes calculados (su ubicación en el orden de declaración de los búferes indicadores) afectan de alguna manera a la visualización/no visualización de los dibujados.

 
Artyom Trishkin:

No voy a discutir. Creo buffers de dibujo en absolutamente cualquier secuencia. Pero en cuanto añado un buffer de cálculo entre ellos, las construcciones gráficas de los indicadores a dibujar no se muestran en el gráfico. Sus valores permanecen en la ventana de datos. He realizado muchas pruebas para describir la creación de indicadores y sus topes en los artículos. He llegado a la conclusión de que sólo los búferes calculados (su ubicación en el orden de declaración de los búferes de los indicadores) afectan de alguna manera a la visualización/no visualización de los dibujados.

Yo tampoco estoy seguro.

Desde hace algún tiempo (los últimos 3-4 meses) se están produciendo algunos fenómenos incomprensibles y alarmantes en la ventana de símbolos en general.

En primer lugar, me he dado cuenta de que el dibujo del indicador puede desplazarse simplemente hacia cualquier dirección, por ejemplo hacia abajo o hacia la derecha, sin razón aparente. Justo en un nuevo tick todo el indicador se desliza repentinamente hacia abajo. Lo mismo ocurre a veces cuando se enciende el PC por primera vez.

En segundo lugar, si se borran algunos búferes y luego se compilan, los "rastros" de estas construcciones borradas permanecen hasta algunos eventos inexplicables (TF de ida y vuelta, nueva recompilación, actualización de los ajustes, etc.). ) Probablemente, hay "rastros" en la ventana de datos, que son memoria de días pasados (técnicamente los arrays se limpian sólo a la fuerza, y en MT 5 si el array no es necesario, simplemente se "desregistra", pero los datos permanecen; por supuesto, todo esto es un fallo de MT5)
--

Hay un chiste: la historia de nuestra patria no es predecible. Lo mismo se puede decir de MT5: demasiado misterioso:)
--

Por cierto, he hecho algunos cambios en mi indicador real, de acuerdo con mi última declaración. No funciona. He añadido DRAW_HISTOGRAM2 e INDICATOR_CALCULATIONS para las matrices de reflexión - funciona.

Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
User_mt5:


No hay necesidad de ser aficionado - cree el Asesor Experto en blanco usando el Asistente MQL5 - de esta manera cometerá el menor número de errores posibles al declarar las construcciones gráficas y las matrices de indicadores.

 
User_mt5:

Yo tampoco estoy seguro.

Desde hace algún tiempo (los últimos 3-4 meses) se están produciendo algunos fenómenos incomprensibles y alarmantes en la ventana de símbolos en general.

En primer lugar, he observado que la construcción del indicador puede desplazarse simplemente en cualquier dirección, por ejemplo, hacia abajo o hacia la derecha, sin razón aparente. Justo en un nuevo tick todo el indicador se desliza repentinamente hacia abajo. Lo mismo ocurre a veces cuando se enciende el PC por primera vez.

En segundo lugar, si se borran algunos búferes y luego se compilan, los "rastros" de estas construcciones borradas permanecen hasta algunos eventos inexplicables (TF de ida y vuelta, nueva recompilación, actualización de los ajustes, etc.). ) Probablemente, hay "rastros" en la ventana de datos, que son memoria de días pasados (técnicamente los arrays se limpian sólo a la fuerza, y en MT 5 si el array no es necesario, simplemente se "desregistra", pero los datos permanecen; por supuesto, todo esto es un fallo de MT5)
--

Hay un chiste: la historia de nuestra patria no es predecible. Lo mismo se puede decir de MT5: demasiado misterioso:)
--

Por cierto, he hecho algunos cambios en mi indicador real, de acuerdo con mi última declaración. No funciona. He añadido DRAW_HISTOGRAM2 e INDICATOR_CALCULATIONS para las matrices de reflexión - funciona.

No sobre mí.

El resto - sus errores y falta de atención (excepto el cambio de línea del indicador, pero creo que se arregló, si la memoria no me falla).

¿Qué tipo de construcción tienes?

 
Vladimir Karputov:

No hay necesidad de ser aficionado - cree un Asesor Experto en blanco utilizando el Asistente MQL5 - de esta manera usted hará el menor número de errores posibles al declarar las construcciones gráficas y las matrices de indicadores.

¿Pueden decirme cómo reflejar correctamente el 8º búfer en mi último ejemplo? ¿Sin ningún tipo de amateurismo?
¿Puede decirme las reglas?

Artyom Trishkin:

No sobre mí.

El resto son errores y desatenciones tuyas (excepto el cambio de línea del indicador, pero creo que se arregló, si la memoria no me falla).

¿Cuál es su constitución?

¿Pueden decirme cómo reflejar correctamente el 8º búfer en mi último ejemplo? ¿Con el debido cuidado?
¿Y dar razones?
Construir 2530.

--
Todavía estoy aprendiendo, así que estaría muy agradecido si ustedes, caballeros, pudieran indicarme dónde leer todo esto en la documentación.

Razón de la queja: