Errores, fallos, preguntas - página 811

 
abeiks:

Buenas tardes.

Estoy tratando de usar MQL5.He desmontado exp_tema.mq5 y he modificado el código. Ahora debería imprimir en log MA de cada vela (últimas 20). Pero no entiendo por qué faltan algunas entradas en el registro. Me he dado cuenta de que si falta ma[3] en el registro, entonces no hay ma[13]. ¿Por qué ocurre esto? ¿Dónde está el error?

Aquí está.

if(CopyBuffer(Handle[Number],0,0,20,ma)<0)

es obvio que falta un cheque:

  1. BaresCalculados >= 20
  2. CopyBuffer==20
Archivos adjuntos:
exp_tema.mq5  27 kb
 
sergeev:

No hace falta un vídeo.

Haz un Print detallado en el código, para que podamos ver en el log a qué son iguales las variables intermedias.

#property copyright "Copyright 2011, "

#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   double Vhod=0;
      Print("Начало_Vhod="+DoubleToString(Vhod,2));
   Vhod=linfunc(15);
      Print("Конец_Vhod="+DoubleToString(Vhod,2));
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
double  linfunc(double b) // имя функции и список параметров
  {
   double a=1;

   while((a/b)<1 && !IsStopped())//-------------------
     {
      Print("а="+DoubleToString(a,2)+", b="+DoubleToString(b,2)+", a/b="+DoubleToString(a/b,2));
      a=a+1;
     }
   Print("а="+DoubleToString(a,2)+", b="+DoubleToString(b,2)+", a/b="+DoubleToString(a/b,2));
   Print("a+b="+DoubleToString(a+b,2));
         double f=a+b;
         // составной оператор
         return(f);           // возвращаемое значение
         }
//+------------------------------------------------------------------+

Aquí está el código.

Aquí está su impresión

GM 0 1 (EURUSD,M1) 18:11:11 Start_Vhod=0.00
FO 0 1 (EURUSD,M1) 18:11:13 a=1.00, b=15.00, a/b=0.07
JF 0 1 (EURUSD,M1) 18:11:13 a=2.00, b=15.00, a/b=0.13
CQ 0 1 (EURUSD,M1) 18:11:13 a=3.00, b=15.00, a/b=0.20
EH 0 1 (EURUSD,M1) 18:11:13 a=4.00, b=15.00, a/b=0.27
KS 0 1 (EURUSD,M1) 18:11:13 a=5.00, b=15.00, a/b=0.33
PJ 0 1 (EURUSD,M1) 18:11:13 a=6.00, b=15.00, a/b=0.40
PE 0 1 (EURUSD,M1) 18:11:13 a=7,00, b=15,00, a/b=0,47
HL 0 1 (EURUSD,M1) 18:11:13 a=8.00, b=15.00, a/b=0.53
MF 0 1 (EURUSD,M1) 18:11:13 a=9.00, b=15.00, a/b=0.60
JR 0 1 (EURUSD,M1) 18:11:13 a=10.00, b=15.00, a/b=0.67
FK 0 1 (EURUSD,M1) 18:11:13 a=11.00, b=15.00, a/b=0.73
OP 0 1 (EURUSD,M1) 18:11:13 a=12.00, b=15.00, a/b=0.80
MI 0 1 (EURUSD,M1) 18:11:13 a=13,00, b=15,00, a/b=0,87
KF 0 1 (EURUSD,M1) 18:11:13 a=14.00, b=15.00, a/b=0.93
EO 0 1 (EURUSD,M1) 18:11:13 a=15.00, b=15.00, a/b=1.00
DJ 0 1 (EURUSD,M1) 18:11:14 a+b=30.00
RL 0 1 1 (EURUSD,M1) 18:11:17 End_Vhod=0.00
NH 2 1 (EURUSD,M1) 18:11:24 depuración terminada

 
Fia:


Si ejecuta la depuración EX5 no desde el editor, sino directamente en el terminal - el mismo resultado?

¿Puede adjuntar la depuración EX5?

 
Fia:

Aquí está su huella

