OBJ_VLINE

 

你好。

这是我第一次在一个指标中使用图形对象。我需要每天在同一时间 "22:00 "画一条垂直线,你能指导我如何解决吗?

谢谢

 
desert:

你好。

这是我第一次在一个指标中使用图形对象。我需要每天在同一时间 "22:00 "画一条垂直线,你能指导我如何解决吗?

谢谢

使用Cycles而不是VLine。

谢谢你,卢克

 
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());
}
 

大家好。

我可以用其他的代码来解决这个问题(真的,我无法应用上面给出的解决方案),但根本就不行。

现在我得到了所有以前的22:00蜡烛的垂直线,但我需要在未来22:00蜡烛的价格(未来)的右侧的线,我怎么能得到它?

这就是代码。

...

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

{
如果(TimeHour(Time[shift])==Offset &&TimeMinute(Time[shift])==0)
{
如果(ObjectFind("Offset "+shift) !=0)
{
ObjectCreate("Offset "+shift, OBJ_VLINE, 0, Time[shift], 0)。
ObjectSet("Offset "+shift, OBJPROP_STYLE, STYLE_DASHDOTDOT)。
ObjectSet("Offset "+shift, OBJPROP_COLOR, White);
}
}

}

帮助!

谢谢 :)

 

请用这个来张贴代码。.这使它更容易阅读。

 
desert:
现在我得到了所有以前的22:00蜡烛的垂直线,但是我需要在即将到来的22:00蜡烛的价格(未来)的右边的线,我怎么能得到呢?
  1. 下次要更精确地回答你的原始问题。
  2. datetime now = Time[0],
             bod = now - now % 86400,  // Beginning of the day
             Hr22= bod + 22 * 3600;    // 2200
    VLine("2200", Hr22, Red);
 
WHRoeder:
  1. 下次要更精确地说明你的原始问题。
非常感谢您!
 

是否可以通过只知道日期在图表的右侧画出远离当前价格的垂直线?

例如,假设当前时间 是2019.05.17 00:00,我想在未来的2019.06.04 16:00画一条垂直线,只使用日期信息?

 

是的。

Use ObjectCreate( and OBJ_VLINE

或者用这个函数 来举例。

//+------------------------------------------------------------------+ 
//| 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:

是的。

或者用这个函数 来做例子。

谢谢你,马可,它没有工作,我将发布整个代码,你会看到在警报中,我有正确的日期,但我无法在该日期创建行。

我想实现的是保存我在图表上的信息,以防其丢失,因为有时当市场关闭,MT4在VPS上打开时没有连接到经纪人,信息会丢失。
因此,在周末之前,我想保留我的线,这些线在图表的未来部分(最右边),为此我在图表上创建了一个符号,保存了该符号的日期,然后使用该日期重新创建线......除了重新创建线的部分,一切都很好,我想知道是否有人能对此提供帮助。

//+------------------------------------------------------------------+
//|                                                    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:

是否可以通过只知道日期在图表的右侧画出远离当前价格的垂直线?

例如,假设当前时间 是2019.05.17 00:00,我想在未来的2019.06.04 16:00只用日期信息画一条垂直线?

ObjectCreate() 中使用D' 格式来设置想要的时间

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