Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 143

 
barabashkakvn:
Estoy de acuerdo con lo de int(round). Gracias. Una conversión de tipo explícita no estaría de más. Aunque funcionó sin la conversión explícita de tipos.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:
Estoy de acuerdo con lo de int(round). Gracias. Una conversión de tipo explícita no estaría de más. Pero funcionaba bien sin la conversión explícita de tipos.
Funcionó, pero las observaciones del compilador... Son molestos.
 
barabashkakvn:

No tengo ningún error. La construcción es la más reciente.

Gracias, la actualización de MT5 ayudó. El error ha desaparecido. la build era del 23 de julio de 2013. en la antigua build, por cierto, no había garantías de conversión de tipos, por eso no me di cuenta.

Quién iba a esperar errores tan graves del compilador.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:

Gracias, la actualización de MT5 ayudó. El fallo ha desaparecido, la build era del 23 de julio de 2013. En la antigua build, por cierto, no había garantías de conversión de tipos, por lo que no me di cuenta.

Quién iba a esperar errores tan graves del compilador.

Lo principal es que ha funcionado :). Eso es todo, vete a dormir.
 

Hay que encontrar el mínimo en el intervalo de tiempo. He hecho el siguiente código para encontrar el mínimo en el intervalo de tiempo:

datetime ts=st+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
int tss=(int)ts;//преобразование в секунды
Alert( "tss",tss);
datetime tsp=st+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
int tspp=(int)tsp;//преобразование в секунды

Para encontrar los mínimos en este intervalo utilizo la función CopyLow:

double Low[];
CopyLow(_Symbol,_Period,tss,tspp,Low); 

Entonces, si entiendo bien, obtengo un array unidimensionalLow[],

Busco el mínimo en él con ArrayMinimum:

int start=0;
int count=WHOLE_ARRAY; 
double min=ArrayMinimum(Low,tss, tspp);  
Alert("min=",min);

He intentado establecer hoy una hora de inicio de 1 hora, una hora de finalización de 2 horas y llamar a Alert para comprobar min=-1.

Pregunta: para este problema, ¿se han elegido correctamente las funciones para resolver este problema, o hay un error en alguna parte? Necesito conseguir el precio mínimo.

 
Hola. Estimados comerciantes, por favor ayúdenme con el diseño correcto de la pieza del programa para 3 diapositivas en un EA multidivisa.

Intenté buscarlo en el Manual, pero es un ejemplo basado en la clase, y aún no estoy preparado para ello.

Quiero escribir un EA sin usar clases. He excluido todas las cosas extrañas de la consideración y para obtener 3 resbalones para cada

He escrito el siguiente fragmento de programa:

input int Kurtz_Period=5; // período de Kurtz de movimiento rápido

input int Mittel_Period=8 ;

input int Periodo_largo=13;

int maHandle; /manejador del indicador de Media Móvil

double ma_buf[]; // se trata de una matriz de almacenamiento para las lecturas de la media móvil de la función MA

// y luego se copiará en las matrices correspondientes

datetime Time_buf[]; // se trata de un array de la hora de apertura del bar

datetime Time_[6][150]; // array de la hora de apertura del bar

double Kurtz[6][70]; //esta es una matriz para el Kurtz de movimiento rápido, los números de las filas corresponden a los números de las monedas utilizadas, mientras que las columnas son los recuentos del movimiento

double Mittel[6][70]; // esta es la matriz para la media móvil Mittel

double Long[6][70]; // se trata de un array para el deslizamiento de un periodo largo Long

