Здравствуйте,
Это мой первый раз, когда я использую графические объекты в индикаторе. Мне нужно рисовать вертикальную линию каждый день в одно и то же время "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--)
}
Помогите!
Спасибо :)
Пожалуйста, используйте это для размещения кода. . это облегчает чтение.
Сейчас я получаю вертикальные линии для всех предыдущих 22:00 свечей, но мне нужна линия на предстоящей 22:00 свече с правой стороны от цены (фьючерс), как я могу это получить?
- В следующий раз будьте более точны в своем первоначальном вопросе.
datetime now = Time[0], bod = now - now % 86400, // Beginning of the day Hr22= bod + 22 * 3600; // 2200 VLine("2200", Hr22, Red);
- В следующий раз будьте более точными в своем первоначальном вопросе.
Можно ли нарисовать вертикальные линии в правой части графика вдали от текущей цены, зная только дату.
Например, предположим, текущее время 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); } //+------------------------------------------------------------------+
Спасибо Марко, это не сработало, я опубликую весь код, вы увидите в оповещении, что у меня есть правильная дата, но я не могу создать строку на эту дату.
Я пытаюсь сохранить информацию на графике на случай ее потери, так как иногда, когда рынок закрыт и 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); } //+------------------------------------------------------------------+
Можно ли нарисовать вертикальные линии в правой части графика вдали от текущей цены, зная только дату.
Например, предположим, текущее время 2019.05.17 00:00, и я хочу нарисовать вертикальную линию в будущем 2019.06.04 16:00, используя только информацию о дате?
Используйте формат D' для установки желаемого времени в ObjectCreate()
ObjectCreate(0,"v_line",OBJ_VLINE,0,D'2019.06.04 16:00',0);
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте,
Это мой первый раз, когда я использую графические объекты в индикаторе. Мне нужно рисовать вертикальную линию каждый день в одно и то же время "22:00", не могли бы вы подсказать мне решение?
Спасибо