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

 
Alex_Profit:

Non so come fare. Puoi darmi un suggerimento? Il periodo massimo è un mese.

Nella variabilet_Line dobbiamo inserire il valore di 1st, 2nd, 3rd, 4th, kv.

Non riesco a capire.

Lo apprezzerei molto.

Ohhh, che programma è questo... Hai capito o no quello che hai scritto? Perché ci sono due cicli sullo stesso contatore? Almeno controllate manualmente il valore della variabile i ad ogni iterazione.

Cos'èbarsToProcess? Dove è dichiarato e a cosa è uguale? Di nuovo, un limite per due loop, non porta a niente di buono; bisogna battersi quando si scrive codice come questo, in modo che non sia fatto invano.

E non ha senso contare le barre del TF su cui gira il grafico per lavorare con il periodo di MN1.

Non credo che sia necessario scrivere un indicatore che disegna una linea per trimestre, mentre in esecuzione costantemente sul grafico, penso per tali compiti e lo script farà, eseguito, segnato il grafico, scaricato.

 

Non l'ho scritto io, ho trovato un indicatore come questo e ho iniziato a smontarlo. Io stesso ho appena iniziato, quindi non sono molto bravo. Ho letto il manuale utente ma non è sempre comprensibile. Sto guidando con uno "scricchiolio". È bene che ci sia un forum dove puoi chiedere consigli. Sarebbe bello parlare con qualcuno sul tema della programmazione.

Un ringraziamento speciale per la critica. Tuttavia, la questione rimane irrisolta. Grazie comunque per la vostra reattività.

 
Alex_Profit:

Non l'ho scritto io, ho trovato un indicatore come questo e ho iniziato a smontarlo. Io stesso ho appena iniziato, quindi non sono molto bravo. Ho letto il manuale utente ma non è sempre comprensibile. Sto guidando con uno "scricchiolio". È bene che ci sia un forum dove puoi chiedere consigli. Sarebbe bello parlare con qualcuno sul tema della programmazione.

Un ringraziamento speciale per la critica. Tuttavia, la questione rimane irrisolta. Grazie comunque per la vostra reattività.

Beh, ecco uno schizzo approssimativo, per esempio, sul mio ginocchio ha appena scritto una sceneggiatura veloce:

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 piccolo inconveniente: se il trimestre inizia nel fine settimana, la linea viene disegnata sull'ultima barra del venerdì. E il primo trimestre nella storia rimarrà anche senza la linea, se, per esempio, la storia inizia il 2° giorno. Questo è per specificare il numero del mese e se non è il 1°, allora dovrebbe essere preso il successivo.

Per eliminare tutte le linee di questo script dal grafico, potete eseguire questo script:

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

Si può fare uno script in loop, con il controllo dell'esistenza di una linea particolare sulla barra desiderata, in modo che non ci siano tentativi di mettere una linea sopra una già disegnata e con la cancellazione del markup alla deinizializzazione dello script.

Si possono anche mettere parametri di linea nelle impostazioni, e si può fare molto di più.

 
evillive:

Ecco uno schizzo approssimativo, per esempio, ho appena scritto una sceneggiatura veloce sul mio ginocchio:

È fantastico. Grazie mille.

Mi chiedo quanto tempo ci voglia per imparare questi trucchi?

 

Circa il tempo necessario per leggere il riferimento linguistico e ricordare cosa c'è e dove.

Questo presuppone che abbiate competenze di programmazione in almeno uno dei linguaggi simili al C. Le competenze non sono solo nella sintassi, bisogna capire come il programma "vivrà", cosa segue cosa.

Se questo non è disponibile, ma c'è il desiderio di imparare, un anno dovrebbe essere più che sufficiente.

 
evillive:

Se non lo avete, ma volete imparare, un anno dovrebbe essere più che sufficiente.

Ho capito.

 

Non so nemmeno come affrontarlo. Ho bisogno di dare gli ultimi ritocchi. Anch'io non riesco ancora a capire come fare.

Le linee verticali sono disegnate, nessun problema. Ma come disegnare le barre blu sulle barre alte è ancora un mistero per me.

Provare a legarlo al buffer non ha funzionato.

Vi sarei estremamente grato per la vostra assistenza.

Grazie.

 
Alex_Profit:

Non so nemmeno come affrontarlo. Ho bisogno di dare gli ultimi ritocchi. Anch'io non riesco ancora a capire come fare.

Le linee verticali sono disegnate, nessun problema. Ma come disegnare le barre blu sulle barre alte è ancora un mistero per me.

Provare a legarlo al buffer non ha funzionato.

Vi sarei estremamente grato per la vostra assistenza.

Grazie.

Mostraci il codice e lo sistemeremo insieme.
 

Non prendetemi a calci, il codice è "sciatto". L'ho già capito. Vorrei raggiungere un risultato logico con esempi ed errori.

Il compito minimo, funziona. E con l'esperienza diventerà più "bella".

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

#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:

Non prendetemi a calci, il codice è "sciatto". L'ho già capito. Vorrei raggiungere un risultato logico attraverso esempi ed errori.

Il compito minimo, funziona. E con l'esperienza diventerà più "bella".

Beh, dove funziona? Le linee sono disegnate su ogni barra, non su TK. O nell'immagine sopra TF=H1?

Calcolate su un pezzo di carta a quale limite e i ad ogni iterazione di cicli sarà uguale.

Il mio esempio mostrato sopra non viene mai contabilizzato, per quanto ne so.

Le frecce di tick possono essere disegnate usando i buffer degli indicatori, proprio come le linee che collegano le ombre delle candele.

Motivazione: