Erros, bugs, perguntas - página 2238

 
fxsaber:

Acontece que o último tick recebido há 16 segundos não é visto como relevante para a OrderSend. Afinal, isto deve ser um insecto.

Este erro

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Bibliotecas: MT4Orders

fxsaber, 2018.07.24 09:46

Script actualizado em app. Encontra rapidamente, por exemplo, problemas como este
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]

Em cerca de um minuto poderá reproduzir com este script no ForexTimeFXTM-Demo01 se activar todos os símbolos na Visão Geral do Mercado antes de correr.

 
Ilyas:

Esta é uma limitação do sistema (WinAPI).

Aqui estão as bandeiras correctas para fazer o seu código funcionar:

vá lá )

Verificámos - o Windows pode abrir o ficheiro, mas o script não. o problema é com a bandeira FILE_SHARE_READ.

 
fxsaber:

Por favor, conserte FileLoad

Obrigado pelo correio.

Adicionadas bandeiras FILE_FLAG_SHARE_READ | FILE_FLAG_SHARE_WRITE à implementação da função FileLoad/FileSave

Tenha cuidado, ao escrever e ler o mesmo ficheiro ao mesmo tempo, a sincronização tem de ser organizada correctamente, porque o resultado da leitura será indefinido.

 
Ilyas:

Obrigado pela mensagem.

Adicionadas bandeiras FILE_FLAG_SHARE_READ | FILE_FLAG_SHARE_WRITE à implementação da função FileLoad/FileSave

Tenha cuidado, ao escrever e ler o mesmo ficheiro ao mesmo tempo, a sincronização tem de ser organizada correctamente, porque o resultado da leitura será indefinido.

Obrigado pela correcção, o rake temporal não deve ser afectado.

 
TheXpert:

vá lá )

O problema é com a bandeira FILE_SHARE_READ.

Recomendo a leitura de 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.
 

Como lidar com este facto?

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

fxsaber, 2018.07.23 16:48

Claramente um bug como com essas bandeiras, as aplicações de terceiros lêem o ficheiro sem qualquer problema.


Tais ficheiros.

FILE_READ | FILE_WRITE | FILE_IS_TEXT | FILE_SHARE_READ

Eu vejo em TotalCommander sem FileClose. Sem FILE_SHARE_READ, não funciona.

 
Ilyas:

Recomendo a sua leitura

Sim, eu estava prestes a lançar.

Admito que estava errado. se a primeira pega estiver aberta para escrita, a segunda deve adicionar a bandeira FILE_SHARE_WRITE

mas há outro comentário de um 100 que não tem qualquer registo
 
Ilyas:

O abridor não pode utilizar a bandeira FILE_SHARE_WRITE (permitir a escrita) para a leitura, porque existe um escritor.

Esta é uma limitação do sistema (WinAPI).

Aqui estão as bandeiras correctas em que o seu código irá funcionar:

Eu também li MSDN. Explique, a Microsoft não sabe inglês ou eles próprios não lêem a sua documentação, ou é a última opção - as bandeiras em MQL têm um nome semelhante ao WinApi mas funcionam de uma forma diferente?

Extraído daqui - https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea

FILE_SHARE_READ -Permite operações subsequentes abertas num ficheiro ou dispositivo para solicitar acesso de leitura.Caso contrário, outros processos não podem abrir o ficheiro ou dispositivo se solicitarem acesso de leitura.

FILE_SHARE_WRITE -Permite operações abertas subsequentes num ficheiro ou dispositivo para solicitar acesso de escrita.Caso contrário, outros processos não podem abrir o ficheiro ou dispositivo se solicitarem acesso de escrita.

Portanto, o primeiro programa só precisa de definir FILE_SHARE_READ para que o segundo seja lido. FILE_SHARE_WRITE_WRITE só deve ser definido se se souber que o segundo programa também irá escrever para o ficheiro.

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.
 

Pergunta para os criadores.

Existe uma função de sincronização:

//+------------------------------------------------------------------+
//| Проверка синхронизации символов                                                                                             |
//+------------------------------------------------------------------+
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 );
        }

Por vezes, recebo este erro com ele:

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

Isto é, o indicador corre em USDJPY, e recebo um erro com o símbolo EURGBP. Ao mesmo tempo, há um gráfico EURGBP aberto no terminal.

O erro 4014 diz isso:

A função do sistema não pode ser chamada

Como pode ser?

 
TheXpert:

Sim, eu estava prestes a lançar.

Admito que estava errado. se a primeira pega estiver aberta para escrita, a segunda deve acrescentar a bandeira FILE_SHARE_WRITE

mas há também um comentário de um 100 que não tem qualquer registo.
No meu caso, o ServiceDesk escreve agora que não pode tocar... precisar de ajuda da sala ... mais tarde descreverei como o fazer ...