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

 
Artyom Trishkin #:
Y también: https://www.mql5.com/ru/articles/503
Muchas gracias.
 

Buenas tardes.

¿Podría decirme por qué es necesaria la prueba de avance?

¿No es equivalente a una simple optimización en un intervalo completo?
 

¡Buenas tardes programadores! Por favor ayúdenme con un script. Necesito que el script dibuje multitud de líneas verticales en el gráfico para una lista de fechas. Es decir, por ejemplo: introduzco en el cuerpo del código, una lista de 100 fechas por ejemplo, y el script se limita a dibujar una línea vertical para cada fecha.

Empecé a intentar algo aquí, pero de alguna manera resulta ser muy engorroso, y es sólo una línea.

#property strict
//--- описание
#property description "Скрипт строит графический объект \"Вертикальная линия\"."
#property description "Дата точки привязки задается в процентах от ширины"
#property description "окна графика в барах."
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры скрипта
input string          InpName="VLine";     // Имя линии
input int             InpDate=25;          // Дата линии в %
input color           InpColor=clrRed;     // Цвет линии
input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Стиль линии
input int             InpWidth=3;          // Толщина линии
input bool            InpBack=false;       // Линия на заднем плане
input bool            InpSelection=true;   // Выделить для перемещений
input bool            InpHidden=true;      // Скрыт в списке объектов
 
//+------------------------------------------------------------------+
//| Создает вертикальную линию                                       |
//+------------------------------------------------------------------+
bool VLineCreate(const long            chart_ID=0,        // ID графика
                 const string          name="VLine",      // имя линии
                 const int             sub_window=0,      // номер подокна
                 datetime              time=0,            // время линии
                 const color           clr=clrRed,        // цвет линии
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии
                 const int             width=1,           // толщина линии
                 const bool            back=false,        // на заднем плане
                 const bool            selection=true,    // выделить для перемещений
                 const bool            hidden=true)       // скрыт в списке объектов
           
  {
//--- если время линии не задано, то проводим ее через последний бар

      time=TimeCurrent();


 ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0);
    
     
     
//--- установим цвет линии
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линии
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения линии мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
 
   return(true);
  }
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
 

 
 datetime time=TimeCurrent();
      
//--- создадим вертикальную линию
VLineCreate(0,InpName,0,time,InpColor,InpStyle,InpWidth,InpBack,
      InpSelection,InpHidden);
      
return;
 }
 
Alexey Belyakov #:

¡Buenas tardes programadores! Por favor ayúdenme con un script. Necesito que el script dibuje multitud de líneas verticales en el gráfico para una lista de fechas. Es decir, por ejemplo: introduzco en el cuerpo del código, una lista de 100 fechas por ejemplo, y el script se limita a dibujar una línea vertical para cada fecha.

Empecé a intentar algo aquí, pero de alguna manera resulta ser muy engorroso, y es sólo una línea.

La fecha en cadena a través del separador.

A continuación, dividir esta cadena en una matriz.

A continuación, bucle a través de la matriz en cada iteración llamando a

VLineCreate
 

Gracias. Como soy un programador muy superficial. Empezaré preguntando por orden.

"Poner la fecha en cadena con un delimitador".

Usa " cadena TimeToString( ""

????

 
Alexey Belyakov TimeToString( ""

????

No necesitas convertir nada a cadena para dibujar una línea.

Has descrito el problema, pero no lo has descrito completamente, así que la gente tiene que averiguarlo.

¿Cómo vas a registrar 100 fechas?

¿Vas a escribirlas en el cuerpo del script?

datetime time1 = D'2021.11.15 00:00:00';
datetime time2 = D'2022.11.15 00:00:00';
datetime time3 = D'2023.11.15 00:00:00';
// в этом случае так делаем
VLineCreate(0, InpName, 0, time1, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, InpName, 0, time2, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, InpName, 0, time3, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);

¿O va a introducirlas manualmente al iniciar el Asesor Experto?

input datetime time1 = D'2021.11.15 00:00:00';
input datetime time2 = D'2022.11.15 00:00:00';
input datetime time3 = D'2023.11.15 00:00:00';
//в этом случае можно сделать так или без массива прописать функцию линии для каждой даты как написано выше
void OnStart(void)
  {
   datetime time[100];

   time[0] = time1;
   time[1] = time2;
   time[2] = time3;

   for(int i = 0; i < 3; i++)
      VLineCreate(0, "InpName" + (string)i, 0, time[i], InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
  }
 
Aleksandr Slavskii #:

No es necesario convertir nada en cadena para dibujar una línea.

Has descrito la tarea, pero no la has descrito completamente, así que la gente tiene que adivinar.

¿Cómo vas a registrar 100 fechas?

¿Vas a escribirlas en el cuerpo del guión?

¿o las vas a introducir manualmente al lanzar el Asesor Experto?

Lo he comprobado. El segundo caso está bien, pero no es adecuado debido a la necesidad de introducir cada fecha en la ventana manualmente, lo que lleva mucho tiempo. Debería ser simple... "ctrl-c, ctrl-v".

En el primer caso, por alguna razón no dibuja 3 líneas, sino sólo una, en la vela más reciente. Por qué, no está claro todavía, lo estoy investigando.

 
Alexey Belyakov #:

Comprobado. El segundo caso está bien, pero no es adecuado por la necesidad de introducir cada fecha en la ventana manualmente, lo que lleva mucho tiempo. Debería ser simple... "ctrl-c, ctrl-v".

En el primer caso, por alguna razón no dibuja 3 líneas, sino sólo una, en la vela más reciente. Por qué, no está claro todavía, lo estoy investigando.

El nombre de la línea debe ser único. Me perdí este punto

 

const string name="VLine,VLine2,VLine3", // nombre de la línea

Hice el nombre de línea único. En la entrada también. No ayuda.

 
Alexey Belyakov #:

const string name="VLine,VLine2,VLine3", // nombre de la línea

Hice el nombre de línea único. En la entrada también. No ayuda.

datetime time1 = D'2021.11.15 00:00:00';
datetime time2 = D'2022.11.15 00:00:00';
datetime time3 = D'2023.11.15 00:00:00';
// в этом случае так делаем
VLineCreate(0, "InpName1", 0, time1, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, "InpName2", 0, time2, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);
VLineCreate(0, "InpName3", 0, time3, InpColor, InpStyle, InpWidth, InpBack, InpSelection, InpHidden);

Usted hizo el nombre en algún lugar equivocado, y no así).