Hola,
Es la primera vez que uso objetos gráficos en un indicador. Necesitaría dibujar una línea vertical todos los días a la misma hora "22:00", ¿podría guiarme hacia una solución?
Gracias
Utiliza Cycles en lugar de VLine.
Saludos, 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()); }
Hola chicos,
He podido resolver el tema con otro código (realmente no he podido aplicar las soluciones dadas anteriormente), pero no en absoluto.
Ahora obtengo líneas verticales para todas las velas de 22:00 anteriores, pero necesito la línea de la vela de 22:00 que viene a la derecha del precio (futuro), ¿cómo podría conseguirlo?
Este es el código:
...
for (shift=NumBars;shift>=0;shift--)
}
¡Ayuda!
Gracias :)
Por favor, utilice esto para publicar el código . . hace que sea más fácil de leer.
Ahora obtengo líneas verticales para todas las velas anteriores de las 22:00, pero necesito la línea en la vela de las 22:00 que viene a la derecha del precio (futuro), ¿cómo podría conseguirlo?
- La próxima vez sea más preciso con su pregunta original.
datetime now = Time[0], bod = now - now % 86400, // Beginning of the day Hr22= bod + 22 * 3600; // 2200 VLine("2200", Hr22, Red);
- La próxima vez sea más preciso con su pregunta original.
Sí.
Use ObjectCreate( and OBJ_VLINE
O utilice esta función, por ejemplo:
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+
Gracias Marco , no funcionó , voy a publicar el código completo , verás en la alerta que tengo la fecha correcta pero no soy capaz de crear la línea en esa fecha
Lo que intento conseguir es guardar la información que tengo en el gráfico por si se pierde ya que a veces cuando se cierra el mercado y se abre MT4 en el VPS sin conexión con el broker se pierde la información
Así que antes del fin de semana quiero mantener mis líneas que están en la sección de futuro del gráfico ( en el extremo derecho ) para ello he creado un símbolo en el gráfico , guardado la fecha para ese símbolo a continuación, utilizar esa fecha para volver a crear las líneas .. todo es bueno, excepto la parte para volver a crear las líneas y me pregunto si alguien podría ayudar con eso
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+
¿Es posible dibujar líneas verticales en la parte derecha del gráfico lejos del precio actual conociendo sólo la fecha
Por ejemplo, supongamos que la hora actual es 2019.05.17 00:00, y quiero dibujar una línea vertical en el futuro en 2019.06.04 16:00 utilizando sólo la información de la fecha?
Utilice el formato D' para establecer la hora deseada en ObjectCreate()
ObjectCreate(0,"v_line",OBJ_VLINE,0,D'2019.06.04 16:00',0);
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Hola,
Es la primera vez que utilizo objetos gráficos en un indicador. Necesitaría dibujar una línea vertical todos los días a la misma hora "22:00", ¿podría guiarme hacia una solución?
Gracias