Errores, fallos, preguntas - página 1954

 
Andrey Barinov:
Traiga de vuelta los postes de señalización.
Gracias por la idea. Me había olvidado de ellos.
 
Alexey Kozitsyn:
Gracias por la idea. Me había olvidado completamente de ellos.

Qué raro. Obtengoun error de compilación de su código.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

En la descripción de la función GetBMember (que en castellano dice que se cree una copia). ¿Es la última versión del compilador?

Cuando se soluciona este problema añadiendo un constructor de copia B, se puede devolver const B desde el método GetBMember.

Entonces el compilador jurará ante el intento de hacer un Reset de la variable devuelta:

'Reset' - call non-const method for constant object

 
Stanislav Korotky:

Qué raro. Estoy recibiendo un error de compilación de su código.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

En la descripción de la función GetBMember. ¿Es la última versión del compilador?

Cuando se soluciona este problema añadiendo un constructor de copia B, se puede devolver const B desde el método GetBMember.

Entonces el compilador jurará cuando intentes hacer un Reset de la variable devuelta:

'Reset' - call non-const method for constant object

Este código es sólo un ejemplo escrito en el navegador. Me preguntaba por qué el compilador no informa de nada. Pero ya me lo he imaginado.

Y, no hay constructores en mi ejemplo en absoluto:)

 

¡Hola! 2017.08.03_18:45 GMT+3. He escrito un archivo OOP SignalIchimoku.mqh . Pero cuando necesito hacer cálculos simples a LongCondition() y ShortCondition() en una función separada, la función se escribe, el compilador da 0 errores, 0 advertencias. Pero esta función no funciona, no se realiza ningún cálculo. El programa no abre las transacciones. Lo he comprobado: he insertado el valor de la variable Print() en la función. Esta función es similar a las funciones StateStoch(int ind), ExtStateStoch(int ind) y CompareMaps() de SignalStoch.mqh , un archivo estándar de la biblioteca estándar. Todo funciona en el archivo estándar, pero a mí no me funciona. ¿Por qué? ¿Otra vez las "reglas simples"? Quién sabe... dime. Si necesita detalles o tiene alguna pregunta, escriba. 18:59 GMT+3.

Archivos adjuntos:
 

CCanvas. Hay un pequeño error en la implementación de la función FillCircle. Es un píxel más estrecho, como puede verse en esta animación GIF:

Además, el algoritmo está muy poco construido, ya que alrededor del 30% de los puntos se dibujan dos veces. Esto se soluciona fácilmente moviendo dos líneas de código, con un aumento de velocidad del 30% de media.
Aquí está la versión original de FillCircle:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dx,x+dx,y-dy,clr);
      LineHorizontal(x-dx,x+dx,y+dy,clr);
      LineHorizontal(x-dy,x+dy,y-dx,clr);
      LineHorizontal(x-dy,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }

Y aquí está la versión arreglada:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dy-1,x+dy,y-dx,clr);
      LineHorizontal(x-dy-1,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         LineHorizontal(x-dx-1,x+dx,y-dy,clr);
         LineHorizontal(x-dx-1,x+dx,y+dy,clr);
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }
 

Acerca de la orden pendiente se elimina (no hay suficiente dinero)

Un trabajo válido del Asesor Experto, es cuando no se producen errores durante su funcionamiento.

La orden pendiente se elimina (no hay suficiente dinero) es un error.

La cuestión es que es teóricamente imposible seguir el margen necesario para abrir una orden, si se abre con un deslizamiento.

Por ejemplo, hemos establecido y calculado que hay suficiente dinero para abrir una orden pendiente de venta a 1,500. (A 1.499 no hay más).

El precio actual es de 1,501.

El siguiente tick y tenemos un precio de 1,499.

Un intento de abrir una orden y un error.

Por lo tanto, hemos considerado inicialmente la situación en la que este error no puede evitarse al 100%.

¿O me he perdido algo?

 

No consigo averiguar cómo sacar los archivos mqh de un subdirectorio de la carpetaExpertos.

¿Cómo se extraen los archivos mqh de la carpeta One a la carpeta Two?

 
Vladimir Pastushak:

No consigo averiguar cómo sacar los archivos mqh de un subdirectorio de la carpetaExpertos.

¿Cómo se extraen los archivos mqh de la carpeta One a la carpeta Two?


solución encontrada. Si el archivo, al que quiere conectar el inyector, se encuentra en Test\One, y el inyector en Test\Two, entonces...

Es así:

#include "..\Two\name.mqh""
Resulta que: ..\N- desde Uno ve a Prueba y Dos\Nnombre.mqh - desde Prueba ve a Dos y selecciona el nombre del archivo.mqh
 
el perfil no muestra "mis mensajes"

y en los perfiles de otras personas
 
Vladimir Pastushak:

solución encontrada. Si un archivo al que quiere conectar un inluder está en Test\One, y un inluder en Test\Two, entonces...

Así:

Resulta que: ..\N- desde Uno ve a Prueba y Dos\Nnombre.mqh - desde Prueba ve a Dos y selecciona nombre de archivo.mqh

Hay construcciones de este tipo:

#include "..\..\Two\name.mqh"