Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 36

 

¡Hola !

Ayúdame a arreglar el código para que las leyendas de las barras estén en el centro de la barra sobre la barra alta y no en el lateral

#propiedad estricta
#propiedad ventana_del_gráfica_del_indicador

input int TextSize = 8; //tamaño de la fuente
color de entrada TextColor = clrYellow; //color del texto
input int TextAngle = 90; //ángulo de rotación del texto
input int MaxBar = 100; //número de barras a partir de 0 para las que se calcula el tamaño de la vela

int OnInit()
{
return(INIT_SUCCEED);
}

int OnCalculate(const int rates_total,
const int prev_calculado,
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 i;
for ( i = 0; i < MaxBar; i++ ) {
if ( ObjectFind ("candlesize "+ IntegerToString(i)) >=0 ) {
ObjectDelete("candlesize "+ IntegerToString(i))
}
ObjectCreate ("candlesize "+ IntegerToString(i),
OBJ_TEXT,
0,
tiempo[i],
alto[i]+PasoPer()*Punto);
ObjectSet ("candlesize "+IntegerToString(i),
OBJPROP_ANGLE,
TextAngle
);
ObjectSetText ("candlesize "+IntegerToString(i),
DoubleToStr(NormalizeDouble((high[i]-low[i]+Point)/Point, 0), 0),
Tamaño del texto,
NULO,
TextColor
);
}
return(rates_total);
}

int PasoPer ()
{
int i = 0;
switch (Period())
{
caso PERIOD_M1:
i = 5;
romper;
caso PERIOD_M5:
i = 15;
romper;
caso PERIOD_M15:
i = 25;
romper;
i = 40;
romper;
caso PERIOD_H1:
i = 60;
romper;
caso PERIOD_H4:
i = 90;
romper;
caso PERIOD_D1:
i = 220;
romper;
caso PERIOD_W1:
i = 500;
romper;
caso PERIOD_MN1:
i = 2000;
romper;
por defecto:
romper;
}
devolver (i);
}

 
ed3sss:

Prueba: Print("Trabajo anterior PrecioPrecio-",PrecioPrecio); el registro está vacío.

Sin detalles no es una prueba )))) Muéstrame el texto completo del init y la declaración de variables.

Además, ¿por qué comprobar TODOS los pedidos, desde el principio de la vida de la cuenta, si se necesita lo último? - ¿Cómo hacerlo si hay 10 pares de divisas abiertos?

Hay que recorrerlos desde el final y salir del ciclo a tiempo. ¿Qué tienen que ver 10 pares? Incluso un centenar, tienes la posibilidad de elegir los símbolos.

 
Игорь:

¡Hola !

Ayúdame a corregir el código para que las inscripciones sobre las barras estén en el centro de la barra sobre la barra alta y no en el lateral

Aprende a utilizar el botón SRC para insertar código.

Y lee sobre OBJPROP_ANCHOR.

 
Vitalie Postolache:

Aprende a utilizar el botón SRC para insertar código.

Y lee sobre OBJPROP_ANCHOR.

¡Lo tengo!

Perdón por la brusquedad.

 
Игорь:

Lo tengo, ¡gracias!

Perdón por la dureza.

#property strict
#property indicator_chart_window

input int      TextSize = 8; //размер шрифта
input color    TextColor = clrYellow; //цвет текста
input int      TextAngle = 90; //угол поворота текста
input int      MaxBar = 100;  //количество баров, начиная с 0, для которых вычисляется размер свечей

