Errores, fallos, preguntas - página 2237

 
fxsaber:

Algunos personajes tienen un tiempo de espera y otros no. ¿Cómo puedo saber la edad máxima de la garrapata que todavía puede ser percibida por OrderSend (sin [Sin precio])?

La mierda sabe.

 
Stanislav Korotky:
La bandera FILE_SHARE_WRITE parece funcionar en esta combinación, pero surge otra pregunta: ¿qué sentido tiene esta escritura en particular? Lógicamente, si habilitamos la separación de escritura, debería añadirse a la bandera de escritura:

Eso es exactamente lo que he probado, y también da error.

Encendí MetaTrader, encontré mi antiguo ejemplo, añadí FILE_SHARE_WRITE (aunque no es necesario allí) - el resultado no cambió... Quizás por otra razón no me funcionó
 

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

La plataforma de negociación MetaTrader 5 está disponible para los clientes de AMP Futures

fxsaber, 2018.07.23 22:34

Ejemplo en el que es imposible realizar una orden de mercado incluso cuando el Bid/Ask es un múltiplo del TickSize

Aquí Last price no es un múltiplo de TickSize. No tiene nada que ver con las Órdenes de Mercado, pero OrderCheck sigue fallando - no permite que se haga una Orden de Mercado.

 
fxsaber:

Algunos personajes tienen un tiempo de espera y otros no. ¿Cómo puedo saber la edad máxima de la garrapata que todavía puede ser aceptada por OrderSend (sin [Sin precio])?

Sucede que el último tick recibido hace 16 segundos no se percibe como relevante para el OrderSend. Al fin y al cabo, debe tratarse de un error.

 
A100:
Activé MetaTrader, encontré mi antiguo ejemplo, añadí FILE_SHARE_WRITE (aunque no lo necesitaba allí) - el resultado no cambió... Quizás por otra razón no me funcionó

Alternativamente, puede posicionar el archivo en la memoria (MemMap) y trabajar allí vía semáforo, y luego volcar los datos en el archivo vía semáforo

Por cierto, este método le dará una gran ganancia de velocidad

 
Konstantin:

Alternativamente, puede posicionar el archivo en la memoria (MemMap) y trabajar allí vía semáforo, y luego volcar los datos en el archivo vía semáforo

Por cierto, este método le dará una gran ventaja de velocidad

El caso es que tengo un pequeño archivo de configuración y cada EA tiene que leerlo una vez antes de empezar a trabajar - la operación más sencilla - ver ejemplo en los enlaces de arriba... y tú dices semáforos)
 
A100:
El caso es que tenía un pequeño archivo de configuración y cada EA sólo tenía que leerlo una vez antes de empezar a trabajar - la operación más sencilla - ver el ejemplo en los enlaces de arriba... y tú dices semáforos)

Digo que la escritura en este problema durante varias páginas, y dado que el problema con la barba y solucionarlo desarrolladores aparentemente no pueden o no quieren porque ¡Te ofrecí uno de ellos, si no te gusta usa winapi cual es el problema )) pero es mejor que escribir lo mismo sin hacer nada, puedes usar los mismos semáforos para leer de un archivo físico, la misma señal de semáforo que está ocupado y necesita esperar!

 
Stanislav Korotky:

En este sencillo script, ejecutado primero con escritura = true y luego en otro gráfico con escritura = false, obtengo un error.


#property script_show_inputs

input bool writing = false;

int OnStart()
{
  int handle = FileOpen("xyz.foo", FILE_READ|FILE_BIN|FILE_SHARE_READ|(writing?FILE_WRITE:0));
  if(handle == INVALID_HANDLE)
  {
    Print("FileOpen failed: ", GetLastError());
    return INIT_FAILED;
  }
  
  if(writing) FileWriteInteger(handle, 0);
  
  Print("handle=", handle);
  
  while(!IsStopped())
  {
    Sleep(1000);
  }

  Print("Closing");
  FileClose(handle);

  return 0;
}

El abridor para la lectura carece de la bandera FILE_SHARE_WRITE (permitir escritura), ya que hay un escritor.

Se trata de una limitación del sistema (WinAPI).

Aquí están las banderas correctas con las que su código funcionará:

int handle = FileOpen("xyz.foo", FILE_READ|FILE_BIN|FILE_SHARE_READ|(writing?FILE_WRITE:FILE_SHARE_WRITE));
 
Ilyas:

Aquí están las banderas correctas para que su código funcione:

Por favor, arregle FileLoad

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Bichos, errores, preguntas

fxsaber, 2018.07.10 19:26

Error en FileLoad. Si con la bandera FILE_COMMON, dos Agentes locales intentan leer datos a través de FileLoad, uno de los Agentes se equivoca.

Es posible establecer banderas apropiadas en FileOpen, pero no en FileLoad. Por lo tanto, permita el acceso al archivo a través de FileLoad si el otro FileLoad lo lee.

 
TheXpert:

¿Por qué? )

Porque no hay ningún cero en la lista de banderas

Identificador

Valor

Descripción

FILE_READ

1

El archivo se abre para su lectura. Esta bandera se utiliza al abrir un archivo (FileOpen()). FILE_WRITE y/o FILE_READ deben establecerse cuando se abre el archivo.

FILE_WRITE

2

El archivo se abre para escribir. Esta bandera se utiliza para abrir un archivo (FileOpen()). Cuando se abre un archivo, las banderas FILE_WRITE y/o FILE_READ deben estar activadas.

FILE_BIN

4

Modo binario de lectura-escritura (sin conversión de o a cadena). Esta bandera se utiliza para abrir archivos (FileOpen())

FILE_CSV

8

Un archivo csv (todos los elementos escritos se convierten en una cadena del tipo apropiado, unicode o ansi, y se separan con un delimitador). Esta bandera se utiliza al abrir un archivo (FileOpen())

FILE_TXT

16

Archivo de texto simple (igual que csv, pero sin separador). Esta bandera se utiliza cuando se abren los archivos (FileOpen())

FILE_ANSI

32

Cadenas ANSI (caracteres de un solo byte). Esta bandera se utiliza al abrir archivos (FileOpen())

FILE_UNICODE

64

Cadenas UNICODE (caracteres de dos bytes). Esta bandera se utiliza al abrir archivos (FileOpen())

FILE_SHARE_READ

128

Acceso de lectura compartido por varios programas. Esta bandera se utiliza al abrir un archivo (FileOpen()), pero no sustituye la necesidad de FILE_WRITE y/o FILE_READ al abrir un archivo.

FILE_SHARE_WRITE

256

Esta bandera se utiliza para compartir el acceso de escritura entre varios programas. Esta bandera se utiliza para abrir archivos (FileOpen()), pero no sustituye a FILE_WRITE y/o FILE_READ al abrir un archivo.

FILE_REWRITE

512

El archivo puede ser sobrescrito por FileCopy() y FileMove(). El archivo debe existir o ser escribible. De lo contrario, el archivo no se abrirá

FILE_COMMON

4096

Ubicación del archivo en la carpeta compartida de todos los terminales del cliente. Esta bandera se utiliza al abrir archivos (FileOpen()), al copiar archivos (FileCopy(), FileMove()) y al comprobar si los archivos existen (FileIsExist())


Y si los desarrolladores arreglan todos sus fallos, a mucha gente no le gustará. Mucho más de la mitad del código dejará de funcionar.

Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
  • www.mql5.com
Файл открывается для чтения. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл открывается для записи. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл...