[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 434

 
zorber:

Bom dia para todos,

Coloco um pedido pendente (tempo de criação, por exemplo, 11:31)
Então esta ordem é acionada às 12:01

Pergunta: Como posso saber a data e hora em que a ordem pendente foi colocada se a ordem já entrou no mercado e a função OrderOpenTime( ) retorna a hora de entrada no mercado.

Alguém sabe como resolver este problema?

Agradecemos antecipadamente.


Em MT4 da lista de pedidos, de jeito nenhum.

Uma maneira é lembrar a hora de colocar

 
Roger:
Já é hora de você entender o arquivo de texto, como ele está organizado e em que consiste. Desimprima a posição do cursor após cada leitura de linha, usando o
int FileTell( int handle)
Isso se tornará claro imediatamente.

A ironia da situação é que a pergunta que fiz acima foi desencadeada por uma situação que quase corresponde ao seu conselho...

A fim de entender como FileIsEnding e FileIsLineEnding funcionam, escrevi o seguinte roteiro:

//+------------------------------------------------------------------------------------------+
//|                                                                   Конец_Строки_Файла.mq4 |
//+------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
#property show_inputs                                                    //выводим перед запуском скрипта окно свойств
extern int  position=0;                                                  //внешняя переменная: смещение файлового указателя ОТ НАЧАЛА ФАЙЛА (в БАЙТАХ)
//---------------------------------------------------------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   string name="Копия Запись чисел в файл.csv";                          //имя создаваемого файла
   bool h;                                                               //переменная: значение функции FileIsEnding
   bool h_l;                                                             //переменная: значение функции FileIsLineEnding
   int error;                                                            //переменная: ошибка
   int handle=FileOpen(name,FILE_CSV|FILE_WRITE,';');                    //открываем заданный файл n записываем туда данные
   int запись=FileWrite(handle,DoubleToStr(1.3584,4));                   //записываем число в файл csv (в преобразованном виде, т.е в виде текста)
   FileClose(handle);                                                    //закрываем файл
//---------------------------------------------------------------------------------------- 2 -
   handle=FileOpen(name,FILE_CSV|FILE_READ,';');                         //открываем заданный файл
   bool pos=FileSeek(handle,position,SEEK_SET);                          //смещаем от начала вправо указатель файла
   double чтение=FileReadNumber(handle);                                 //считываем число из текущей позиции (уже измененной функцией FileSeek) файлового указателя
   int size=FileSize(handle);                                            //вычисляем размер заданного файла
   h=FileIsEnding(handle);                                               //устанавливаем текущее значение переменной h
   h_l=FileIsLineEnding(handle);                                         //устанавливаем текущее значение переменной h_l
   error=GetLastError();                                                 //значение ошибки, производимой функцией FileIsEnding
   if(error!=0)Alert("Текущая ошибка ",error);                           //если код текущей ошибки не равен 0, то получаем номер текущей ошибки
   FileClose(handle);                                                    //закрываем файл
//----------------------------------------------------------------------------------------- 3 -
   Comment("Размер файла ",name," составил ",size," байт",
           "\nФункция FileSeek вернула: ",pos,
           "\nФункция FileReadNumber(handle) вернула: ",чтение,
           "\nФункция FileIsLineEnding(handle) вернула: ",h_l,
           "\nФункция FileIsEnding(handle) вернула: ",h,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 4 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 5 -

No bloco 1-2, eu abri e escrevi o número 1.3584 no arquivo (que a função DoubleToStr converte em texto).

No bloco 3-4, eu abri o arquivo e li o número escrito ali.

A variável externa int posição externa deve mover o ponteiro de arquivo usando a função FileTell para tentar entender como as funções FileIsEnding e FileIsLineEnding funcionam e o que é o ponteiro de arquivo.

O livro MQL4.community diz que o ponteiro do arquivo é um análogo do cursor do texto.

MAS, rodando o script várias vezes e aumentando o postiton da variável externa em 1 cada vez (ou seja, movendo assim o ponteiro do arquivo 1 byte para a direita do início do arquivo), a função Comentar produz uma série de mensagens, por exemplo

se postiton=7, a mensagem seria parecida com esta:

se postiton=7, a mensagem seria parecida com esta:


Entendo que, como as constantes de string ocupam 8 bytes na memória do PC e há apenas 1 número convertido no arquivo, deslocar o ponteiro do arquivo 8 bytes para a direita me dará um erro de 4099 (o que significa que o final do arquivo foi alcançado). Também entendo que a função FileIsEnding retornou 1 (verdadeiro) pelo mesmo motivo (fim do arquivo alcançado). Mas eu não entendo porque a função FileIsLineEnding retornou 0 (falso, o que significa que o ponteiro do arquivo não chegou ao fim da linha). Afinal, com base na analogia dada no livro MQL (um ponteiro de arquivo é aproximadamente o mesmo que um cursor de texto), raciocinei que o fim do arquivo é também o fim da cadeia de caracteres. Mas dado que FileIsEnding e FileIsLineEnding têm valores diferentes quando o ponteiro do arquivo chega ao final do arquivo, fiquei perplexo em termos de O QUE É UM PONTEIRO DE ARQUIVO? Mas como tinha que começar em algum lugar para fazer a pergunta, eu a fiz como aparece na página 433.

Portanto, tenho um enorme pedido para limpar meu cérebro aquecido e responder as seguintes perguntas (ou pelo menos uma que me ajudará a entender o resto das perguntas):

1. O que há de errado com minha compreensão do ponteiro do arquivo (a pergunta é dada no meu post na p.433)

2. O significado da frase "se a verificação especificada (as 2 últimas linhas no bloco 5-6) for removida, então um objeto extra será criado no momento da execução. E somente depois disso a condição de loop end será acionada e o controle será transferido para o bloco 8-9" (a pergunta é dada no meu post na página 433)

3. Por que o FileIsLineEnding retorna 0 ao invés de 1 ao chegar ao final do arquivo.

P.S. A fim de não desorganizar o fórum, agradecemos antecipadamente pela resposta.

 

Bom tempo para todos vocês

Por favor me diga como traçar uma linha horizontal ((Bid+Ask)/2+0.00333):)

 

Boa tarde!

Cavalheiros, o que fazer?

O computador móvel não pode ver a rede "NO COMMUNICATION".

 
Ragen:

Boa tarde!

Cavalheiros, o que fazer?

O computador móvel não pode ver a rede "NO COMMUNICATION".


criar uma nova demonstração. a antiga deve ter sido apagada devido a restrições de tempo.
 
sergeev:

Crie uma nova demonstração para você mesmo. a antiga deve ter sido excluída devido ao prazo

Eu não estou em uma demonstração, três contas reais.

Mas tudo a partir da mesma dtz, isso afeta alguma coisa?

 
Ragen:

Eu não estou em uma demonstração, três contas reais.

Mas tudo da mesma dtz, isso pode afetar alguma coisa?


O que isso tem a ver com o fórum de programação MQL?
 
sergeev:

O que isso tem a ver com o fórum de programação MQL?

Por alguma razão, o terminal estava "rolando" imediatamente :)

Eu estou nisso!

 

Profissionais, por favor, aconselhem. Se eu tiver um pedido de parada pendente feito, mas o preço tiver entrado com um spread estendido que exceda o stoploss.... O que vai acontecer?

O pedido será comido pelo spread... Ou ocorrerá um erro e a ordem não será acionada?

 

Colegas, qual é o conselho mais detalhado?

Tenho um pedido pendente X

Como fechar o pedido após N horas a partir do momento em que a ordem pendente foi criada?

Uma condição adicional: a ordem pendente pode se tornar uma ordem de mercado.

No caso de a ordem pendente permanecer pendente, tudo é simples.

O caso quando uma ordem pendente se torna uma ordem de mercado é interessante (ou seja, o momento em que a ordem pendente se torna uma ordem de mercado, o momento da sua criação também muda).

Eu gostaria de obter idéias de profissionais para resolver este problema, e melhor ainda, eu gostaria de obter um código para esta situação

Razão: