[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 434

 
zorber:

Buenos días a todos,

Pongo una orden pendiente (hora de creación, por ejemplo, 11:31)
Entonces esta orden se activa a las 12:01

Pregunta: ¿Cómo puedo saber la fecha y la hora en que se colocó la orden pendiente si la orden ya ha entrado en el mercado y la función OrderOpenTime( ) devuelve la hora de entrada en el mercado?

¿Alguien sabe cómo resolver este problema?

Gracias de antemano.


En MT4 de la lista de órdenes ni hablar.

Una forma es recordar la hora de colocación

 
Roger:
Ya es hora de que entiendas el archivo de texto, cómo se organiza y en qué consiste. Desimprime la posición del cursor después de cada lectura de línea, utilizando la tecla
int FileTell( int mango)
Lo verás enseguida.

Lo irónico de la situación es que la pregunta que planteé arriba fue provocada por una situación que casi corresponde a su consejo...

Para entender cómo funcionan las funciones FileIsEnding y FileIsLineEnding, escribí el siguiente script:

//+------------------------------------------------------------------------------------------+
//|                                                                   Конец_Строки_Файла.mq4 |
//+------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
#property show_inputs                                                    //выводим перед запуском скрипта окно свойств
extern int  position=0;                                                  //внешняя переменная: смещение файлового указателя ОТ НАЧАЛА ФАЙЛА (в БАЙТАХ)
//---------------------------------------------------------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   string name="Копия Запись чисел в файл.csv";                          //имя создаваемого файла
   bool h;                                                               //переменная: значение функции FileIsEnding
   bool h_l;                                                             //переменная: значение функции FileIsLineEnding
   int error;                                                            //переменная: ошибка
   int handle=FileOpen(name,FILE_CSV|FILE_WRITE,';');                    //открываем заданный файл n записываем туда данные
   int запись=FileWrite(handle,DoubleToStr(1.3584,4));                   //записываем число в файл csv (в преобразованном виде, т.е в виде текста)
   FileClose(handle);                                                    //закрываем файл
//---------------------------------------------------------------------------------------- 2 -
   handle=FileOpen(name,FILE_CSV|FILE_READ,';');                         //открываем заданный файл
   bool pos=FileSeek(handle,position,SEEK_SET);                          //смещаем от начала вправо указатель файла
   double чтение=FileReadNumber(handle);                                 //считываем число из текущей позиции (уже измененной функцией FileSeek) файлового указателя
   int size=FileSize(handle);                                            //вычисляем размер заданного файла
   h=FileIsEnding(handle);                                               //устанавливаем текущее значение переменной h
   h_l=FileIsLineEnding(handle);                                         //устанавливаем текущее значение переменной h_l
   error=GetLastError();                                                 //значение ошибки, производимой функцией FileIsEnding
   if(error!=0)Alert("Текущая ошибка ",error);                           //если код текущей ошибки не равен 0, то получаем номер текущей ошибки
   FileClose(handle);                                                    //закрываем файл
//----------------------------------------------------------------------------------------- 3 -
   Comment("Размер файла ",name," составил ",size," байт",
           "\nФункция FileSeek вернула: ",pos,
           "\nФункция FileReadNumber(handle) вернула: ",чтение,
           "\nФункция FileIsLineEnding(handle) вернула: ",h_l,
           "\nФункция FileIsEnding(handle) вернула: ",h,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 4 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 5 -

En el bloque 1-2, abrí y escribí el número 1,3584 en el archivo (que la función DoubleToStr convierte en texto).

En el bloque 3-4, abrí el archivo y leí el número escrito allí.

La variable externa int position se supone que mueve el puntero del archivo usando la función FileTell para tratar de entender cómo funcionan las funciones FileIsEnding y FileIsLineEnding y qué es el puntero del archivo.

El libro MQL4.community dice que el puntero de archivo es un análogo del cursor de texto.

PERO, ejecutando el script varias veces e incrementando la variable externa postiton en 1 cada vez (es decir, moviendo el puntero del archivo 1 byte a la derecha del comienzo del archivo de esta manera), la función Comment produce una serie de mensajes, por ejemplo

si postiton=7, el mensaje se vería así:

si postiton=7, el mensaje se vería así:


Entiendo que como las constantes de cadena ocupan 8 bytes en la memoria del PC y sólo hay 1 número convertido en el archivo, entonces desplazar el puntero del archivo 8 bytes a la derecha me dará un error 4099 (que significa que se ha llegado al final del archivo). También entiendo que la función FileIsEnding devolvía 1 (true) por la misma razón (fin de archivo alcanzado). Pero no entiendo por qué la función FileIsLineEnding devuelve 0 (falso, lo que significa que el puntero del archivo no ha llegado al final de la línea). Después de todo, basándome en la analogía dada en el libro de MQL (un puntero de archivo es aproximadamente lo mismo que un cursor de texto), razoné que el final del archivo es también el final de la cadena. Pero dado que FileIsEnding y FileIsLineEnding tienen valores diferentes cuando el puntero de archivo llega al final del archivo, me quedé perplejo en cuanto a ¿QUÉ ES UN PUNTO DE ARCHIVO? Pero como tenía que empezar por algún sitio para hacer la pregunta, la hice tal y como aparece en la página 433.

Así que tengo una enorme petición para despejar mi acalorado cerebro y responder a las siguientes preguntas (o al menos una que me ayude a entender el resto de las preguntas):

1. ¿Qué es lo que no entiendo del puntero del archivo (la pregunta se da en mi post en la p.433)

2. El significado de la frase "si se elimina la comprobación especificada (las 2 últimas líneas del bloque 5-6), se creará un objeto extra en tiempo de ejecución. Y sólo después de eso la condición de finalización del bucle while se activará y el control se transferirá al bloque 8-9" (la pregunta está dada en mi post en la página 433)

3. ¿Por qué FileIsLineEnding devuelve 0 en lugar de 1 al llegar al final del archivo?

P.D. Para no saturar el foro, gracias de antemano por la respuesta.

 

Que os vaya bien a todos

Por favor, dígame cómo dibujar una línea horizontal ((Oferta+Precio)/2+0,00333):)

 

¡Buenas tardes!

Señores, ¿qué hacer?

El ordenador móvil no puede ver la red "SIN COMUNICACIÓN"

 
Ragen:

¡Buenas tardes!

Señores, ¿qué hacer?

El ordenador móvil no puede ver la red "SIN COMUNICACIÓN"


crear una nueva demo. la antigua debe haber sido eliminada por falta de tiempo.
 
sergeev:

Crea una nueva demo para ti. La antigua debe haber sido borrada debido a la fecha límite

No estoy en una demo, tres cuentas reales.

Pero todos de la misma dtz, ¿afecta eso a algo?

 
Ragen:

No estoy en una demo, tres cuentas reales.

Pero todo desde la misma dtz, ¿puede esto afectar a algo?


:) bueno, llama a la empresa de corretaje. ¿qué tiene que ver esto con el foro de programación MQL?
 
sergeev:

¿Qué tiene esto que ver con el foro de programación MQL?

Por alguna razón, el terminal estaba inmediatamente "rodando" :)

Estoy en ello.

 

Profesionales, por favor, aconsejen. Si tengo una orden pendiente de stop colocada, pero el precio ha entrado en ella con un spread extendido que supera el stoploss.... ¿Qué pasará?

La orden se comerá por la propagación... ¿O se producirá un error y la orden no se activará?

 

Colegas, ¿cuál es el consejo más detallado?

Tengo una orden pendiente X

¿Cómo cerrar la orden después de N horas desde que se creó la orden pendiente?

Una condición adicional: la orden pendiente puede convertirse en una orden de mercado.

En el caso de que la orden pendiente quede pendiente, todo es sencillo.

Es interesante el caso en el que una orden pendiente se convierte en una orden de mercado (es decir, en el momento en el que la orden pendiente se convierte en una orden de mercado, el tiempo de creación también cambia).

Me gustaría que los profesionales me dieran ideas para solucionar este problema, y mejor aún, me gustaría conseguir un código para esta situación