Errori, bug, domande - pagina 2237

 
fxsaber:

Alcuni personaggi hanno un timeout e altri no. Come faccio a sapere l'età massima della spunta che può ancora essere percepita da OrderSend (no [No price])?

Chi cazzo lo sa.

 
Stanislav Korotky:
Il flag FILE_SHARE_WRITE sembra funzionare in questa combinazione, ma sorge un'altra domanda: qual è lo scopo di questa particolare scrittura? Logicamente, se abilitiamo la separazione della scrittura, dovrebbe essere aggiunto al flag di scrittura:

Questo è esattamente quello che ho provato, e dà anche un errore.

Ho acceso MetaTrader, ho trovato il mio vecchio esempio, ho aggiunto FILE_SHARE_WRITE (anche se non è necessario) - il risultato non è cambiato... Forse per un'altra ragione non ha funzionato per me
 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Piattaforma di trading MetaTrader 5 resa disponibile per i clienti di AMP Futures

fxsaber, 2018.07.23 22:34

Esempio in cui è impossibile fare un ordine a mercato anche quando Bid/Ask è un multiplo di TickSize

Qui Last price non è un multiplo di TickSize. Non ha niente a che fare con gli ordini a mercato, ma OrderCheck è ancora in errore - non permette di fare un ordine a mercato.

 
fxsaber:

Alcuni personaggi hanno un timeout e altri no. Come faccio a sapere l'età massima della spunta che può ancora essere accettata da OrderSend (no [No price])?

Succede che l'ultimo tick ricevuto 16 secondi fa non è percepito come rilevante per OrderSend. Questo deve essere un bug, dopo tutto.

 
A100:
Ho attivato MetaTrader, trovato il mio vecchio esempio, aggiunto FILE_SHARE_WRITE (anche se non ne avevo bisogno) - il risultato non è cambiato... Forse per un'altra ragione non ha funzionato per me

In alternativa, potete posizionare il file in memoria (MemMap) e lavorare lì tramite semaforo, e poi scaricare i dati nel file tramite semaforo

A proposito, questo metodo vi darà un grande guadagno di velocità

 
Konstantin:

In alternativa, potete posizionare il file in memoria (MemMap) e lavorare lì tramite semaforo, e poi scaricare i dati nel file tramite semaforo

A proposito, questo metodo vi darà un grande vantaggio di velocità

Il fatto è che ho un piccolo file di configurazione e ogni EA deve leggerlo una volta prima di iniziare a lavorare - l'operazione più semplice - vedi l'esempio sui link sopra... e tu dici semafori)
 
A100:
Il fatto è che avevo un piccolo file di configurazione e ogni Expert Advisor doveva leggerlo solo una volta prima di partire - l'operazione più semplice - vedi l'esempio nei link sopra... e tu dici semafori)

Dico che la scrittura su questo problema per diverse pagine, e dato che il problema con la barba e risolvere il problema gli sviluppatori apparentemente non possono o non vogliono perché Te ne ho offerto uno, se non ti piace usa winapi che problema c'è )) ma è meglio che scrivere la stessa cosa senza fare nulla, puoi usare gli stessi semafori per leggere da un file fisico, lo stesso semaforo segnala che è occupato e devi aspettare!

 
Stanislav Korotky:

Su questo semplice script, eseguito prima con scrittura = true e poi su un altro grafico con scrittura = false, ottengo un errore.


#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;
}

L'apertura per la lettura manca del flag FILE_SHARE_WRITE (permettere la scrittura), poiché c'è uno scrittore.

Questa è una limitazione del sistema (WinAPI).

Ecco le bandiere corrette con le quali il vostro codice funzionerà:

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

Ecco i flag corretti per far funzionare il vostro codice:

Si prega di correggere FileLoad

Forum sul trading, sistemi di trading automatico e test di strategia

Bug, bug, domande

fxsaber, 2018.07.10 19:26

Errore in FileLoad. Se con il flag FILE_COMMON, due agenti locali cercano di leggere i dati tramite FileLoad, uno degli agenti si blocca.

È possibile impostare i flag appropriati in FileOpen, ma non in FileLoad. Pertanto, permettete l'accesso al file tramite FileLoad se l'altro FileLoad lo legge.

 
TheXpert:

Perché? )

Perché non c'è uno zero nell'elenco delle bandiere

Identificatore

Valore

Descrizione

LETTURA DEL FILE

1

Il file è aperto per la lettura. Questo flag è usato quando si apre un file (FileOpen()). FILE_WRITE e/o FILE_READ devono essere impostati quando un file viene aperto.

FILE_WRITE

2

Il file è aperto per la scrittura. Questo flag è usato per aprire un file (FileOpen()). Quando un file viene aperto, i flag FILE_WRITE e/o FILE_READ devono essere impostati.

FILE_BIN

4

Modalità di lettura-scrittura binaria (nessuna conversione da o a stringa). Questo flag è usato per aprire i file (FileOpen())

FILE_CSV

8

File di tipo csv (tutti gli elementi scritti sono convertiti in una stringa del tipo appropriato, unicode o ansi, e separati da un separatore). Questo flag è usato quando si apre un file (FileOpen())

FILE_TXT

16

Semplice file di testo (come il csv, ma senza separatore). Questo flag è usato quando i file vengono aperti (FileOpen())

FILE_ANSI

32

Stringhe ANSI (caratteri a byte singolo). Questo flag è usato quando si aprono i file (FileOpen())

FILE_UNICODE

64

Stringhe UNICODE (caratteri a due byte). Questo flag è usato quando si aprono i file (FileOpen())

FILE_SHARE_READ

128

Accesso in lettura condiviso da più programmi. Questo flag è usato quando si apre un file (FileOpen()), ma non sostituisce la necessità di FILE_WRITE e/o FILE_READ quando si apre un file.

FILE_SHARE_WRITE

256

Questo flag è usato per la condivisione dell'accesso in scrittura da parte di più programmi. Questo flag è usato per aprire i file (FileOpen()), ma non sostituisce FILE_WRITE e/o FILE_READ quando si apre un file.

FILE_REWRITE

512

Il file può essere sovrascritto da FileCopy() e FileMove(). Il file deve esistere o essere scrivibile. Altrimenti, il file non può essere aperto

FILE_COMMON

4096

Posizione del file nella cartella condivisa di tutti i terminali client\Terminal\Common\Files. Questo flag è usato quando si aprono i file (FileOpen()), si copiano i file (FileCopy(), FileMove()) e si controlla se i file esistono (FileIsExist())


E se gli sviluppatori sistemano tutti i loro difetti, a molti non piacerà. Molto più della metà del codice smetterà di funzionare.

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