Errores, fallos, preguntas - página 1699

 
Karputov Vladimir:
No se puede culpar de todos los errores de programación a los bichos.

¿Qué clase de sorpresa es esta? Señalo un error obvio, y recibo esta tontería sobre el "estilo".

Estoy tan lejos de A100 y Meat como la luna. Te muestran bichos, aunque no los entiendo. Pero no voy a meter mi "estilo" en esto.

 
fxsaber:
No funciona.

Aquí está el código completo:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

double Buffer[];

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   SetIndexBuffer(0,Buffer,INDICATOR_DATA);

   handle=ChartIndicatorGet(0,1,ChartIndicatorName(0,1,0));
  }

#define  TOSTRING(A) #A + " = " + (string)A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
  {
//if(handle!=INVALID_HANDLE)
   if(prev_calculated!=0)
     {
      Buffer[rates_total-1]=MathRand();

      double BufferCopy[];
      Print(__FUNCTION__);
      if(CopyBuffer(handle,0,0,1,BufferCopy)>0)
         Print(TOSTRING(BufferCopy[0])+TOSTRING(Buffer[rates_total-1]));
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int Reason)
  {
   Print("#1 OnDeinit");
   if(handle!=INVALID_HANDLE)
     {
      Print("#2 OnDeinit");
      IndicatorRelease(handle);
      Print("#3 OnDeinit");
     }
   Print("#4 OnDeinit");
   return;
  }
//+------------------------------------------------------------------+

y una impresión:

2016.09.23 12:34:03.318 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:03.318 2 (SBRF-12.16,M1)       BufferCopy[0] = 265.0
2016.09.23 12:34:03.319 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 18992.0
2016.09.23 12:34:03.319 2 (SBRF-12.16,M1)       
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       BufferCopy[0] = 265.0
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 12498.0
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       
... экономия бумаги :)
2016.09.23 12:34:31.804 2 (SBRF-12.16,M1)       
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       BufferCopy[0] = 614.0
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 5343.0
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       BufferCopy[0] = 614.0
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 17815.0
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #1 OnDeinit
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #2 OnDeinit
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #3 OnDeinit
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #4 OnDeinit
Archivos adjuntos:
2.mq5  3 kb
 
Karputov Vladimir:

Aquí está el código completo:

y una impresión:

No me funciona, ni siquiera llega a OnDeinit.

Y fíjate que mis números coinciden en el registro, pero los tuyos no. Mi registro

PP      0       12:41:08.169    Test3 (RTS-12.16,H1)    OnCalculate
FE      0       12:41:08.169    Test3 (RTS-12.16,H1)    BufferCopy[0] = 13573.0
IQ      0       12:41:08.169    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 13573.0
CF      0       12:41:08.169    Test3 (RTS-12.16,H1)    
JO      0       12:41:08.169    Test3 (RTS-12.16,H1)    OnCalculate
QI      0       12:41:08.169    Test3 (RTS-12.16,H1)    BufferCopy[0] = 25434.0
NM      0       12:41:08.169    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 25434.0
MJ      0       12:41:08.169    Test3 (RTS-12.16,H1)    
DJ      0       12:41:08.187    Test3 (RTS-12.16,H1)    OnCalculate
QO      0       12:41:08.187    Test3 (RTS-12.16,H1)    BufferCopy[0] = 9469.0
HK      0       12:41:08.187    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 9469.0
CM      0       12:41:08.187    Test3 (RTS-12.16,H1)    
JF      0       12:41:08.187    Test3 (RTS-12.16,H1)    OnCalculate
OS      0       12:41:08.187    Test3 (RTS-12.16,H1)    BufferCopy[0] = 1887.0
NG      0       12:41:08.187    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 1887.0
No tengo ni un solo indicador o EA funcionando en mi terminal.
 
fxsaber:

No me funciona, ni siquiera llega a OnDeinit.

Y fíjate que mis números coinciden en el registro, pero los tuyos no. Mi registro

No tengo ningún indicador o Asesor Experto ejecutándose en mi terminal.

Tengo esta configuración:

2016.09.23 12:25:34.874 Terminal        MetaTrader 5 x64 build 1430 started (MetaQuotes Software Corp.)
2016.09.23 12:25:34.876 Terminal        Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120 M  @ 2.50 GHz, RAM: 2446 / 8077 Mb, HDD: 40118 / 233310 Mb, GMT+02:00
2016.09.23 12:25:34.876 Terminal        C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

(Después de reiniciar la térmica, pestaña de registro, primeras tres líneas)

 
Karputov Vladimir:

Tengo esta configuración:

(Después de reiniciar la térmica, pestaña Log, primeras tres líneas)

2016.09.23 12:42:22.405 Terminal        C:\Program Files\BCS Broker MetaTrader 5 Terminal
2016.09.23 12:42:22.405 Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700 K  @ 3.50 GHz, RAM: 8098 / 16301 Mb, HDD: 6387 / 30000 Mb, GMT+02:00
2016.09.23 12:42:22.405 Terminal        BCS Broker MetaTrader 5 Terminal x64 build 1430 started (BCS Broker)
 
fxsaber:

Ambigua. En una máquina x32:

2016.09.23 13:23:55.052 Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
2016.09.23 13:23:55.052 Terminal        Windows 10 Home (X86 based PC), IE 11.00, UAC, Intel Atom  Z3740 @ 1.33 GHz, RAM: 607 / 1931 Mb, HDD: 20500 / 49784 Mb, GMT+02:00
2016.09.23 13:23:55.049 Terminal        MetaTrader 5 build 1430 started (MetaQuotes Software Corp.)


No funciona.

 
Andrey Barinov:
Se "retiran", pero habrá un error de compilación al intentar llamarlos.

No lo necesito así, estoy tratando de hacer un montón de trabajo para hacer mi vida más fácil en el futuro.

He superado mi problema de esta manera en el padre todos los protecd y la herencia va bajo protecd y luego override.

 
Karputov Vladimir:

Ambigua. En una máquina x32:


No funciona.

La solicitud se ha hecho, aunque estoy harto de hacerla tan a menudo.
 
fxsaber:

¿Cómo puedo conocer mi mango en un gráfico en un indicador?ChartIndicatorName no es adecuado, porque devuelve un nombre corto. Y con el mismo nombre puede estar ya funcionando el mismo indicador con diferentes parámetros de entrada.

Necesito que se pueda eliminar el indicador del gráfico y los cálculos.

Es posible que ya se haya dado cuenta, pero lo aclararé por si acaso. El handle del indicador es en realidad sólo la referencia a la descripción del indicador dentro del programa que lo creó (es decir, Asesor Experto, indicador, script), podemos considerarlo como una especie de "número". Esto significa que este "número" no tiene ningún significado fuera del programa que creó el indicador (que obtuvo su mango). Incluso el programa que llama a la función ChartIndicatorGet() no obtiene algún manejador global del indicador, sólo crea la descripción de este indicador y asigna su "número" para el direccionamiento. No existe un indicador global, único en todo el terminal.

El uso del nombre corto puede verse en los ejemplos. Puedes hacerlo:

   string short_name="unknown ma";
   switch(InpMAMethod)
     {
      case MODE_EMA :  short_name="EMA";  break;
      case MODE_LWMA : short_name="LWMA"; break;
      case MODE_SMA :  short_name="SMA";  break;
      case MODE_SMMA : short_name="SMMA"; break;
     }
   IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(InpMAPeriod)+")");

Esto resuelve el problema de " el mismoindicadorya se ha ejecutado con diferentes parámetros de entrada".

Y visualmente está más claro qué indicador funciona:


 
Anton:

Es posible que ya se haya dado cuenta, pero lo aclararé por si acaso. El manejador del indicador es en realidad sólo una dirección a la descripción del indicador dentro del programa que lo creó (es decir, Asesor Experto, indicador, script), podemos considerarlo como una especie de "número". Esto significa que este "número" no tiene ningún significado fuera del programa que creó el indicador (que obtuvo su mango). Incluso el programa que llama a la función ChartIndicatorGet() no obtiene algún manejador global del indicador, sólo crea la descripción de este indicador y asigna su "número" para el direccionamiento. No existe un indicador global, único en todo el terminal.

Puede ver el uso de ShortName en los ejemplos. Puedes hacerlo así:

Esto resuelve el problema de " el mismoindicadorya se ha ejecutado con diferentes parámetros de entrada".

Y visualmente es más fácil entender qué indicador funciona:

Gracias, así es como me lo explicó stringo hace un tiempo. He encontrado varias formas de determinar que el mango pertenece a "mí":

  1. Cambio el valor extremo del buffer del indicador y lo comparo con el valor correspondiente del CopyBuffer. Si coincide, es "yo". Esa es la idea que hay detrás del indicador de imbatibilidad.
  2. Cambio ShortName y comparo con ChartIndicatorName.