Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 178

 
Andrey Dik:

Sí, gracias.

No, pero gracias de todos modos)
No pensé que pudiera atascarse así... :-)))
 

Buenas noches.

Cuando se utiliza iOpen se especifica un turno. Si no hay suficiente historial para el desplazador especificado, se devuelve el iOpen de la barra más antigua.

Pregunta: ¿Cómo puedo hacer una comprobación para una barra con el cambiador especificado? Y en caso de que no haya suficiente historia, no devuelva iOpen?

 
Sergey:

Buenas noches.

Cuando se utiliza iOpen se especifica un turno. Si no hay suficiente historial para el desplazador especificado, se devuelve el iOpen de la barra más antigua.

Pregunta: ¿Cómo puedo hacer una comprobación para una barra con el cambiador especificado? ¿Y en caso de no tener suficiente historial no devuelve iOpen?


CopiarAbrir

La función recibe los datos históricos de los precios de apertura de la barra para un par símbolo-período especificado en la matriz open_array en la cantidad especificada. Hay que tener en cuenta que el recuento de elementos desde la posición inicial se realiza desde el presente hacia el pasado, es decir, la posición inicial igual a 0 significa la barra actual.


Cuando se copia una cantidad desconocida de datos, se recomienda utilizar un array dinámico como array de destino, ya que si los datos son menos (o más) de lo que el array puede contener, se intentará reorganizar el array para que los datos solicitados puedan ser copiados en su totalidad.

Si es necesario copiar una cantidad conocida de datos, es mejor copiarlos en un búfer asignado estáticamente para evitar una sobreasignación de memoria innecesaria.

Independientemente de si la propiedad as_series=true o as_series=false de la matriz receptora, los datos se copiarán de forma que el elemento más antiguo estará al principio de la memoria física asignada a la matriz. Hay 3 variantes de la función.

Referenciación por posición inicial y número de elementos necesarios

intCopyOpen(
stringsymbol_name,// nombre del símbolo
ENUM_TIMEFRAMEStimeframe,// período
intstart_pos,//donde empezar
intcount,// cuántos copiamos
doubleopen_array[]// matriz para copiar los precios de apertura
);

Acceso por fecha de inicio y número de elementos requeridos

intCopyOpen(
stringsymbol_name,// nombre del símbolo
ENUM_TIMEFRAMEStimeframe,// período
datetimestart_time,// desde qué fecha
intcount,// cuántos copiamos
doubleopen_array[]// matriz para copiar los precios de apertura
);

Acceso por fecha de inicio y fecha de finalización del intervalo de tiempo requerido

intCopyOpen(
stringsymbol_name,// nombre del símbolo
ENUM_TIMEFRAMEStimeframe,// período
datetimestart_time,// desde qué fecha
datetimestop_time,// hasta qué fecha
doubleopen_array[]// matriz para copiar los precios de apertura
);

Parámetros

nombre_símbolo