GM 0 1 (EURUSD,M1) 18:11:11 Start_Vhod=0.00
FO 0 1 (EURUSD,M1) 18:11:13 a=1.00, b=15.00, a/b=0.07
JF 0 1 (EURUSD,M1) 18:11:13 a=2.00, b=15.00, a/b=0.13
CQ 0 1 (EURUSD,M1) 18:11:13 a=3.00, b=15.00, a/b=0.20
EH 0 1 (EURUSD,M1) 18:11:13 a=4.00, b=15.00, a/b=0.27
KS 0 1 (EURUSD,M1) 18:11:13 a=5.00, b=15.00, a/b=0.33
PJ 0 1 (EURUSD,M1) 18:11:13 a=6.00, b=15.00, a/b=0.40
PE 0 1 (EURUSD,M1) 18:11:13 a=7,00, b=15,00, a/b=0,47
HL 0 1 (EURUSD,M1) 18:11:13 a=8.00, b=15.00, a/b=0.53
MF 0 1 (EURUSD,M1) 18:11:13 a=9.00, b=15.00, a/b=0.60
JR 0 1 (EURUSD,M1) 18:11:13 a=10.00, b=15.00, a/b=0.67
FK 0 1 (EURUSD,M1) 18:11:13 a=11.00, b=15.00, a/b=0.73
OP 0 1 (EURUSD,M1) 18:11:13 a=12.00, b=15.00, a/b=0.80
MI 0 1 (EURUSD,M1) 18:11:13 a=13,00, b=15,00, a/b=0,87
KF 0 1 (EURUSD,M1) 18:11:13 a=14.00, b=15.00, a/b=0.93
EO 0 1 (EURUSD,M1) 18:11:13 a=15.00, b=15.00, a/b=1.00
DJ 0 1 (EURUSD,M1) 18:11:14 a+b=30.00
RL 0 1 1 (EURUSD,M1) 18:11:17 End_Vhod=0.00
NH 2 1 (EURUSD,M1) 18:11:24 depuración terminada

No toca.

2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   Конец_Vhod=30.00
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   a+b=30.00
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=15.00, b=15.00, a/b=1.00
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=14.00, b=15.00, a/b=0.93
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=13.00, b=15.00, a/b=0.87
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=12.00, b=15.00, a/b=0.80
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=11.00, b=15.00, a/b=0.73
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=10.00, b=15.00, a/b=0.67
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=9.00, b=15.00, a/b=0.60
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=8.00, b=15.00, a/b=0.53
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=7.00, b=15.00, a/b=0.47
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=6.00, b=15.00, a/b=0.40
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=5.00, b=15.00, a/b=0.33
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=4.00, b=15.00, a/b=0.27
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=3.00, b=15.00, a/b=0.20
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=2.00, b=15.00, a/b=0.13
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   а=1.00, b=15.00, a/b=0.07
2012.08.16 18:42:34     Test_001 (GBPUSD,M15)   Начало_Vhod=0.00

Win7 x64

MT5 x64 build 687

 
alexvd:

Si ejecuta la depuración EX5 no desde el editor, sino directamente en el terminal - el mismo resultado?

¿Puede adjuntar la depuración EX5?

Es interesante, si lo ejecuto desde tester, da 30, si lo ejecuto como EA, también da 30 en la impresión.

Si vuelvo a la depuración, devuelve 0.


MetaDriver

En qué construcción y en qué tipo (perdón por la expresión) funcionó.

Probablemente debería seguir poniendo un vídeo, si nadie más no puede reproducir este milagro.

Archivos adjuntos:
1.ex5  5 kb
 
alexvd:

Allí mismo

es evidente que faltan algunas comprobaciones:

  1. BaresCalculados >= 20
  2. CopyBuffer==20

Gracias, intentaré añadirlo.

 

Aquí tienes un vídeo (pero elige una resolución superior a 720, de lo contrario todo quedará en jabón)

https://www.youtube.com/watch?v=Prpw6DUYvjY&feature=youtu.be

Win7 64bit MT5 687 build

Según he averiguado el efecto cuando el retorno da 0 parece ocurrir sólo en el depurador.

Al mismo tiempo, si utilizo sólo el botón de "paso mientras", parece que funciona.

Si entro en el bucle while para salir con el botón "step in", no funciona, la salida es estable 0.

En general, el video muestra todo, pero cómo ser y qué hacer hasta que no entiendo (y ¿por qué es tan sólo yo?)

 
Fia:
Win7 64bit MT5 687 build
¿Cuál es la tasa de bits del terminal?
 

Durante la optimización aparecieron símbolos incomprensibles

En la pestaña del gráfico de optimización vertical, todos los valores son -1

 
alexvd:

Allí mismo

claramente carente de controles:

  1. BaresCalculados >= 20
  2. CopyBuffer==20

Sin embargo, sigo teniendo problemas con los búferes. Todo está claro cuando los leo, pero no entiendo cómo deben implementarse en el código. Si no es mucha molestia, ¿puedes insertarlo en el código?