Erros, bugs, perguntas - página 2237

 
fxsaber:

Algumas personagens têm um timeout, outras não. Como sei a idade máxima do tick que ainda pode ser percebida pela OrderSend (não [Sem preço])?

Foda-se, sabe-se lá.

 
Stanislav Korotky:
A bandeira FILE_SHARE_WRITE parece funcionar nesta combinação, mas levanta-se outra questão: qual é o objectivo desta escrita em particular? Logicamente, se permitirmos a separação por escrito, esta deve ser adicionada à bandeira de escrita:

Foi exactamente isso que eu tentei, e também dá um erro.

Ligado ao MetaTrader, encontrei o meu antigo exemplo, adicionei FILE_SHARE_WRITE (embora não seja necessário lá) - o resultado não mudou... Talvez por outra razão não tenha funcionado para mim
 

Fórum sobre comércio, sistemas comerciais automatizados e teste de estratégias comerciais

Plataforma de negociação MetaTrader 5 colocada à disposição dos clientes da AMP Futures

fxsaber, 2018.07.23 22:34

Exemplo onde é impossível fazer uma Ordem de Mercado mesmo quando Bid/Ask é um múltiplo de TickSize

Aqui O último preço não é um múltiplo de TickSize. Não tem nada a ver com Ordens de Mercado, mas a OrderCheck continua a ser um erro - não permite que uma Ordem de Mercado seja feita.

 
fxsaber:

Algumas personagens têm um timeout, outras não. Como posso saber a idade máxima do tick que ainda pode ser aceite pela OrderSend (não [Sem preço])?

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

 
A100:
Activei MetaTrader, encontrei o meu antigo exemplo, acrescentei FILE_SHARE_WRITE (embora não precisasse dele lá) - o resultado não mudou... Talvez por outra razão não tenha funcionado para mim

Alternativamente, pode posicionar o ficheiro na memória (MemMap) e trabalhar lá via semáforo, e depois despejar os dados para o ficheiro via semáforo

A propósito, este método dar-lhe-á um grande ganho de velocidade

 
Konstantin:

Alternativamente, pode posicionar o ficheiro na memória (MemMap) e trabalhar lá via semáforo, e depois despejar os dados para o ficheiro via semáforo

A propósito, este método dar-lhe-á uma grande vantagem de velocidade

A questão é que tenho um pequeno ficheiro de configuração e cada EA tem de o ler uma vez antes de começar a funcionar - a operação mais simples - ver exemplo nos links acima... e você diz semáforos)
 
A100:
A questão é que eu tinha um pequeno ficheiro de configuração e cada EA só tinha de o ler uma vez antes de começar a funcionar - a operação mais simples - ver o exemplo nos links acima... e diz-se semáforos)

Digo que a escrita sobre este problema durante várias páginas, e tendo em conta que o problema com a barba e a sua reparação pelos criadores aparentemente não pode ou não quer porque Ofereci-lhe um deles, se não gosta de usar winapi qual é o problema )) mas é melhor do que escrever a mesma coisa sem fazer nada, pode usar os mesmos semáforos para ler a partir de um ficheiro físico, o mesmo sinal de semáforo que está ocupado e precisa de esperar!

 
Stanislav Korotky:

Neste script simples, correr primeiro com escrita = verdadeiro e depois noutro gráfico com escrita = falso, recebo um erro.


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

A abertura para a leitura carece da bandeira FILE_SHARE_WRITE (permitir a escrita), uma vez que existe um escritor.

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

Aqui estão as bandeiras correctas com as quais o seu código irá trabalhar:

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

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

Por favor, conserte FileLoad

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

Insectos, insectos, perguntas

fxsaber, 2018.07.10 19:26

Erro em FileLoad. Se com a bandeira FILE_COMMON, dois Agentes locais tentarem ler dados via FileLoad, um dos Agentes faz asneira.

É possível colocar bandeiras apropriadas em FileOpen, mas não em FileLoad. Portanto, por favor permitir o acesso ao ficheiro através do FileLoad se o outro FileLoad o ler.

 
TheXpert:

porquê? )

Porque não há zero na lista de bandeiras

Identificador

Valor

Descrição

FILE_READ

1

O ficheiro está aberto para leitura. Esta bandeira é utilizada ao abrir um ficheiro (FileOpen()). FILE_WRITE e/ou FILE_READ devem ser definidos quando o ficheiro é aberto.

FILE_WRITE

2

O ficheiro é aberto para escrita. Esta bandeira é utilizada para abrir um ficheiro (FileOpen()). Quando um ficheiro é aberto, devem ser colocadas as bandeiras FILE_WRITE e/ou FILE_READ.

FILE_BIN

4

Modo de leitura-escrita binária (sem conversão de ou para string). Esta bandeira é utilizada para abrir ficheiros (FileOpen())

FILE_CSV

8

Ficheiro do tipo csv (todos os artigos escritos são convertidos numa cadeia do tipo apropriado, unicode ou ansi, e separados por um separador). Esta bandeira é utilizada ao abrir um ficheiro (FileOpen())

FILE_TXT

16

Ficheiro de texto simples (o mesmo que csv, mas sem separador). Esta bandeira é utilizada quando os ficheiros são abertos (FileOpen())

FILE_ANSI

32

Cordas ANSI (caracteres de um byte). Esta bandeira é utilizada quando se abrem ficheiros (FileOpen())

FILE_UNICODE

64

Cordas UNICODE (caracteres de dois bytes). Esta bandeira é utilizada quando se abrem ficheiros (FileOpen())

FILE_SHARE_READ

128

Acesso de leitura partilhado por múltiplos programas. Esta bandeira é utilizada ao abrir um ficheiro (FileOpen()), mas não substitui a necessidade de FILE_WRITE e/ou FILE_READ ao abrir um ficheiro.

FILE_SHARE_WRITE

256

Esta bandeira é utilizada para a partilha de acesso de escrita por múltiplos programas. Esta bandeira é utilizada para abrir ficheiros (FileOpen()), mas não substitui FILE_WRITE e/ou FILE_READ quando se abre um ficheiro.

FILE_REWRITE

512

O ficheiro pode ser substituído por FileCopy() e FileMove(). O ficheiro deve existir ou poder ser escrito. Caso contrário, o ficheiro não pode ser aberto

FILE_COMMON

4096

Localização do ficheiro em pasta partilhada de todos os terminais de clientes. Ficheiros comuns. Esta bandeira é utilizada ao abrir ficheiros (FileOpen()), copiar ficheiros (FileCopy(), FileMove()) e verificar se os ficheiros existem (FileIsExist())


E se os criadores corrigem todas as suas falhas, muitas pessoas não vão gostar. Muito mais de metade do código deixará de funcionar.

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