[El símbolo.

marco temporal

[en] Período.

start_pos

[in] Número del primer elemento a copiar.

contar

[in] Número de elementos a copiar.

hora_de_inicio

[in] Tiempo de barra correspondiente al primer elemento a copiar.

hora_de_parada

[in] El tiempo de barra correspondiente al último elemento.

open_array[]

[out] Array de tipo double.

Valor devuelto

El número de elementos del array copiados o -1 en caso de error.

Nota

Si el intervalo de datos solicitados está totalmente fuera de los datos disponibles en el servidor, la función devuelve -1. Si se solicitan datos fuera del TERMINAL_MAXBARS (número máximo de barras en el gráfico), la función también devolverá -1.

Si las series de tiempo solicitadas aún no están construidas o necesitan ser descargadas del servidor, la función devolverá inmediatamente -1.

Cuando se solicitan datos al Asesor Experto o a un script, se iniciará la carga desde el servidor, si el terminal no tiene estos datos localmente, o se iniciará la construcción de las series temporales requeridas, si los datos pueden ser construidos desde el historial local, pero aún no están listos. La función devolverá la cantidad de datos que estará lista para el tiempo de espera, pero la carga del historial continuará, y la siguiente petición similar devolverá más datos.

Cuando se solicitan datos por fecha de inicio y número de elementos requeridos, sólo se devolverán los datos con una fecha menor (anterior) o igual a la especificada. Al mismo tiempo, se especifica el intervalo y se tiene en cuenta hasta el segundo más cercano. Significa que la fecha de apertura de cualquier barra, para la que se devuelve el valor (volumen, spread, valor en el buffer del indicador, precio Open, High, Low, Close o tiempo de apertura Time), es siempre igual o menor que el especificado.

Al solicitar datos en el rango de fechas especificado, sólo se devolverán los datos que estén dentro del intervalo solicitado, y el intervalo se especifica y se tiene en cuenta hasta el segundo más cercano. Esto significa que la hora de apertura de cualquier barra para la que se devuelva un valor (volumen, spread, valor en el buffer del indicador, precio de apertura, alta, baja, cierre o tiempo de apertura), está siempre dentro del intervalo solicitado.

Así,si el día actual de la semana es el sábado, al intentar copiar los datos en el marco temporal semanal, especificando start_time=último martes y stop_time=último viernes, la función devolverá 0, ya que la hora de apertura del marco temporal semanal siempre cae en domingo, pero ninguna barra semanal cae en el rango especificado.

Si necesitamos obtener el valor correspondiente a la barra actual no terminada, podemos utilizar la primera forma de la llamada especificando start_pos=0 y count=1.

 

Saludos.

Señores, ¿me pueden decir cómo hacer una condición de niveles de cruce de precios con 1-2-3 ceros al final?

 
Andrey Sokolov:

Saludos.

Señores, ¿me pueden decir cómo hacer una condición de niveles de cruce de precios con 1-2-3 ceros al final?


Comparando el valor del precio pasado y el actual con este nivel, si el nivel se encuentra entre estos valores entonces se ha producido un cruce.
 
Sergey Gritsay:

Comparando el precio pasado y el actual con este nivel, si el nivel se encuentra entre estos valores entonces se ha producido un cruce.


¿Cómo puedo especificar estos niveles para compararlos?

O bien, ¿cómo puedo especificar que el número debe tener el número correcto de decimales? No por redondeo, sino por borrado.

 
Andrey Sokolov:


¿Y cómo escribo estos niveles para compararlos?

O bien, ¿cómo puedo especificar que el número debe tener el número correcto de decimales? No por redondeo, sino por eliminación.

Aquí está la función de búsqueda.

//===============================================================================================
//---------------------------- Возвращает ближайший круглый уровень ----------------------------+
//===============================================================================================
double GetUniversalLevel(int ne=100, string symb="0") {
 if(symb=="0") symb=Symbol();
 static double LastBid;
 double _Level=0, PriceStep=0, bid=0, point=0;
 bid=dBid(symb);
 point=dPoint(symb);
  if(LastBid<point) {LastBid=bid;} // Инициализация прошлой цены
   PriceStep=ne*point; // Шаг цены N пунктов.
   _Level=MathRound(bid/PriceStep)*PriceStep; // Круглый уровень
  LastBid=bid;
  return(_Level);
 }
Comment( GetUniversalLevel(50) );
 

Sergey Gritsay,Vitaly Muzichenko, gracias.

También me sugirieron la función MathFloor() - Devuelve el valor numérico entero más cercano al fondo.

 
Vitalie Postolache:

Dig MySQL.
Excavando...interesante...tal vez en un par de meses me reiré de mis preguntas actuales, pero todavía al principio del viaje...

Sergey Gritsay:
Para este propósito usted necesita crear un servidor fuera de su computadora local y transmitir los datos a través de este servidor. Para MT un indicador o un Asesor Experto debe ser escrito para procesar estos datos, o los terminales deben ser colocados en algún servidor VPS y allí usted debe configurar el copiador de operaciones desde su cuenta a las cuentas de sus amigos. Otra opción es copiar sus operaciones ejecutadas en determinados nivelesa través del servicio deseñales. En general, debe tener en cuenta su capacidad financiera para pedir el software adecuado.


MosheDayan:

Permítanme recordarles la prehistoria. Tengo un indicador diario que obtiene datos del csv y los muestra (niveles horizontales) en un gráfico. He creado un servidor desde el portátil de casa (es flojo pero no necesito cálculos allí y me dará csvs y son muy pequeños). En el servidor para la conexión de prueba vertió el motor habitual del foro - todo parece ser visible desde el exterior. Ayuda con consejos. Que debe estar en el servidor para leer de él los archivos csv del indicador? Es decir, ¿cómo se comunica el indicador con la base de datos csv? ¿Tal vez llenar el servidor fTP del motor o algo más y puede para MT necesidad de abrir algunos puertos especiales? ¿O me he equivocado de dirección en general? Gracias


Amigos, ¿puedo hacerles otra pregunta? ¿Es posible no cargar un ordenador portátil de casa, sino utilizar, para vincular el indicador con los archivos csv, el almacenamiento gratuito de archivos en la nube como, por ejemplo, Yandex.Disk o Облако@mail.ru o Box.net etc. Gracias
 
Vitaly Muzichenko:

Esta es la función del buscador

¿Esnecesario introducirdBid ydPoint por separado?