string Nombre_símbolo[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // se trata de una matriz de texto de nombres de divisas:

int nomer_instr; // es un número de instrumento (moneda), sólo para organizar los ciclos por monedas

int OnInit()

{

//-----

//-------

}

void OnDeinit(const int reason)

{

//---

ArrayFree(Time_buf);

ArrayFree( ma_buf); // poner a cero el array liberado

//-------

}

void OnTick()

{

//---------------------

ArraySetAsSeries(time_buf, true); //configurar la indexación de la matriz time_array como en timeseries

ArraySetAsSeries(ma_buf, true); //configuración de la indexación del array ma_buf como en timeseries

for( nomer_instr=0; nomer_instr<=5; nomer_instr++ ) // esto es un bucle sobre todas las monedas utilizadas

{

int digit = int( SymbolInfoInteger( Nombre_símbolo[nomer_instr], SYMBOL_DIGITS)); // este es el número de dígitos en la cotización de la moneda

CopyTime( Nombre_símbolo[nomer_instr], PERIOD_M1,0,160,Time_buf); // copiar los datos históricos de tiempo de cada barra en el buffer

for( i=1; i<=145; i++ ) Time[nomer_instr][i]=Time_buf[i]; // hora de apertura de la primera barra

//#############################################################################################

//Cuentas de generación de bloques de los 3 primeros compases de deslizamiento:Kurtz, Mittel, Long

manHandle = iMA( Nombre_símbolo[nomer_instr],PERIOD_M1, Kurtz_Period , 0, MODE_SMMA, PRICE_CLOSE );

if( CopyBuffer(maHandle,0,0,155,ma_buf)<0 )

{

Alert("Error al copiar los buffers de los indicadores ---PERIOD_M1,Kurtz_Period--- Media móvil - número de error:",GetLastError());

volver;

}

for( i=1; i<=45; i++ ) Kurtz[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

/*

//===============================================================

// Bloqueo de la comprobación del desplazamiento de la barra como en las series de tiempo y la precisión de la normalización de los números

// MA-5 de movimiento rápido

if( Multi_Torgi == 0 && Optim_parametrov == nomer_instr ) // esta es una clave para seleccionar el modo del Asesor Experto, ahora está en el modo de depuración

{

for( i=1; i<=5; i++ )

{

if(i==1) Alert("====================");

if(i==1) Alert(" hora de apertura de la 1ª barra: Time[nomer_instr][1]=",Time[nomer_instr][1] );

Alerta(" número de barra: i=",i,", MA_buf[i]=",MA_buf[i],", Kurtz[nomer_instr][i]=",Kurtz[nomer_instr][i]);

}

}

//=================================================================

*/

//---------------------------------------------------------------------------------------------------------------------------

maHandle = iMA( Nombre_símbolo[nomer_instr],PERIOD_M1, Mittel_Period, 0, MODE_SMMA, PRICE_CLOSE );

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("Error al copiar los buffers de los indicadores ===PERIOD_M1, Mittel_Period,=== Media móvil - número de error:",GetLastError());

volver;

}

for( i=1; i<=45; i++ ) Mittel[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

//----------------------------------------------------------------------------------------------------------------------

maHandle = iMA( Nombre_símbolo[nomer_instr],PERIOD_M1, Long_Period, 0, MODE_SMMA, PRICE_CLOSE );

if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)

{

Alert("Error al copiar los buffers de los indicadores ===PERIOD_M1, Long_Period,===Moving Average - número de error:",GetLastError());

volver;

}

for( i=1; i<=45; i++ ) Long[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);

// fin del bloque que forma los recuentos de las 3 primeras diapositivas: Kurtz, Mittel,Long

//#############################################################################################

} // fin de bucle por monedas en uso

//============================================================

Otros operadores de programas

//============================================================

//-----------------------------------------

}// Fin de OnTick()

//+------------------------------------------------------------------+

No se detecta ningún error en este programa en tiempo de compilación, pero cuando se comprueba en el Diario de Sesiones para cada deslizamiento, aparece un

mensaje de error: 4806 es "datos solicitados no encontrados".

Por favor, dígame dónde tengo el error.

Gracias.

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

¿No entiendes el principio del encasillamiento? Es muy sencillo:

Ahora parece claro) Resulta que el operando int st es de un tipo menor que datetime tp[].

Por eso no hay conversión a segundos en la operación:

int st=tp[0];

He intentado encontrar el mínimo en el intervalo de tiempo. No estoy seguro de estar haciéndolo bien. ¿Puedes ver el post anterior?

¿Cómo se puede llamar a la Alerta o al Comentario sin nuevos ticks para hacer comprobaciones de fin de semana?

 
forexman77:

Hay que encontrar el mínimo en el intervalo de tiempo. He hecho el siguiente código para encontrar el mínimo en el intervalo de tiempo:

Para encontrar los mínimos en este intervalo utilizo la función CopyLow:

Entonces, si entiendo bien, obtengo un array unidimensionalLow[],

Busco el mínimo en él con ArrayMinimum:

He intentado establecer hoy una hora de inicio de 1 hora, una hora de finalización de 2 horas y llamar a Alert para comprobar min=-1.

Pregunta: para este problema, ¿se han elegido correctamente las funciones para resolver este problema, o hay un error en alguna parte? Tienes que conseguir el precio mínimo.

Por favor, lea atentamente:

Valor de retorno.

La función devuelve el índice del elemento encontrado teniendo en cuenta la serialidad del array. Sifalla, la función devuelve -1.

Por lo tanto, debería ser así:

Alert("min=",Low[ArrayMinimum(Low)]);
 

Compruebe y pruebe los fines de semana y más allá, tiene que guionizar.

 
DC2008:

Compruebe y pruebe los fines de semana y más allá, tiene que guionizar.

Gracias.