Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 143
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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.
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.
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.
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? Necesito conseguir el precio mínimo.
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.
¿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:
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?
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í:
Compruebe y pruebe los fines de semana y más allá, tiene que guionizar.
Compruebe y pruebe los fines de semana y más allá, tiene que guionizar.