Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 544

 
if(TralProcent!=0)
{ NewProfProc=Beneficio(-1)/(SaldoCuenta()/100); if(NewProfProc>0 && (ProfitProcent==0 || ProfitProcent<NewProfProc)) {ProfitProcent=NormalizeDouble(NewProfProc, 2);} if(ProfitProcent>0 && ProfitProcent>(TralProcent+TralStartProcent)) {TrallingProcent=ProfitProcent-TralProcent;} //+------------------------------------------------------------------+ if(NewProfProc>0 && TrallingProcent!=0 && NewProfProc<=TrallingProcent) {CloserS(); CloserB(); ProfitProcent=0; TrallingProcent=0;}

------robot utiliza la red de arrastre en %balance, por favor, aconsejar cómo agregar los cambios de paso aquí. Si lo he entendido bien es necesario para Tralingprocent. Por ejemplo, si el paso =2%, el porcentaje final aumenta al menos un 2%.
 
khorosh:

Artyom Trishkin:

Objetos - pueden ser emitidos en cualquier ventana de la terminal y sus subventanas.

--------------------------------------------------------------------------------------------------------------------------------------

Lo he intentado así, pero no funciona.

Tal vez haya algún problema con la numeración de las ventanas. Si hay una ventana separada en el gráfico, su número ==1?

wndNum número de la ventana donde mostrar

int wndNum=1;

int OnInit()
 {
 string short_name=MQLInfoString(MQL_PROGRAM_NAME);
 short_name+=": MyIndicator";
 IndicatorSetString(INDICATOR_SHORTNAME,short_name);
 wndNum=ChartWindowFind(0,short_name);
 //---
   return(INIT_SUCCEEDED);
 }

// Функция создания объекта
void SetLabel(string nm,string text,long xd,long yd,int fs,string font,int cr,int an,color cl,string tooltip,bool sel) {
 if(ObjectFind(0,nm)<0) {
    ObjectCreate(0,nm,OBJ_LABEL,wndNum,0,0);
    ObjectSetInteger(0,nm,OBJPROP_CORNER,cr);
    ObjectSetInteger(0,nm,OBJPROP_ANCHOR,an);
    ObjectSetString (0,nm,OBJPROP_FONT,font);
    ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,fs);
    ObjectSetInteger(0,nm,OBJPROP_BACK,false);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,sel);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,sel);
    ObjectSetString (0,nm,OBJPROP_TOOLTIP,tooltip);
  }
    ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,yd);
    ObjectSetInteger(0,nm,OBJPROP_XDISTANCE,xd);
    ObjectSetString (0,nm,OBJPROP_TEXT,text);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,cl); 
 }
P.D.khorosh, no puedo responder en privado, ¡el chat no funciona!
 
Vitaly Muzichenko:

wndNum número de la ventana donde mostrar

P.D.khorosh, no puedo responderte en privado, ¡el chat no funciona!

Gracias, Vitaliy! ¿Y cómo lo adjunto a la punta de la curva de un indicador que está en una ventana separada? Intenté poner como coordenadas el tiempo[0] y el valor del buffer de la curva en la barra cero, pero no funcionó.

 
khorosh:

Gracias, Vitaly! ¿Y cómo atarlo a la punta de la curva del indicador que está en la ventana separada? He intentado poner como coordenadas el Tiempo[0] y el valor del buffer de la curva en la barra de cero, pero no funciona.

Así es como respondió a la pregunta. El único matiz que suele aparecer es el propio valor de wndNum. El valor de wndNum no es una constante. Hay que vigilarlo constantemente. El usuario puede eliminar la subventana del indicador que precede a la actual. Tampoco busque el indicador mismo en OnInit(). Este código debería trasladarse a OnCalculate(). En cualquier caso, siempre hay que comprobar si el índice de la subventana es correcto.

 
Ihor Herasko:

Así respondió a la pregunta. El único matiz que suele aparecer es el propio valor de wndNum. El valor de wndNum no es una constante. Hay que vigilarlo constantemente. El usuario puede eliminar la subventana del indicador que precede a la actual. Tampoco busque el indicador mismo en OnInit(). Este código debería trasladarse a OnCalculate(). En cualquier caso, siempre hay que comprobar si el índice de la subventana es correcto.

Tiene un ejemplo en el que las coordenadas del objeto se suponen inicialmente en píxeles (objeto estático). Pero necesito enlazar con una curva indicadora. Por lo tanto, primero tenemos que calcular estas coordenadas. No aparece en su obra. Lo he intentado así, pero no funciona (en la variable LevLabelSpread hay un valor de buffer de curva en la primera barra):

....
int X=0,Y=0;
   wndNum=ChartWindowFind(0,Shortname);  
   ChartTimePriceToXY( 0,wndNum,Time[1],LevLabelSpread,X,Y); Print("X=",X," Y=",Y);    
   if(ObjectFind("_Spread")<0) 
     {
      ObjectCreate(0,"_Spread", OBJ_TEXT, wndNum, 0,0);
      ObjectSetText("_Spread", "                Spread", 10, "Arial", clrYellow);
     }
   else
     {
      ObjectSetInteger(0,"_Spread",OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(0,"_Spread",OBJPROP_XDISTANCE,X);
      ObjectSetString (0,"_Spread",OBJPROP_TEXT,"                Spread");
     } 

.... 
 
khorosh:

Tiene un ejemplo en el que las coordenadas del objeto se suponen inicialmente en píxeles (objeto estático). Pero necesito vincularlo a una curva indicadora. Por lo tanto, tengo que calcular estas coordenadas de antemano. No aparece en su obra. Lo he intentado así pero no funciona (la variable LevLabelSpread tiene el valor del buffer de la curva en la primera barra):

¿Por qué debo calcular el precio en píxeles para un objeto de tipo TEXTO? Se posiciona por tiempo de barra y precio. Lo tengo así:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   int nWndIndex = ChartWindowFind();
   if (nWndIndex < 0)
      return 0;
      
   string sName = "MyText";
   if (ObjectFind(0, sName) < 0)
      ObjectCreate(0, sName, OBJ_TEXT, nWndIndex, time[rates_total - 1], <здесь значение индикатора>);
      
   ObjectSetInteger(0, sName, OBJPROP_ANCHOR, ANCHOR_LEFT);
   ObjectSetString(0, sName, OBJPROP_TEXT, "Sample text");

   return(rates_total);
}

Resultado:


 
Ihor Herasko:

¿Por qué calcular el precio en píxeles de un objeto TEXTO? Se posiciona por tiempo de barra y precio. Lo tengo así:

Resultado:


Muchas gracias.

 
Ihor Herasko:


Ha funcionado bien:


 
Por favor, explique el significado y la finalidad de los dos conceptos: asa del gráfico eidentificador del gráfico. Cuál es la diferencia entre ellos y cómo y cuándo se utilizan.
 
khorosh:
Por favor, explique el significado y la finalidad de dos nociones: mango de gráfico eidentificador de gráfico. Cuál es la diferencia entre ellos y cómo y cuándo se utilizan.

Muéstrame cómo consigues ambas cosas. Hasta ahora parece que estamos hablando de lo mismo.

Razón de la queja: