OBJ_VLINE

 

Hallo,

Dies ist mein erstes Mal, dass ich grafische Objekte in einem Indikator verwende. Ich müsste jeden Tag zur gleichen Zeit "22:00" eine vertikale Linie zeichnen, könnten Sie mir bitte eine Lösung zeigen?

Danke

 
desert:

Hallo,

Dies ist mein erstes Mal, dass ich grafische Objekte in einem Indikator verwende. Ich müsste jeden Tag zur gleichen Zeit "22:00" eine vertikale Linie zeichnen, könnten Sie mir bitte eine Lösung zeigen?

Vielen Dank

Verwenden Sie Cycles anstelle von VLine.

Mit freundlichen Grüßen, Luke

 
for (int shift22=0; shift22<Bars && TimeHour(Time[shift22])!=22; shift22++){}
VLine("2200", Time[shift22] %3600, Red); // %3600 needed for M30 and lower
===================================
void vLine(string name, datetime T0, color clr){        #define WINDOW_MAIN 0
    if (!Show.Objects)  return;
    /**/ if (ObjectMove( name, 0, T0, 0 )){}
    else if(!ObjectCreate( name, OBJ_VLINE, WINDOW_MAIN, T0, 0 ))
        Alert("ObjectCreate(",name,",VLINE) failed: ", GetLastError() );
    if (!ObjectSet(name, OBJPROP_COLOR, clr )) // Allow color change
        Alert("ObjectSet(", name, ",Color) [1] failed: ", GetLastError() );
    if (!ObjectSetText(name, TimeToStr(T0, TIME_MINUTES), 10))
        Alert("ObjectSetText(",name,") [1] failed: ", GetLastError());
}
 

Hallo Leute,

Ich konnte das Problem mit anderen Code zu lösen (wirklich konnte ich nicht anwenden, die Lösungen oben gegeben), aber überhaupt nicht.

Jetzt bekomme ich vertikale Linien für alle vorherigen 22:00 Kerzen, aber ich brauche die Linie in der kommenden 22:00 Kerze auf der rechten Seite des Preises (Zukunft), wie könnte ich das bekommen?

Dies ist der Code:

...

for (shift=NumBars;shift>=0;shift--)

{
if (TimeHour(Time[shift])== Offset && TimeMinute(Time[shift])==0)
{
if(ObjectFind("Offset "+shift) != 0)
{
ObjectCreate("Offset "+shift, OBJ_VLINE, 0, Time[shift], 0);
ObjectSet("Versatz "+Verschiebung, OBJPROP_STYLE, STYLE_DASHDOTDOT);
ObjectSet("Versatz "+Verschiebung, OBJPROP_COLOR, Weiß);
}
}

}

Hilfe!

Danke :)

 

Bitte benutzen Sie dies, um den Code zu posten. . das macht es einfacher zu lesen.

 
desert:
Jetzt bekomme ich vertikale Linien für alle vorherigen 22:00 Kerzen, aber ich brauche die Linie in der kommenden 22:00 Kerze auf der rechten Seite des Preises (Zukunft), wie könnte ich das bekommen?
  1. Seien Sie das nächste Mal präziser mit Ihrer ursprünglichen Frage.
  2. datetime now = Time[0],
             bod = now - now % 86400,  // Beginning of the day
             Hr22= bod + 22 * 3600;    // 2200
    VLine("2200", Hr22, Red);
 
WHRoeder:
  1. Nächstes Mal sollten Sie Ihre ursprüngliche Frage genauer formulieren.
Ich danke Ihnen vielmals!
 

Ist es möglich, vertikale Linien auf der rechten Seite des Diagramms vom aktuellen Kurs weg zu zeichnen, wenn man nur das Datum kennt?

Nehmen wir zum Beispiel an, die aktuelle Zeit ist 2019.05.17 00:00, und ich möchte eine vertikale Linie in der Zukunft um 2019.06.04 16:00 zeichnen, indem ich nur die Datumsinformation verwende?

 

Ja.

Use ObjectCreate( and OBJ_VLINE

Oder verwenden Sie zum Beispiel diese Funktion:

//+------------------------------------------------------------------+ 
//| Create the vertical line                                         | 
//+------------------------------------------------------------------+ 
bool VLineCreate(const long            chart_ID=0,        // chart's ID 
                 const string          name="VLine",      // line name 
                 const int             sub_window=0,      // subwindow index 
                 datetime              time=0,            // line time 
                 const color           clr=clrRed,        // line color 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // line style 
                 const int             width=1,           // line width 
                 const bool            back=false,        // in the background 
                 const bool            selection=true,    // highlight to move 
                 const bool            ray=true,          // line's continuation down 
                 const bool            hidden=true,       // hidden in the object list 
                 const long            z_order=0)         // priority for mouse click 
  { 
//--- if the line time is not set, draw it via the last bar 
   if(!time) 
      time=TimeCurrent(); 
//--- reset the error value 
   ResetLastError(); 
//--- create a vertical line 
   if(!ObjectCreate(chart_ID,name,OBJ_VLINE,sub_window,time,0)) 
     { 
      Print(__FUNCTION__, 
            ": failed to create a vertical line! Error code = ",GetLastError()); 
      return(false); 
     } 
//--- set line color 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- set line display style 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- set line width 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- display in the foreground (false) or background (true) 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- enable (true) or disable (false) the mode of moving the line by mouse 
//--- when creating a graphical object using ObjectCreate function, the object cannot be 
//--- highlighted and moved by default. Inside this method, selection parameter 
//--- is true by default making it possible to highlight and move the object 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- enable (true) or disable (false) the mode of displaying the line in the chart subwindows 
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY,ray); 
//--- hide (true) or display (false) graphical object name in the object list 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- set the priority for receiving the event of a mouse click in the chart 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- successful execution 
   return(true); 
  } 
//+------------------------------------------------------------------+ 
 
Marco vd Heijden:

Ja.

Oder verwenden Sie zum Beispiel diese Funktion:

Danke Marco, es hat nicht funktioniert, ich werde den gesamten Code posten, Sie werden in der Meldung sehen, dass ich das richtige Datum habe, aber ich bin nicht in der Lage, die Zeile an diesem Datum zu erstellen

Was ich versuche zu erreichen, ist, die Informationen zu speichern, die ich auf dem Chart habe, für den Fall, dass sie verloren gehen, da manchmal, wenn der Markt geschlossen ist und MT4 auf dem VPS ohne Verbindung zum Broker geöffnet wird, die Informationen verloren gehen.
Vor dem Wochenende möchte ich also meine Linien beibehalten, die sich im zukünftigen Abschnitt des Charts (ganz rechts) befinden. Um dies zu erreichen, habe ich ein Symbol im Chart erstellt, das Datum für dieses Symbol gespeichert und dieses Datum dann verwendet, um die Linien neu zu erstellen ... alles ist gut, bis auf den Teil, in dem die Linien neu erstellt werden, und ich frage mich, ob jemand dabei helfen kann

//+------------------------------------------------------------------+
//|                                                    TestLines.mq4 |
//|                                             Copyright 2019, Alfa |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, Alpha"
#property version   "1.00"
#property strict


datetime PreTradeDOT, Symb_Chart_Dates, Exit_SymDOT;
string   Exit_SymSymbol = "Exit_Sym", ExitLine = "Exit";

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---
    OnTick();
//---
    return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//---Object creation
    ObjectCreate(0, Exit_SymSymbol, OBJ_ARROW_DOWN, 0, Time[0] + Period() * 60 * 40, High[0]);
    ObjectSet(Exit_SymSymbol, OBJPROP_COLOR, Red);
    ObjectSet(Exit_SymSymbol, OBJPROP_STYLE, STYLE_SOLID);
    ObjectSet(Exit_SymSymbol, OBJPROP_WIDTH, 3);
    ObjectSet(Exit_SymSymbol, OBJPROP_RAY, false);
    ObjectSet(Exit_SymSymbol, OBJPROP_BACK, True);
    ObjectSet(Exit_SymSymbol, OBJPROP_NAME, True);
    ObjectSet(Exit_SymSymbol, OBJPROP_TEXT, True);
    ObjectSetText(Exit_SymSymbol, "Exit_SymSymbol", 1);


    datetime TimeExit_SymSymbol = (datetime) ObjectGetInteger(0, Exit_SymSymbol, OBJPROP_TIME1);
    string   TxtExit_SymSymbol  = TimeToStr(TimeExit_SymSymbol, TIME_DATE | TIME_SECONDS);

//---
    if (ObjectFind(0, Exit_SymSymbol) == 0) // Object is found on main screen when its ==0
    {
        Exit_SymDOT = (datetime) ObjectGetInteger(0, Exit_SymSymbol, 0, 0);
        //Alert(Exit_SymDOT );
        SaveDates();
    }
    if (ObjectFind(0, ExitLine) != 0)
    {
        ReadDates();

        datetime Symb_Dates = StringToTime(StringSubstr(Symb_Chart_Dates, 0, 16)); // OK
   



        Alert(Symb_Dates);

        VLineCreate(0, "VLine", 0, Symb_Dates, clrRed, STYLE_SOLID, 1, false, true, true, true, 0);


/*
       // ObjectCreate(0,ExitLine, OBJ_VLINE, 0, StringToTime(Symb_Dates), Low[0]);
        ObjectCreate(ExitLine, OBJ_VLINE, 0, StringToTime( Symb_Dates), Low[0]);

       // ObjectCreate(vLine, OBJ_VLINE, 0, Time[0] + (Symb_Dates-TimeCurrent()) , Low[0]);
        //ObjectCreate( ExitLine, OBJ_VLINE, 0, Symb_Dates, 0 );
        ObjectSet(ExitLine, OBJPROP_COLOR, Orange);
        ObjectSet(ExitLine, OBJPROP_STYLE, STYLE_SOLID);
        ObjectSet(ExitLine, OBJPROP_WIDTH, 3);
        ObjectSet(ExitLine, OBJPROP_RAY, false);
        ObjectSet(ExitLine, OBJPROP_BACK, True);

 */
    }
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//-- Function:  ReadSpread
//+------------------------------------------------------------------+
void ReadDates()
{
    string fileName = getFileName(1);
    int    file     = FileOpen(fileName, FILE_CSV | FILE_READ);
//--- This is a protection to avoid low spread and also for the expert
//--- if the file has not been created then create a new file

    Symb_Chart_Dates    = (datetime) ObjectGetInteger(0, Exit_SymSymbol, OBJPROP_TIME1, 0);
   
    int ShiftEntryBar = 10, TradeExit_SymBar = 30;
    if (file <= -1)
    {
        Exit_SymDOT = Time[0] + Period() * 60 * TradeExit_SymBar;

        SaveDates();
    }
//--- If there is a file then save the spreads
    if (file > 0)
    {
        Symb_Chart_Dates    = FileReadNumber(file);
        FileClose(file);
    }
}


//
//+------------------------------------------------------------------+
//-- Function:  saveSpread
//+------------------------------------------------------------------+
void SaveDates()
{
    string fileName = getFileName(1);
    int    file     = FileOpen(fileName, FILE_CSV | FILE_WRITE);
    if (file > 0)
    {
        FileWrite(file, PreTradeDOT, Symb_Chart_Dates, Exit_SymDOT);
        FileClose(file);
    }
}



//+--------------------------------------------------------------------------------------------------+
//--                                   Function:  getFileName
//+--------------------------------------------------------------------------------------------------+
string getFileName(int FileNo)
{
    string filename;
//--- The spread file will be used for all time frames
    if (FileNo == 1)
        filename = " # " + "Lines" + ".txt";  // spread file

    return(filename);
}





//+------------------------------------------------------------------+
//| Create the vertical line                                         |
//+------------------------------------------------------------------+
bool VLineCreate(const long chart_ID = 0,                   // chart's ID
                 const string name = "VLine",               // line name
                 const int sub_window = 0,                  // subwindow index
                 datetime time = 0,                         // line time
                 const color clr = clrRed,                  // line color
                 const ENUM_LINE_STYLE style = STYLE_SOLID, // line style
                 const int width = 1,                       // line width
                 const bool back = false,                   // in the background
                 const bool selection = true,               // highlight to move
                 const bool ray = true,                     // line's continuation down
                 const bool hidden = true,                  // hidden in the object list
                 const long z_order = 0)                    // priority for mouse click
{
//--- if the line time is not set, draw it via the last bar
    if (!time)
        time = TimeCurrent();
//--- reset the error value
    ResetLastError();
//--- create a vertical line
    if (!ObjectCreate(chart_ID, name, OBJ_VLINE, sub_window, time, 0))
    {
        Print(__FUNCTION__,
              ": failed to create a vertical line! Error code = ", GetLastError());
        return(false);
    }
//--- set line color
    ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
//--- set line display style
    ObjectSetInteger(chart_ID, name, OBJPROP_STYLE, style);
//--- set line width
    ObjectSetInteger(chart_ID, name, OBJPROP_WIDTH, width);
//--- display in the foreground (false) or background (true)
    ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
//--- enable (true) or disable (false) the mode of moving the line by mouse
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
    ObjectSetInteger(chart_ID, name, OBJPROP_SELECTABLE, selection);
    ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
//--- enable (true) or disable (false) the mode of displaying the line in the chart subwindows
    ObjectSetInteger(chart_ID, name, OBJPROP_RAY, ray);
//--- hide (true) or display (false) graphical object name in the object list
    ObjectSetInteger(chart_ID, name, OBJPROP_HIDDEN, hidden);
//--- set the priority for receiving the event of a mouse click in the chart
    ObjectSetInteger(chart_ID, name, OBJPROP_ZORDER, z_order);
//--- successful execution
    return(true);
}
//+------------------------------------------------------------------+
 
Alpha Beta:

Ist es möglich, vertikale Linien auf der rechten Seite des Diagramms vom aktuellen Kurs weg zu zeichnen, wenn man nur das Datum kennt?

Nehmen wir zum Beispiel an, die aktuelle Zeit ist 2019.05.17 00:00, und ich möchte eine vertikale Linie in der Zukunft um 2019.06.04 16:00 zeichnen, indem ich nur die Datumsinformation verwende?

Verwenden Sie das Format D' , um die gewünschte Zeit in ObjectCreate() festzulegen.

ObjectCreate(0,"v_line",OBJ_VLINE,0,D'2019.06.04 16:00',0);