Zeichnen eines Quadrats oder Rechtecks. Ich brauche wirklich Hilfe... - Seite 5

 
Alex_Profit:

Ich weiß nicht, wie man das macht. Können Sie mir einen Tipp geben? Die Höchstdauer beträgt einen Monat.

In die Variablet_Line. müssen wir den Wert von 1st,2nd,3rd,4th, kv einfügen.

Ich kann das nicht verstehen.

Ich würde das zu schätzen wissen.

Ohhh, was ist das für ein Programm... Haben Sie verstanden, was Sie geschrieben haben, oder was? Warum gibt es zwei Schleifen auf demselben Zähler? Überprüfen Sie zumindest den Wert der Variablen i bei jeder Iteration manuell.

Was istbarsToProcess? Wo wird sie deklariert und wie hoch ist ihr Wert? Nochmals, eine Grenze für zwei Schleifen, das führt zu nichts Gutem; man muss sich selbst schlagen, wenn man solchen Code schreibt, damit es nicht umsonst ist.

Und es macht keinen Sinn, die Balken des TF, auf dem der Chart läuft, zu zählen, um mit der Periode von MN1 zu arbeiten.

Ich glaube nicht, dass es notwendig ist, einen Indikator zu schreiben, der eine Linie pro Quartal zeichnet, während ständig auf dem Chart läuft, ich denke, für diese Aufgaben und Skript wird tun, laufen, markup Chart, entladen.

 

Ich habe ihn nicht geschrieben, sondern ich habe einen solchen Indikator gefunden und angefangen, ihn zu zerlegen. Ich habe selbst gerade erst damit angefangen, bin also noch nicht sehr gut darin. Ich habe das Benutzerhandbuch gelesen, aber es ist nicht immer nachvollziehbar. Ich fahre mit einem "Knarren". Es ist gut, dass es ein Forum gibt, in dem Sie um Rat fragen können. Es wäre schön, mit jemandem über das Thema Programmierung zu sprechen.

Ein besonderer Dank für die Kritik. Die Frage bleibt jedoch ungelöst. Trotzdem vielen Dank für Ihr Entgegenkommen.

 
Alex_Profit:

Ich habe ihn nicht geschrieben, sondern ich habe einen solchen Indikator gefunden und angefangen, ihn auseinander zu nehmen. Ich habe selbst gerade erst damit angefangen, bin also noch nicht sehr gut darin. Ich habe das Benutzerhandbuch gelesen, aber es ist nicht immer nachvollziehbar. Ich fahre mit einem "Knarren". Es ist gut, dass es ein Forum gibt, in dem Sie um Rat fragen können. Es wäre schön, mit jemandem über das Thema Programmierung zu sprechen.

Ein besonderer Dank für die Kritik. Die Frage bleibt jedoch ungelöst. Trotzdem vielen Dank für Ihr Entgegenkommen.

Nun, hier ist eine grobe Skizze, zum Beispiel, auf meinem Knie schrieb ich gerade ein schnelles Skript:

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);               //--- С типом отображения. Объект на заднем плане
      }
   }   
}

Ein kleiner Nachteil - wenn das Quartal am Wochenende beginnt, wird die Linie am letzten Balken am Freitag gezogen. Und das erste Quartal in der Historie bleibt auch ohne den Strich, wenn die Historie z.B. am 2. Hier ist die Nummer des Monats anzugeben, und wenn es nicht der 1. ist, dann ist der nächstfolgende zu nehmen.

Um alle Zeilen dieses Skripts aus dem Diagramm zu löschen, können Sie dieses Skript ausführen:

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

Sie können ein Skript in einer Schleife erstellen, bei dem das Vorhandensein einer bestimmten Linie auf dem gewünschten Balken geprüft wird, so dass nicht versucht wird, eine Linie über eine bereits gezeichnete Linie zu legen, und bei dem die Markierung beim Deinitialisieren des Skripts gelöscht wird.

Sie können auch Zeilenparameter in die Einstellungen eingeben, und vieles mehr ist möglich.

 
evillive:

Hier ist eine grobe Skizze, zum Beispiel habe ich gerade ein schnelles Skript auf meinem Knie geschrieben:

Es ist großartig. Ich danke Ihnen vielmals.

Ich frage mich, wie lange es dauert, diese Tricks zu lernen?

 

Ungefähr so lange, wie man braucht, um die Sprachreferenz zu lesen und sich zu merken, was dort steht und wo.

Dies setzt voraus, dass Sie über Programmierkenntnisse in mindestens einer der C-ähnlichen Sprachen verfügen. Es geht nicht nur um die Syntax, sondern auch darum, zu verstehen, wie das Programm "lebt", was auf was folgt.

Wenn dies nicht möglich ist, aber der Wunsch besteht, zu lernen, sollte ein Jahr mehr als genug sein.

 
evillive:

Wenn Sie das nicht haben, aber lernen wollen, sollte ein Jahr mehr als genug sein.

Ich habe verstanden.

 

Ich weiß nicht einmal, wie ich es ansprechen soll. Ich muss dem Ganzen noch den letzten Schliff verpassen. Ich habe auch noch nicht herausgefunden, wie man das macht.

Die vertikalen Linien sind gezeichnet, das ist kein Problem. Aber wie man die blauen Balken auf den hohen Balken zeichnet, ist mir immer noch ein Rätsel.

Der Versuch, die Zeile mit dem Puffer zu verbinden, hat nicht funktioniert.

Ich wäre Ihnen für Ihre Hilfe sehr dankbar.

Ich danke Ihnen.

 
Alex_Profit:

Ich weiß nicht einmal, wie ich es ansprechen soll. Ich muss dem Ganzen noch den letzten Schliff verpassen. Ich habe auch noch nicht herausgefunden, wie man das macht.

Die vertikalen Linien sind gezeichnet, das ist kein Problem. Aber wie man die blauen Balken auf den hohen Balken zeichnet, ist mir immer noch ein Rätsel.

Der Versuch, die Zeile mit dem Puffer zu verbinden, hat nicht funktioniert.

Ich wäre Ihnen für Ihre Hilfe sehr dankbar.

Ich danke Ihnen.

Zeigen Sie mir den Code, und wir werden das Problem gemeinsam beheben.
 

Treten Sie mich nicht, der Code ist "schlampig". Das habe ich bereits verstanden. Ich möchte durch Beispiele und Fehler zu einem logischen Ergebnis kommen.

Die Minimalaufgabe, sie funktioniert. Und mit der Erfahrung wird es immer "schöner".

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

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

Treten Sie mich nicht, der Code ist "schlampig". Das habe ich bereits verstanden. Ich möchte durch Beispiele und Fehler zu einem logischen Ergebnis kommen.

Die Minimalaufgabe, sie funktioniert. Und mit der Erfahrung wird es immer "schöner".

Und wo funktioniert das? Die Linien werden auf jedem Balken gezeichnet, nicht auf TK. Oder in der Abbildung oben TF=H1?

Berechne auf einem Blatt Papier, wie hoch der Grenzwert und i bei jeder Iteration der Zyklen sein werden.

Mein oben angeführtes Beispiel wird meines Erachtens nie berücksichtigt.

Die Tick-Pfeile können mit Hilfe von Indikatorpuffern gezeichnet werden, genau wie die Linien, die Kerzenschatten verbinden.