int OnInit()
{
   return(INIT_SUCCEEDED);
}

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 i;
   for ( i = 0; i < MaxBar; i++ )   {
      if ( ObjectFind ("candlesize"+ IntegerToString(i)) >=0 )   {
             ObjectDelete("candlesize"+ IntegerToString(i));
      }
      ObjectCreate ("candlesize"+ IntegerToString(i),  
                    OBJ_TEXT,  
                    0,  
                    time[i],  
                    high[i]+StepPer()*Point);
       //--- установим привязку к правому верхнему углу
      ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_UPPER);
     ObjectSet (  "candlesize"+IntegerToString(i),  
                    OBJPROP_ANGLE,  
                    TextAngle
                 );
      ObjectSetText ( "candlesize"+IntegerToString(i),  
                      DoubleToStr(NormalizeDouble((high[i]-low[i]+Point)/Point, 0), 0),  
                      TextSize,  
                      NULL,  
                      TextColor
                     );
   }
   return(rates_total);
}

int StepPer ()
{
     int i = 0;
     switch (Period())
     {
          case PERIOD_M1:
          i = 5;
          break;
          case PERIOD_M5:
          i = 15;
          break;
          case PERIOD_M15:
          i = 25;
          break;
          case PERIOD_M30:
          i = 40;
          break;
          case PERIOD_H1:
          i = 60;
          break;
          case PERIOD_H4:
          i = 90;
          break;
          case PERIOD_D1:
          i = 220;
          break;
          case PERIOD_W1:
          i = 500;
          break;
          case PERIOD_MN1:
          i = 2000;
          break;
          default:  
          break;
     }
     return (i);
}  
Lo he puesto y sigue estando descentrado y en la barra equivocada.
 
#property strict
#property indicator_chart_window

input int      TextSize = 8; //размер шрифта
input color    TextColor = clrYellow; //цвет текста
input int      TextAngle = 90; //угол поворота текста
input int      MaxBar = 100;  //количество баров, начиная с 0, для которых вычисляется размер свечей

int OnInit()
{
   return(INIT_SUCCEEDED);
}

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 i;
   for ( i = 0; i < MaxBar; i++ )   {
      if ( ObjectFind ("candlesize"+ IntegerToString(i)) >=0 )   {
             ObjectDelete("candlesize"+ IntegerToString(i));
      }
      ObjectCreate ("candlesize"+ IntegerToString(i),  
                    OBJ_TEXT,  
                    0,  
                    time[i],  
                    high[i]+StepPer()*Point);
       //--- установим привязку к правому верхнему углу
      ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_UPPER);
     ObjectSet (  "candlesize"+IntegerToString(i),  
                    OBJPROP_ANGLE,  
                    TextAngle
                 );
      ObjectSetText ( "candlesize"+IntegerToString(i),  
                      DoubleToStr(NormalizeDouble((high[i]-low[i]+Point)/Point, 0), 0),  
                      TextSize,  
                      NULL,  
                      TextColor
                     );
   }
   return(rates_total);
}

int StepPer ()
{
     int i = 0;
     switch (Period())
     {
          case PERIOD_M1:
          i = 5;
          break;
          case PERIOD_M5:
          i = 15;
          break;
          case PERIOD_M15:
          i = 25;
          break;
          case PERIOD_M30:
          i = 40;
          break;
          case PERIOD_H1:
          i = 60;
          break;
          case PERIOD_H4:
          i = 90;
          break;
          case PERIOD_D1:
          i = 220;
          break;
          case PERIOD_W1:
          i = 500;
          break;
          case PERIOD_MN1:
          i = 2000;
          break;
          default:  
          break;
     }
     return (i);
}  
Chicos, ¿podéis ayudar a un vagabundo a pasar por el medio donde está la junta?
 
Игорь:
#property strict
#property indicator_chart_window

input int      TextSize = 8; //размер шрифта
input color    TextColor = clrYellow; //цвет текста
input int      TextAngle = 90; //угол поворота текста
input int      MaxBar = 100;  //количество баров, начиная с 0, для которых вычисляется размер свечей

int OnInit()
{
   return(INIT_SUCCEEDED);
}

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 i;
   for ( i = 0; i < MaxBar; i++ )   {
      if ( ObjectFind ("candlesize"+ IntegerToString(i)) >=0 )   {
             ObjectDelete("candlesize"+ IntegerToString(i));
      }
      ObjectCreate ("candlesize"+ IntegerToString(i),  
                    OBJ_TEXT,  
                    0,  
                    time[i],  
                    high[i]+StepPer()*Point);
       //--- установим привязку к правому верхнему углу
      ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_UPPER);
     ObjectSet (  "candlesize"+IntegerToString(i),  
                    OBJPROP_ANGLE,  
                    TextAngle
                 );
      ObjectSetText ( "candlesize"+IntegerToString(i),  
                      DoubleToStr(NormalizeDouble((high[i]-low[i]+Point)/Point, 0), 0),  
                      TextSize,  
                      NULL,  
                      TextColor
                     );
   }
   return(rates_total);
}

int StepPer ()
{
     int i = 0;
     switch (Period())
     {
          case PERIOD_M1:
          i = 5;
          break;
          case PERIOD_M5:
          i = 15;
          break;
          case PERIOD_M15:
          i = 25;
          break;
          case PERIOD_M30:
          i = 40;
          break;
          case PERIOD_H1:
          i = 60;
          break;
          case PERIOD_H4:
          i = 90;
          break;
          case PERIOD_D1:
          i = 220;
          break;
          case PERIOD_W1:
          i = 500;
          break;
          case PERIOD_MN1:
          i = 2000;
          break;
          default:  
          break;
     }
     return (i);
}  
¿Ayudar a un vagabundo en el medio donde está la junta?
¡No sé si es por encima del larguero o por el lado aunque haya dicho centro!
 
Игорь:

Lo he insertado y sigue estando descentrado y en la barra equivocada.

Pues bien, después de girar, el punto ya no está en el centro superior, sino en el centro izquierdo, por lo que el texto se desplaza a la derecha.

ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_LEFT);
El punto de anclaje se establece en 0 grados de rotación, hay que tener en cuenta el ángulo de rotación y establecer el punto de anclaje para que esté en la parte inferior si el objeto está sobre Alto, en tu caso sería el punto central izquierdo.
 
Vitalie Postolache:

Pues bien, después de girar, el punto ya no está en el centro superior, sino en el centro izquierdo, por lo que el texto se desplaza hacia la derecha.

ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_LEFT);
El punto de anclaje se establece cuando se rota 0 grados, hay que tener en cuenta el ángulo de rotación y establecer el punto de anclaje, que estará en la parte inferior si el objeto está sobre Alto, en tu caso será un punto a la izquierda en el centro.

¡¡¡¡¡Muchas gracias !!!!!

Todo salió como yo quería.

¡Una vez más, me disculpo por el malentendido y mi dureza !

 
Vitalie Postolache:

Sin detalles no es una prueba )))) Mostrar el texto completo del init y la declaración de variables.

Desde el final para atravesar y salir del bucle a tiempo. ¿Qué tienen que ver 10 pares? Incluso un centenar, tienes una selección personaje por personaje allí.

bool s=false;
double b=Saldo de la cuenta();
i=0;
for(;i<TotalPedidos();i++)
{//+----------------------------------------------------------------------------------------+for
ViborOrdera=OrderSelect(i,SELECT_BY_POS);
if(OrderSymbol()!=Symbol())continue;
if(OrderType()>1)continue;
s=verdadero;
int Ticket=OrderTicket();
double Lotes=Lotes de pedido();
doble precio;
if(OrderType()==1)Price=NormalizeDouble(Ask,Digits);else Price=NormalizeDouble(Bid,Digits);
//+-----------------------------------------------------------------------------------------+
ViborOrdera=CerrarOrden(Billete,Lotes,Precio,3);
if(GetLastError()==6){Alert("No connection");return(0);}
if(GetLastError()==132){Alert("El mercado está cerrado");return(0);}
RefreshRates();
i--;

}//+---------------------------------------------------------------------------------------+for

Ok, el mismo bucle aquí, ¿por qué cierra los pedidos)?