Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1091

 
FiVik:

Buenas tardes. Tengo una pregunta: ¿dónde puedo ver un ejemplo de código para obtener los valores de un indicador de diferentes marcos temporales en un gráfico de precios?

No puedo buscar en Google, tal vez estoy haciendo una solicitud equivocada.

Quiero mostrar en la segunda columna del gráfico de precios la desviación estándar de las Bandas de Bollinger desde H1 hasta W1. La segunda columna muestra los valores obtenidos al multiplicar la desviación estándar por los coeficientes.

Bandas de Bollinger modificadas.

Palabras clave para la búsqueda en codobase "Multi timeframe".

El texto puede ser mostrado usando OBJ_LABEL.

 
LRA:

1. Prueba en el MetaEditor: Archivo --> Abrir carpeta de datos compartidos. Verás la ruta de la carpeta. Este tema se ha discutido muchas veces, aquí hay un enlace por ejemplo

2. Inténtalo sin incluirlo al principio. Cuando lo depures, empezarás a incluirlo.

3. Inserte aquí sus fuentes, ya sea utilizando el botón SRC de arriba, o utilizando el botón de Adjuntar archivo de abajo.

Muchas gracias.
 

Por favor, indique cómo dibujar una línea horizontal en el precio de apertura de la barra a las 07:00.

He escrito este código, pero la línea no se dibuja por alguna razón. ¿Dónde está el error?

extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {       
   ObjectCreate(ChartID(),"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(ChartID(),"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(ChartID(),PERIOD_H1, StringToTime(StartTime), true); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
   return(0);
   }
 
RichLux:

Por favor, indique cómo dibujar una línea horizontal en el precio de apertura de la barra a las 07:00.

He escrito este código, pero la línea no se dibuja por alguna razón. ¿Dónde está el error?

¿Si se elimina ObjectMove, la línea es visible? Pruebe con Alert(StartPrice);
 
LRA:
¿Si se elimina ObjectMove, la línea es visible? Pruebe con Alert(StartPrice);

Si se elimina ObjectMove, no se puede ver la línea, pero si seescribe un valor numérico en lugar de "IndexOfBar", por ejemplo, "double StartPrice = Open[5];" se dibuja la línea en el precio de apertura de la quinta barra.

Gracias por la idea con la Alerta - muestra el valor "0".

Por cierto, la línea también existe en la lista de objetos con el valor 0.

 
RichLux:

Por favor, indique cómo dibujar una línea horizontal en el precio de apertura de la barra a las 07:00.

He escrito este código, pero la línea no se dibuja por alguna razón. ¿Dónde está el error?

No se puede dibujar y calcular en el inite, es un grave error. El inite debe terminar su trabajo lo más rápido posible.

El error aquí -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //leer el índice de la barra por el tiempo dado StartTime

La hora puede establecerse directamente en formato datetime, sin necesidad de perder tiempo de máquina en la conversión, funciona así:

#property strict
#property  show_inputs

extern datetime StartTime = D'07:00';          //Начальное время для анализа, 00:00 EST
extern datetime AlTime = D'18:55';          //Время для трейдинга
extern datetime EndTime   = D'20:00';          //Время экспирации
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
{       
   ObjectCreate(0,"CORDON",OBJ_HLINE,0,0,Ask);        //созд гор линию по цене Ask
   
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,clrDarkBlue);  //цвет темно-сиий
      
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
      
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош
   
   int IndexOfBar = iBarShift(_Symbol,0, StartTime, false); //Считаем индекс бара по заданному времени StartTime
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   Print(IndexOfBar,", ",StartPrice);
   ObjectMove(0,"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
   
 
evillive:

No se puede dibujar y calcular en el init, es un grave error. El init debe terminar su trabajo lo antes posible.

El error aquí -int IndexOfBar = iBarShift(ChartID()_Symbol,PERIOD_H1, StringToTime(StartTime), true); //leer el índice de la barra por el tiempo especificado StartTime

La hora puede establecerse directamente en formato datetime, sin necesidad de perder tiempo de máquina en la conversión, funciona así:

Gracias por los valiosos consejos para mí.

Y un agradecimiento especial por subirme la moral al encontrar el error. Estoy empezando a creer de nuevo que puedo hacer amigos con MQL4

 
RichLux: versión del código no funciona. La línea del gráfico sigue sin aparecer...
// Вставил такой код в скрипт - линию рисует синюю на черном графике слабо видно
#property strict                                                       // -------- Возможно, Дело в этой строке
        
extern string StartTime = "07:00";          //Начальное время для анализа, 00:00 EST
extern string AlTime = "18:55";          //Время для трейдинга
extern string EndTime   = "20:00";          //Время экспирации
void OnStart()
{
   ObjectCreate("CORDON",OBJ_HLINE,0,0,Ask);    //созд гор линию по цене Ask   --- Для текущего графика ID пропускаем
   ObjectSetInteger(0,"CORDON",OBJPROP_COLOR,DarkBlue);  //цвет темно-сиий  --- 0 = текущий график   DarkBlue - то же самое
   ObjectSetInteger(0,"CORDON",OBJPROP_WIDTH,1);  //толщина линии 1
   ObjectSetInteger(0,"CORDON",OBJPROP_STYLE,STYLE_SOLID);  //линия сплош

   // Первый параметр нужен типа string, а функция ChartID возвращает long
   int IndexOfBar = iBarShift(NULL,PERIOD_H1, StringToTime(StartTime), true); //  --- NULL = текущий график  ЗДЕСЬ И БЫЛА ОШИБКА???
   double StartPrice = Open[IndexOfBar];                    //Получаем цену по индексу
   ObjectMove(ChartID(),"CORDON", 0, 0, StartPrice);          // меняем распол линии   
}
 
evillive:

No se puede dibujar y calcular en el init, es un grave error. El init debe completarse lo más rápidamente posible.


¿Y si se toman los cálculos del inite en una función separada y luego se inserta esta función en el inite, no será un error grave?

LRA:

Ya funciona.

 
RichLux:

¿Y si se toman los cálculos del inite en una función separada, y luego se inserta esta función en el inite, no será un error grave?

Si el código se ejecuta demasiado tiempo, el inite terminará forzosamente y el código simplemente no tendrá tiempo de ejecutarse. El código ejecutado, incluyendo las llamadas de funciones secundarias, debe estar en las funciones predefinidas de MQL - OnTick() para Asesores Expertos, OnStart() para scripts, OnCalculate() para indicadores.

El inite debe contener el mínimo de código, sólo aquellas cosas que deben ser ejecutadas una vez, justo antes del inicio del programa. Por ejemplo, la inicialización de variables globales, arrays, buffers de indicadores.