Dibujar un cuadrado o un rectángulo. Realmente necesito ayuda... - página 5

 
Alex_Profit:

No sé cómo hacerlo. ¿Puedes darme una pista? El periodo máximo es de un mes.

En la variablet_Line. tenemos que insertar el valor de la 1ª,2ª,3ª,4ª, kv.

No puedo entenderlo.

Se lo agradecería.

Ohhh, qué programa es este... ¿Has entendido lo que has escrito o qué? ¿Por qué hay dos bucles en el mismo contador? Al menos comprueba manualmente el valor de la variable i en cada iteración.

¿Qué esbarsToProcess? ¿Dónde se declara y a qué equivale? Una vez más, un límite para dos bucles, no conduce a nada bueno; debes vencerte a ti mismo cuando escribas código así, para que no se haga en vano.

Y no tiene sentido contar las barras del TF, en el que se está ejecutando el gráfico, para trabajar con el período de MN1.

No creo que sea necesario escribir un indicador que dibuja una línea por trimestre, mientras se ejecuta constantemente en el gráfico, creo que para tales tareas y la secuencia de comandos va a hacer, corrió, marcó el gráfico, descargado.

 

Yo no lo escribí. Encontré un indicador como éste y empecé a desmontarlo. Yo mismo acabo de empezar, así que no soy muy bueno en esto. He leído el manual de usuario pero no siempre es comprensible. Estoy conduciendo con un "crujido". Es bueno que haya un foro en el que se pueda pedir consejo. Estaría bien hablar con alguien sobre el tema de la programación.

Un agradecimiento especial por la crítica. Sin embargo, la cuestión sigue sin resolverse. Gracias de todos modos por su capacidad de respuesta.

 
Alex_Profit:

Yo no lo escribí. Encontré un indicador como éste y empecé a desmontarlo. Yo mismo acabo de empezar, así que no soy muy bueno en esto. He leído el manual de usuario pero no siempre es comprensible. Estoy conduciendo con un "crujido". Es bueno que haya un foro en el que se pueda pedir consejo. Estaría bien hablar con alguien sobre el tema de la programación.

Un agradecimiento especial por la crítica. Sin embargo, la cuestión sigue sin resolverse. No obstante, gracias por su capacidad de respuesta.

Bueno, aquí está un boceto, por ejemplo, en mi rodilla acaba de escribir un guión rápido:

void OnStart()
{
   int limit=iBars(_Symbol,PERIOD_MN1);
   for(int i=0;i<=limit;i++)
   {
      datetime timemn=iTime(_Symbol,PERIOD_MN1,i);
      int  month=TimeMonth(timemn);
      if(month==1 || month==4 || month==7 || month==10)
      {
         int qt=0;
         switch(month)
         {
            default:break;
            case 1: qt=1;break;
            case 4: qt=2;break;
            case 7: qt=3;break;
            case 10: qt=4;break;
         }
 
         string name=StringConcatenate("Qt"+IntegerToString(qt)+", "+TimeToStr(timemn));
         ObjectCreate (name,OBJ_VLINE,0,timemn,0);         //--- Создаём обьект вертикальную линию
         ObjectSet    (name,OBJPROP_STYLE,2);              //--- Со стилем
         ObjectSet    (name,OBJPROP_COLOR,DimGray);        //--- Со цветом  
         ObjectSet    (name,OBJPROP_WIDTH,0);              //--- С  толщиной
         ObjectSet    (name,OBJPROP_BACK,0);               //--- С типом отображения. Объект на заднем плане
      }
   }   
}

Un pequeño inconveniente: si el trimestre comienza en fin de semana, la línea se traza en la última barra del viernes. Y el primer trimestre en el historial también permanecerá sin la línea, si, por ejemplo, el historial comienza el día 2. Se trata de especificar el número del mes y si no es el 1, se tomará el siguiente.

Para eliminar todas las líneas de este script del gráfico, puede ejecutar este script:

void OnStart()
{
     ObjectsDeleteAll(0,"Qt");
}

Se puede hacer un script en bucle, con comprobación de la existencia de una línea concreta en la barra deseada, para que no se intente poner una línea sobre otra ya dibujada y con borrado de la marca al desinicializar el script.

También se pueden poner parámetros de línea en los ajustes, y se puede hacer mucho más.

 
evillive:

Aquí hay un boceto, por ejemplo, acabo de escribir un guión rápido en mi rodilla:

Es genial. Muchas gracias.

Me pregunto cuánto tiempo se tarda en aprender estos trucos.

 

Más o menos lo que se tarda en leer la referencia lingüística y recordar qué hay y dónde.

Esto supone que tienes conocimientos de programación en al menos uno de los lenguajes tipo C. Las habilidades no se limitan a la sintaxis, sino que hay que entender cómo va a "vivir" el programa, qué sigue a qué.

Si no se dispone de ello, pero hay ganas de aprender, un año debería ser más que suficiente.

 
evillive:

Si no tienes eso, pero quieres aprender, un año debería ser más que suficiente.

Lo entiendo.

 

Ni siquiera sé cómo abordarlo. Tengo que darle los últimos retoques. Yo tampoco sé cómo hacerlo todavía.

Las líneas verticales están dibujadas, no hay problema con eso. Pero cómo dibujar las barras azules en las barras altas sigue siendo un misterio para mí.

La línea es del día. Intentar ligarla al buffer no funcionó.

Le agradecería enormemente su ayuda.

Gracias.

 
Alex_Profit:

Ni siquiera sé cómo abordarlo. Tengo que darle los últimos retoques. Yo tampoco sé cómo hacerlo todavía.

Las líneas verticales están dibujadas, no hay problema con eso. Pero cómo dibujar las barras azules en las barras altas sigue siendo un misterio para mí.

La línea es del día. Intentar ligarla al buffer no funcionó.

Le agradecería enormemente su ayuda.

Gracias.

Muéstranos el código y lo arreglaremos juntos.
 

No me des una patada, el código es "descuidado". Ya lo he entendido. Me gustaría llegar a un resultado lógico con ejemplos y errores.

La tarea mínima, funciona. Y con la experiencia se hará más "bonito".

//+------------------------------------------------------------------+

#property strict

#property indicator_chart_window

   

    //---  Внешние Глобальные переменные 

extern int     barsToProcess = 5;        //--- Кол-во отображаемых периодов (линий) 


    //---  Глобальные переменные    

string Name_VLine;     //--- Имя Элементов

string Name_CHECK;     //--- Имя Элементов


//MqlDateTime mqlDateTime;

MqlRates    mqlRates[1];


//+------------------------------------------------------------------+

int init()

  {  

    return(0);

  }

//+------------------------------------------------------------------+

int deinit()

  {

   int i;  

         for (i=0; i<Bars; i++)                              //--- Выбираем все установленные объекты  

           {

              ObjectDelete(Name_VLine + " VLine"  + DoubleToStr(i,0));          //--- Удаляем все объекты

              ObjectDelete(Name_CHECK + "H_CHECK"  + DoubleToStr(i,0));  //--- Удаляем все объекты

              ObjectDelete(Name_CHECK + "L_CHECK"  + DoubleToStr(i,0));  //--- Удаляем все объекты

           }       

   return(0);

  }

//+------------------------------------------------------------------+

int start()

{                  

int counted_bars = IndicatorCounted();     //--- перем counted_bars = функц.  Возвращает количество баров

int limit;                                 //--- переменная  старт кол-во баров. Линии рисуем о по всем барам

   

if(counted_bars > 0) counted_bars --;      //--- последний посчитанный бар будет пересчитан 

  //--- основной цикл 

  limit = Bars - counted_bars;         

  for(int i = 0; i < limit; i ++)

      {

      

 //+------------------------ При выборе кол-ва линий отобразим их ко-во------------------------+                 

         if(limit > barsToProcess)                                     //--- Если кол-во линий > Кол-ву отображаемых периодов (линий) 

         {

          limit = barsToProcess;                                      //--- Тогда устанавливаем Кол-во отображаемых периодов (линий)

             while (i<limit)                                           //--- Пока есть линии в окне терминала. Или пока висит индикатор в окне терминала.                        

             {   

               datetime t_Line = iTime(Symbol(),PERIOD_H4,i);         //--- В ПЕРЕМ t_Line Будет Присваиваться значение времени открытия бара

               CopyRates(_Symbol, PERIOD_H4, t_Line, 1, mqlRates);

   {


         //--- кубики по хай (В место галочек нужно подставить кубики)

         ObjectCreate    (0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].high, t_Line,mqlRates[0].high);

         ObjectSetInteger(0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); 

   

         //--- кубики по лоу (В место галочек нужно подставить кубики)

         ObjectCreate    (0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].low, t_Line,mqlRates[0].low);

         ObjectSetInteger(0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); 

        

    //+------------------------ Рисуем вертикальную линии -----------------------------------------------------+                 

    ObjectCreate (Name_VLine + " VLine" + DoubleToStr(i,0),OBJ_VLINE,0,t_Line,0);         //--- Создаём обьект вертикальную линию

    ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_STYLE,2);              //--- Со стилем

    ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_COLOR,DimGray);        //--- Со цветом  

    ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_WIDTH,0);              //--- С  толщиной

    ObjectSet    (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_BACK,0);               //--- С типом отображения. Объект на заднем плане

 }

  i++;

             }

          }

      }

      

   return(0);

}


 
Alex_Profit:

No me des una patada, el código es "descuidado". Ya lo he entendido. Me gustaría llegar a un resultado lógico mediante ejemplos y errores.

La tarea mínima, funciona. Y con la experiencia se hará más "bonito".

Bueno, ¿dónde funciona? Las líneas se dibujan en cada barra, no en TK. ¿O en la imagen anterior TF=H1?

Calcula en un papel a qué límite e i en cada iteración de ciclos serán iguales.

Mi ejemplo mostrado arriba nunca se contabiliza, según tengo entendido.

Las flechas de los ticks se pueden dibujar utilizando los buffers de los indicadores, al igual que las líneas que conectan las sombras de las velas.