[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 317

 
Zhunko:
No hay ninguna función, pero se puede hacer en MQL4 + WinAPI.

//+------------------------------------------------------------------+
//|          Function  : int GetChartScale()[1,2,4,6,13]             |
//|          Copyright © 2012, XrustSolution.  mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
//|          Description: Возвращает ширину свечи по масштабу чарта  |
//+------------------------------------------------------------------+
#import "user32.dll"
  bool GetWindowRect(int h, int& pos[4]);
#import
//+------------------------------------------------------------------+
int GetChartScale(){
        int h = WindowHandle(Symbol(), Period());
        int rect[4];
        if(h==0) return(1);
        GetWindowRect(h, rect);
        int wW  = rect[2] - rect[0]; // ширина окна
        int bpc = WindowBarsPerChart();
        if(bpc==0) return(1);
        int scale = MathFloor((wW-48)/bpc);
        switch(scale){
                case  1 :       return(0);
                case  2 :       return(1);
                case  4 :       return(2);
                case  8 :       return(3);
                case 16 :       return(6);
                case 32 :       return(13);
                default :   return(1);
        }
        return(1);
}
//+------------------------------------------------------------------+
 

¡Buenas tardes! Me pueden decir por qué no aparece la línea del indicador, el código parece ser elemental y nada complicado. Lo he comprobado con Print (T_V) - da el valor, pero la línea no se muestra por alguna razón?

Me gustaríaañadir una pregunta, he borrado el indicador y lo he vuelto a poner en un gráfico y la línea aparece. ¿Por qué no se recalcula el indicador durante la compilación?

#property indicator_separate_window
#property indicator_minimum -3
#property indicator_maximum 3
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level1 0.0         //горизонтальный уровень N в отдельном окне индикатора, где N от 1 до 8 
#property indicator_levelcolor Black   // цвет горизонтальных уровней индикатора е 
#property indicator_levelwidth 1       //толщина горизонтальных уровней индикатора
double T_Vol[];

int init()
  {  SetIndexBuffer (0, T_Vol); 
     SetIndexStyle  (0, DRAW_HISTOGRAM, STYLE_SOLID, 1); 
     IndicatorDigits(Digits);
   return(0); }
int start(){
   int limit;
   int сounted_bars=IndicatorCounted();
   if (сounted_bars==0) limit=Bars-1;
   if (сounted_bars>0) limit=Bars-сounted_bars-1;
   for(int i=limit;i>=0;i--){
       int T_V=0; 
       if (Volume[i]>Volume[i+1])T_V=1;
       if (Volume[i]<Volume[i+1])T_V=-1;
       T_Vol[i]=T_V;
   }
   return(0);
}
 
PapaYozh:


1.

¿Cuál es el valor de la variable "SignalBar" y se calcula el indicador en esta barra?

Quizás SignalBar=0 y el indicador no calcula la barra 0.

2.

Sí, durante las pruebas visuales los topes indicadores no se muestran hasta que la prueba se completa o se interrumpe. Pero los indicadores sí cuentan.

Gracias por señalarlo. Pero nada ayuda hasta ahora :(

Por lo tanto, ahora estoy estudiando la transferencia del indicador al Asesor Experto. Si tienes algún consejo sabio, ¡no lo rechazaré! :)

 

Hola a todos.

He estado estudiando programación como aficionado, hace mucho tiempo que no programo, así que tengo una pregunta:

¿Por qué necesito puntos de interrupción en MQL4, si después de establecerlos no pasa nada en la compilación? Solía programar mucho en C#, donde había una pausa en la ejecución del programa y podías ver los valores de las variables, qué funciones se llamaban y los errores que aparecían. Pero aquí pulso Compilar y no pasa nada. O puede habilitar la depuración de alguna manera, pero no sé cómo.

 

hay una función "double MathRound( double value)", pero necesito el redondeo a una fracción decimal mayor, y si el número es entero o ya es decimal, entonces dejarlo solo.

Por ejemplo: 1) 0,744 redondeado a 0,8; 1,233 redondeado a 1,3

2) 0,9 o 3 o 1,5 no se tocan.



¿Quién puede ayudar, por favor?
 

Me pregunto si sabe que existe una Documentación completa y detallada de la lengua.

NormalizarDoble

 
FAQ:

Me pregunto si sabe que existe una Documentación completa y detallada de la lengua.

NormalizarDoble

hacia arriba, es un poco fácil para ti, ¿eh?...
 
okvseok:
hacia arriba, es un poco simple, ¿no?

Puedes traducir un número en una cadena y escribir una función para procesar los caracteres de esta cadena. No es complicado: sólo redondeamos si el número tiene más de un dígito después del punto decimal.
 
drknn:

Puedes convertir un número en una cadena y escribir una función para procesar los caracteres de esa cadena. No es complicado: sólo redondeamos un número si tiene más de un dígito después del punto decimal.
Vale, lo intentaré de verdad. ¡Muchas gracias por la idea!
 
okvseok:

hay una función "double MathRound( double value)", pero necesito el redondeo a una fracción decimal mayor, y si el número es entero o ya es decimal, entonces dejarlo solo.

Por ejemplo: 1) 0,744 redondeado a 0,8; 1,233 redondeado a 1,3

2) 0,9 o 3 o 1,5 no se tocan.

double MathRoundDec(double dValue) 
 {
  if (dValue == NormalizeDouble(dValue, 1)) return(dValue);
  return(MathRound(10 * dValue) / 10);  
 }
No lo he comprobado, pero eso es todo.