Errori, bug, domande - pagina 2238

 
fxsaber:

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

Questo bug

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

Biblioteche: MT4Orders

fxsaber, 2018.07.24 09:46

Aggiornato lo script nell'app. Trova rapidamente, per esempio, problemi come questo
2018.07.24 10:24:19.177 Trades  '35247942': market buy 0.01 USDHKD
2018.07.24 10:24:19.246 Trades  '35247942': failed market buy 0.01 USDHKD [No prices]
2018.07.24 10:24:19.246 Trades  '35247942': buy limit 0.01 USDHKD at 7.83618
2018.07.24 10:24:19.315 Trades  '35247942': failed buy limit 0.01 USDHKD at 7.83618 [No prices]
2018.07.24 10:24:19.316 Trades  '35247942': buy stop 0.01 USDHKD at 7.85618
2018.07.24 10:24:19.384 Trades  '35247942': failed buy stop 0.01 USDHKD at 7.85618 [No prices]

In circa un minuto si può riprodurre con questo script su ForexTimeFXTM-Demo01 se si abilitano tutti i simboli in Market Overview prima dell'esecuzione.

 
Ilyas:

Questa è una limitazione del sistema (WinAPI).

Ecco i flag corretti per far funzionare il vostro codice:

Avanti )

Abbiamo controllato - Windows può aprire il file, ma lo script no. il problema è con il flag FILE_SHARE_READ.

 
fxsaber:

Si prega di correggere FileLoad

Grazie per il post.

Aggiunti flag FILE_FLAG_SHARE_READ | FILE_FLAG_SHARE_WRITE all'implementazione della funzione FileLoad/FileSave

Attenzione, quando si scrive e si legge lo stesso file allo stesso tempo, la sincronizzazione deve essere organizzata correttamente, perché il risultato della lettura sarà indefinito.

 
Ilyas:

Grazie per il messaggio.

Aggiunti flag FILE_FLAG_SHARE_READ | FILE_FLAG_SHARE_WRITE all'implementazione della funzione FileLoad/FileSave

Attenzione, quando si scrive e si legge lo stesso file allo stesso tempo, la sincronizzazione deve essere organizzata correttamente, perché il risultato della lettura sarà indefinito.

Grazie per la correzione, il rastrellamento dei tempi non dovrebbe essere influenzato.

 
TheXpert:

Avanti )

Il problema è con il flag FILE_SHARE_READ.

Vi consiglio di leggere https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files

Creating and Opening Files
Creating and Opening Files
  • 2018.05.31
  • Michael Satran
  • docs.microsoft.com
Considerations for creating or opening a file by using the CreateFile function.
 

Come affrontare questo fatto?

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

Bug, bug, domande

fxsaber, 2018.07.23 16:48

Chiaramente un bug, poiché con tali bandiere le applicazioni di terze parti leggono il file senza alcun problema.


Tali file.

FILE_READ | FILE_WRITE | FILE_IS_TEXT | FILE_SHARE_READ

Vedo in TotalCommander senza FileClose. Senza FILE_SHARE_READ non funziona.

 
Ilyas:

Raccomando di leggerlo

Sì, stavo giusto per buttarmi.

Ammetto di essermi sbagliato. se il primo handle è aperto alla scrittura, il secondo deve aggiungere il flag FILE_SHARE_WRITE

ma c'è un altro commento di a100 che non ha nessun record
 
Ilyas:

L'apritore non può usare il flag FILE_SHARE_WRITE (permettere la scrittura) per la lettura, perché c'è uno scrittore.

Questa è una limitazione del sistema (WinAPI).

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

Leggo anche MSDN. Spiega, è che Microsoft non conosce l'inglese o che non leggono la loro stessa documentazione, o è l'ultima opzione - le bandiere in MQL hanno un nome simile a WinApi ma funzionano in modo diverso?

Preso da qui - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea

FILE_SHARE_READ -Abilita le successive operazioni di apertura su un file o dispositivo per richiedere l'accesso in lettura.Altrimenti, altri processi non possono aprire il file o il dispositivo se richiedono l'accesso in lettura.

FILE_SHARE_WRITE -Abilita le successive operazioni di apertura su un file o dispositivo a richiedere l'accesso in scrittura.Altrimenti, altri processi non possono aprire il file o il dispositivo se richiedono l'accesso in scrittura.

Pertanto, il primo programma ha solo bisogno di impostare FILE_SHARE_READ perché il secondo possa leggere. FILE_SHARE_WRITE deve essere impostato solo se si sa che il secondo programma scriverà anche sul file.

CreateFileA function
CreateFileA function
  • 2018.06.14
  • windows-sdk-content
  • docs.microsoft.com
Creates or opens a file or I/O device. The most commonly used I/O devices are as follows:\_file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe.
 

Domanda per gli sviluppatori.

C'è una funzione di sincronizzazione:

//+------------------------------------------------------------------+
//| Проверка синхронизации символов                                                                                             |
//+------------------------------------------------------------------+
bool CheckSync()
        {
         //--- Проверка синхронизации символов
         if( !SymbolIsSynchronized( inpSymbol_1 ) )
                {
                 Print( __FUNCTION__,": ОШИБКА #",GetLastError(),": SymbolIsSync("+inpSymbol_1+") = false!" );
                 return( false );
                }
         if( !SymbolIsSynchronized( inpSymbol_2 ) )
                {
                 Print( __FUNCTION__,": ОШИБКА #",GetLastError(),": SymbolIsSync("+inpSymbol_2+") = false!" );
                 return( false );
                }
         //--- Если символы синхронизированы
         return( true );
        }

A volte ottengo questo errore con esso:

2018.07.24 15:14:27.415 Indicator (USDJPY,M5)   CheckSync: ОШИБКА #4014:  SymbolIsSync(EURGBP) = false!

Cioè l'indicatore funziona su USDJPY, e ottengo un errore con il simbolo EURGBP. Allo stesso tempo c'è un grafico EURGBP aperto nel terminale.

L'errore 4014 dice che:

La funzione di sistema non può essere chiamata

Come può essere?

 
TheXpert:

Sì, stavo giusto per buttarmi.

Ammetto di essermi sbagliato. se il primo handle è aperto per la scrittura, il secondo deve aggiungere il flag FILE_SHARE_WRITE

ma c'è anche un commento di a100 che non ha nessun record.
Nel mio caso ServiceDesk ora scrive che non può riprodurre... bisogno di aiuto dalla stanza ... più tardi descriverò come farlo ...