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

 

Buenas tardes. Realmente necesito ayuda para no saber qué hacer. Si puedes ayudar.

Necesito un indicador que marque la primera barra de cada mes. Con líneas de precios altas y bajas trazadas hasta el final del mes, con un número de meses a elegir.

Pr.(Tres meses. Marcado con líneas durante 3 meses ). O una muestra para mirar.

Gracias de antemano.

 

Aquí hay un ejemplo de script que marca el día desde la apertura + y - 20 pips. Del mismo modo, se puede hacer una definición del mes y, respectivamente, alta y baja de este mes.

/********************************************************************\
                                                           20-20.mq4 |
                                                            Viktorov |
                                                   v4forex@yandex.ru |
\********************************************************************/
#property copyright "Viktorov"
#property link      "v4forex@yandex.ru"
#property version   "1.00"

MqlDateTime mqlDateTime;
MqlRates    mqlRates[1];
/********************Script program start function*******************/
void OnStart()
{
  double point = _Digits%2 == 0 ? _Point : _Point*10;
   datetime dt = ChartTimeOnDropped();
    TimeToStruct(ChartTimeOnDropped(), mqlDateTime);
     if(CopyRates(_Symbol, PERIOD_D1, dt, 1, mqlRates) < 0)
      Print("");
       string objName = TimeToString(mqlRates[0].time, TIME_DATE);
        ObjectCreate(0, objName, OBJ_TREND, 0, mqlRates[0].time, mqlRates[0].open, mqlRates[0].time+PeriodSeconds(PERIOD_D1), mqlRates[0].open);
        ObjectSetInteger(0, objName, OBJPROP_RAY_RIGHT, false);
       ObjectCreate(0, objName+"+20", OBJ_TREND, 0, mqlRates[0].time, mqlRates[0].open+20*point, mqlRates[0].time+PeriodSeconds(PERIOD_D1), mqlRates[0].open+20*point);
      ObjectSetInteger(0, objName+"+20", OBJPROP_RAY_RIGHT, false);
     ObjectCreate(0, objName+"-20", OBJ_TREND, 0, mqlRates[0].time, mqlRates[0].open-20*point, mqlRates[0].time+PeriodSeconds(PERIOD_D1), mqlRates[0].open-20*point);
    ObjectSetInteger(0, objName+"-20", OBJPROP_RAY_RIGHT, false);
   Comment(mqlRates[0].open, "\n"
         , objName, "\n"
         , sizeof(mqlDateTime), "\n"
         );
}/*******************************************************************/
 
AlexeyVik:

Aquí hay un ejemplo de script que marca el día desde la apertura + y - 20 pips. Del mismo modo, se puede hacer una definición del mes y, respectivamente, alta y baja de este mes.

Muchas gracias, es un poco difícil pero parece que funciona.
 

AlexeyVik: Gracias por los comentarios.

No sé si he expresado correctamente mi nivel. Necesito algo así.Imagen

Os agradecería mucho que me ayudarais o me dijerais cómo implementarlo en un indicador.

Soy nuevo en la programación.

Las líneas verticales están dibujadas correctamente.

No entiendo cómo se vinculan las "líneas del horizonte y los círculos a la alta y la baja a la primera vela".

Se agradecería cualquier ayuda.

 

Lea la documentación sobre la función CopyRates() y la estructura MqlRates. Con su ayuda, podemos obtener todos los datos necesarios para poner en práctica sus deseos.

Entonces muéstrame lo que tienes y lo que no puedes conseguir. De lo contrario, la petición de ayuda se lee como una petición de hacerlo por ti. Perdón por ser tan directo.

 

Aquí está el código fuente. Agradecería su ayuda para perfeccionarla. Necesito encontrar el máximo y el mínimo de cada primera semana del mes.

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

#property copyright ""

#property link      ""


#property indicator_chart_window

   

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

extern int     TF = 43200;               //--- Через сколько баров рисуются линии (На каком Т/Ф)

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

extern string  TimeFrames = "M1,5,15,30; 60H1; 240H4; 1440D1; 10080W1; 43200MN.";  //--- Подсказка кол-во боров в Т/Ф


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

string    Name_Line;         //--- Имя Вертикальных уровней


//double    Price_H = High[0]; //--- Макс цены  

//double    Price_L = Low[0];  //--- Мин цены




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

int init()

  {  

   //--- 

        return(0);

  }

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

int deinit()

  {

   int i;  

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

           {

              ObjectDelete(Name_Line + DoubleToStr(i,0));        //--- Удаляем все установленные линии

           }       

   return(0);

  }

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

int start()

{                  

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

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

int i=0;                                   //--- переменная i = 0 обнуление

   

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

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

  limit = Bars - counted_bars;         

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

      {  

         //+-----  Выбираем количество линий отображаемых на экране 

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

         {

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

           Name_Line = "Time_VLine M" + TF + " "+DoubleToStr(i,0);      //--- И присваиваем имя с соответствующими параметрами 

 //+------------------------ Рисуем линии -----------------------------------------------------+                 

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

             {   

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


                   {

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

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

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

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

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

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

                   }

                    i++;

             }

          }

      }

      

return(0);


}


 
     if(CopyRates(_Symbol, PERIOD_W1, dt, 1, mqlRates) < 0)        //--- Если бросили скрипт на выбранную свечку

      Print("");

En mi código, no es una vela, es un día. En el tuyo es una semana.

De ahí se obtiene el tiempo a partir del cual se traza la línea. Probablemente necesites un mes. El principio del mes. Pero rara vez coincide con el inicio de la semana. Así que hay que hacer un poco más de magia para saber cómo contar la primera semana.

        ObjectCreate(0, objName, OBJ_TREND, 0, mqlRates[0].time + PERIOD_MN1, mqlRates[0].high, mqlRates[0].time + PeriodSeconds(PERIOD_MN1), mqlRates[0].high); 

Por decirlo así, siente la diferencia. Todavía no hay una gran diferencia en mql4, pero quién sabe qué cambios pueden esperarnos...

//--- Что здесь не так, при построении линии по лоу. На графике её нет. И Ошибки компиляции тоже нет? 

 //--- НО по отдельности всё работает.     

Observe los nombres de las líneas de tendencia.

 //----- Для чего нужен этот блок если линия отрисовывается на графике и без него   

Tengo 3 líneas, por eso tengo 3 funciones y 3 nombres de líneas.

 
Gracias por la ayuda, pero no lo entiendo todo.
 

Entonces la respuesta a una sola pregunta

//--- Что здесь не так, при построении линии по лоу. На графике её нет. И Ошибки компиляции тоже нет? 

 //--- НО по отдельности всё работает.     

Tienes el mismo nombre de línea aquí, y debería ser diferente.

¿Por qué ha borrado y corregido sus mensajes?

 

No contestaste durante mucho tiempo, pensé que no respondías a preguntas estúpidas, así que las borré.

Razón de la queja: