Errores, fallos, preguntas - página 379

 
Graff:

¿Tiene sentido

sustituir rates_total por BarsCalculated(ich)?

No lo creo. Es más bien un stub de servicio para asegurarse de que el buffer está listo...

Además, Copy devolverá tantos datos como se hayan calculado, no el tamaño solicitado.


¿Y de qué ciudad eres, si no es un secreto?

no en Dnepr.
 
sergeev:

Por cierto, ¿estás seguro de que no necesitas llamar a ninguna función adicional?

La biblioteca tiene tanto Refresh como BufferResize. Me parece que son necesarios para el funcionamiento normal.


¿Y dónde está escrito que deban serlo?

He probado diferentes variantes.

ichi.Refresh(true);
ichi.Refresh(false);
ichi.RefreshCurrent(true);
ichi.RefreshCurrent(false);

No tengo ningún efecto.

 

Continúa....

El indicador iIchimoku está experimentando un fallo. Mi indicador sólo dibuja flechas en función de if(tenkan[i]>kijun[i]). Como puedes ver en la captura de pantalla las flechas no se dibujan correctamente

El código completo está en el archivo Ich_1_f.mq5

Sin embargo, si se calculan manualmente, todo se muestra correctamente

Código completo en el archivo Ich_1_ok.mq5

Archivos adjuntos:
Ich_1_f.mq5  6 kb
Ich_1_ok.mq5  6 kb
 

Escribe la dll :

#define _DLLAPI extern "C" __declspec(dllexport)
//+------------------------------------------------------------------+
//| адрес переменной double                                          |
//+------------------------------------------------------------------+
_DLLAPI int __stdcall
GetPtrVar(double a){return((int)(&a));}
//+------------------------------------------------------------------+
//| значение переменной double по адресу                             |
//+------------------------------------------------------------------+
_DLLAPI double __stdcall
GetValuePtr(int pointer){return(*(double*)pointer);}

conéctalo :

#import "Projeckt1.dll"
int      GetPtrVar(double a);
double   GetValuePtr(int pointer);
#import

llamar :

void OnStart()
  {   
   double var=153.25; 
   Print("вложенный вызов = ",GetValuePtr(GetPtrVar(var)));
   int pointer=GetPtrVar(var);   
   Print("вызов с сохранением адреса = ",GetValuePtr(pointer));
  }

conseguimos esto:

2011.05.01 18:09:12     Черновик 31 (EURUSD,H1) вызов с сохранением адреса = 5.560304580319136 e-287
2011.05.01 18:09:12     Черновик 31 (EURUSD,H1) вложенный вызов = 153.25

aunque ambas líneas deberían devolver el mismo valor 153,25.

¿Por qué?

 
Urain:

¿Por qué?
¿Esto es en la versión de 32 o 64 bits?
 
Renat:
¿Esto es en la versión de 32 o 64 bits?

32
 

Es muy sencillo - en la función GetPtrVar(double a) se toma la dirección de una copia de la variable en la pila y luego se intenta leer el trozo de memoria de la pila.

La primera vez, debido a una llamada cercana de GetValuePtr conseguimos leer de la pila no contaminada, mientras que las siguientes llamadas a la función dañaron la pila irremediablemente.

No hay ningún error.

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
Renat:

Es muy simple - en la función GetPtrVar(double a) toma la dirección de una copia de la variable en la pila, y luego trata de leer el pedazo de memoria de la pila.

Sí, exactamente, sentí que tenía que cavar allí en alguna parte.

tienes que escribir en el dll

GetPtrVar(double &a){return((int)(&a));}
 
Renat:

Es muy sencillo - en la función GetPtrVar(double a) se toma la dirección de una copia de la variable en la pila y luego se intenta leer el trozo de memoria de la pila.

La primera vez, debido a una llamada cercana de GetValuePtr conseguimos leer de la pila no contaminada, mientras que las siguientes llamadas a la función dañaron la pila irremediablemente.

No hay ningún error.

Yo también lo noté. Creo que esta es la forma correcta de hacerlo:

#define _DLLAPI extern "C" __declspec(dllexport)
//+------------------------------------------------------------------+
//| адрес переменной double                                          |
//+------------------------------------------------------------------+
_DLLAPI int __stdcall
GetPtrVar(double & a){return((int)(&a));}
//+------------------------------------------------------------------+
//| значение переменной double по адресу                             |
//+------------------------------------------------------------------+
_DLLAPI double __stdcall
GetValuePtr(int pointer){return(*(double*)pointer);}

enchufe :

#import "Projeckt1.dll"
int      GetPtrVar(double & a);
double   GetValuePtr(int pointer);
#import
 
En la versión 439 de Metatrader5, se ha añadido un indicador de calidad del historial. Cuando estoy probando en M1 y H4 en los precios de apertura y en todos los ticks, la calidad es del 51%... ¿Por qué y cómo aumentarlo? La fuente de las citas es alpari demo.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5