Disegnare un quadrato o un rettangolo. Davvero bisogno di aiuto... - pagina 2

 

Buon pomeriggio. Davvero bisogno di aiuto non essere in grado di capire cosa fare. Se puoi aiutare.

Ho bisogno di un indicatore che segni la prima barra di ogni mese. Con linee di prezzo alte e basse disegnate fino alla fine del mese, con una scelta del numero di mesi.

Pr. (Tre mesi. Marcatura con linee per 3 mesi). O un campione da guardare.

Grazie in anticipo.

 

Ecco un esempio di script che segna il giorno dall'apertura + e - 20 pip. Allo stesso modo, è possibile fare una definizione del mese e rispettivamente alto e basso di questo mese.

/********************************************************************\
                                                           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:

Ecco un esempio di script che segna il giorno dall'apertura + e - 20 pip. Allo stesso modo, è possibile fare una definizione del mese e rispettivamente alto e basso di questo mese.

Grazie mille, è un po' difficile ma sembra funzionare.
 

AlexeyVik: Grazie per il feedback.

Non so se ho espresso correttamente il mio rossore. Ho bisogno di qualcosa come questo.Immagine

Vi sarei molto grato se poteste aiutarmi o dirmi come implementarlo in un indicatore.

Sono nuovo nella programmazione.

Le linee verticali sono disegnate correttamente.

Non capisco come legare "linee d'orizzonte e cerchi all'alto e al basso alla prima candela".

Qualsiasi aiuto sarebbe apprezzato.

 

Leggete la documentazione sulla funzione CopyRates() e sulla struttura MqlRates. Con il loro aiuto, possiamo ottenere tutti i dati necessari per realizzare i vostri desideri.

Allora mostratemi cosa avete e cosa non potete ottenere. Altrimenti, la richiesta di aiutarvi si legge come una richiesta di farlo per voi. Scusate la franchezza.

 

Ecco il codice sorgente. Apprezzerei il vostro aiuto per perfezionarlo. Ho bisogno di trovare il massimo e il minimo di ogni prima settimana del mese.

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

#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("");

Nel mio codice, non è una candela, è un giorno. Nel vostro è una settimana.

Da questo si ricava il tempo dal quale tracciare la linea. Probabilmente hai bisogno di un mese. L'inizio del mese. Ma raramente coincide con l'inizio della settimana. Quindi bisogna fare un po' più di magia per capire come contare la prima settimana.

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

Perciò, sentite la differenza. Non c'è ancora una grande differenza in mql4, ma chissà quali cambiamenti possono aspettarci...

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

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

Notate i nomi delle linee di tendenza.

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

Ho 3 linee, per questo ho 3 funzioni e 3 nomi di linee.

 
Grazie per l'aiuto, ma non capisco tutto.
 

Allora la risposta a una sola domanda

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

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

Qui avete lo stesso nome di linea, e dovrebbe essere diverso.

Perché hai cancellato e corretto i tuoi messaggi?

 

Non hai risposto per molto tempo, ho pensato che non rispondevi a domande stupide, così le ho cancellate.

Motivazione: