Sugeriría a Metaquotes la creación de un curso que parta de las bases (sintaxis), también con algún vídeo si es posible, de forma específica para mq5: esto es muy útil para los que se inician en la programación.
Creo que mucha gente está interesada en MT5 pero no sabe programar.
muchas gracias, tu código funciona, es decir, la etiqueta aparece, pero el valor no se actualiza. ¿He cometido un error?
Aquí está mi código.
walb99,
Intenta esto. El problema era que intentaba actualizar el valor sólo si el objeto label no estaba disponible. He añadido el timestamp a la etiqueta, para que puedas ver la actualización del tiempo con cada tick.
int OnCalculate( constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int limit;
if (CountBars >= rates_total) limit = 0; else limit = rates_total - CountBars;
CopyBuffer(ma1_handle, 0, 0, rates_total, MA1TempBuffer);
for (int i = rates_total - 1; i > limit; i--)
{
MA1Buffer[i] = MA1TempBuffer[i];
double myMA_now = MA1TempBuffer[i];
double myMA_previous = MA1TempBuffer[i - 1]; //MA One bar agoif (myMA_now >= myMA_previous) MA1ColorBuffer[i] = 0;
elseif (myMA_now < myMA_previous) MA1ColorBuffer[i] = 1;
}
myMAnow=MA1TempBuffer[rates_total-1-MA1_Shift];
// myMAnow=MA1TempBuffer[rates_total - 1];
myPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
if(myPrice>myMAnow)label_color=Lime; else label_color=Red;
// check if label object does not already exist and create itif(ObjectFind(0,label_info)<0)
{
// Create label in indicator's window ObjectCreate(0,label_info,OBJ_LABEL,window,0,0);
// Set X and Y distance from UPPER RIGHT CORNER ObjectSetInteger(0,label_info,OBJPROP_XDISTANCE,200);
ObjectSetInteger(0,label_info,OBJPROP_YDISTANCE,20);
ObjectSetInteger(0,label_info,OBJPROP_CORNER, CORNER_RIGHT_UPPER);
// Set text properties: colour, font and font sizeObjectSetInteger(0,label_info,OBJPROP_COLOR,label_color);
ObjectSetString(0,label_info,OBJPROP_FONT,"Arial");
ObjectSetInteger(0,label_info,OBJPROP_FONTSIZE,14);
// Set text to displayObjectSetString(0,label_info,OBJPROP_TEXT,DoubleToString(myMAnow,nDigits));
} else
{
ObjectSetString(0,label_info,OBJPROP_TEXT,TimeToString(TimeCurrent(), TIME_SECONDS)+" "+DoubleToString(myMAnow,nDigits));
};
return(rates_total);
}
Intenta esto. El problema era que intentabas actualizar el valor sólo si el objeto etiqueta no estaba disponible. He añadido el timestamp a la etiqueta, para que puedas ver la actualización del tiempo con cada tick.
Gracias, esto funciona
si pongo también información sobre el color de la etiqueta en los corchetes, el color de la etiqueta también se actualiza correctamente.
ok, creo que he conseguido que funcione solo mostrando el texto, lo siguiente será trabajar con el indicador. pero ¿alguien puede decirme por qué no puedo usar obj_label en lugar de obj_text para hacer que muestre el texto?
//+------------------------------------------------------------------+ //| text win 2.mq5 | //| Copyright CREATE BY DK | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "CREATE BY DK" #property link "http://www.mql5.com" #property version "1.00" #property indicator_separate_window #property indicator_plots 1
string ddock = "try it out"; int windows = -1; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ intOnInit() { //--- indicator buffers mapping /* if ((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR) windows=ChartWindowFind();
if (ObjectFind(0,ddock)<0) { ObjectCreate(0,ddock,OBJ_LABEL,windows,0,0); ObjectSetInteger(0,ddock,OBJPROP_XDISTANCE,200); ObjectSetInteger(0,ddock,OBJPROP_YDISTANCE,20); ObjectSetInteger(0,ddock,OBJPROP_CORNER, CORNER_RIGHT_UPPER); ObjectSetInteger(0,ddock,OBJPROP_COLOR,LightBlue); ObjectSetString(0,ddock,OBJPROP_FONT,"Arial"); ObjectSetInteger(0,ddock,OBJPROP_FONTSIZE,14); ObjectSetString(0,ddock,OBJPROP_TEXT, "TRYING VERY HARD"); } else Print("ddock already exists"); */ /* if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR) windows=ChartWindowFind(); */ // check if label object does not already exist and create it if(ObjectFind(0,ddock)<0) { // Create label in indicator's window ObjectCreate(0,ddock,OBJ_TEXT,windows,0,0); // Set X and Y distance from UPPER RIGHT CORNER ObjectSetInteger(0,ddock,OBJPROP_XDISTANCE,200); ObjectSetInteger(0,ddock,OBJPROP_YDISTANCE,20); ObjectSetInteger(0,ddock,OBJPROP_CORNER, CORNER_RIGHT_UPPER); // Set text properties: colour, font and font size ObjectSetInteger(0,ddock,OBJPROP_COLOR,LightPink); ObjectSetString(0,ddock,OBJPROP_FONT,"Arial"); ObjectSetInteger(0,ddock,OBJPROP_FONTSIZE,14); // Set text to display ObjectSetString(0,ddock,OBJPROP_TEXT,"TRYING VERY HARD"); } elsePrint("ddock already exists");
//--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ intOnCalculate(constint rates_total, constint prev_calculated, constdatetime& time[], constdouble& open[], constdouble& high[], constdouble& low[], constdouble& close[], constlong& tick_volume[], constlong& volume[], constint& spread[]) { //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ /* void OnDeinit(const int reason) { if (!ObjectFind(0,ddock)<0) ObjectDelete(0,ddock); } /* void OnDeinit(const int reason) { //--- if(!ObjectFind(0,ddock)<0) ObjectDelete(0, ddock); } */
Gracias wald99 : lo estoy intentando.
Sugeriría a Metaquotes la creación de un curso que parta de las bases (sintaxis), también con algún vídeo si es posible, de forma específica para mq5: esto es muy útil para los que se inician en la programación.
Hola Investeo
muchas gracias, tu código funciona, es decir, la etiqueta aparece, pero el valor no se actualiza. ¿He cometido un error?
Aquí está mi código.
walb99,
Intenta esto. El problema era que intentaba actualizar el valor sólo si el objeto label no estaba disponible. He añadido el timestamp a la etiqueta, para que puedas ver la actualización del tiempo con cada tick.
walb99,
Intenta esto. El problema era que intentabas actualizar el valor sólo si el objeto etiqueta no estaba disponible. He añadido el timestamp a la etiqueta, para que puedas ver la actualización del tiempo con cada tick.
Gracias, esto funciona
si pongo también información sobre el color de la etiqueta en los corchetes, el color de la etiqueta también se actualiza correctamente.
¿dónde se asigna el nombre del objeto en el ejemplo de rsi? He leído todo el código pero no lo entiendo,
Sólo quiero poner un texto simple en las ventanas del indicador, sólo que no puedo obtener el mismo resultado que el ejemplo RSI arriba
Mi código :
resultado :
ok, creo que he conseguido que funcione solo mostrando el texto, lo siguiente será trabajar con el indicador. pero ¿alguien puede decirme por qué no puedo usar obj_label en lugar de obj_text para hacer que muestre el texto?