Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1145

 
Artyom Trishkin:

Eu já lhe respondi:

Você aceita o último pedido da lista:

E você precisa primeiro descobrir o quanto o status da lista de pedidos mudou. Eram 12, tornaram-se 8 - mudou em 4 pedidos. Assim, você precisa imprimir os quatro pedidos. E você sempre imprime apenas o último da lista.

Como você sabe o quanto isso mudou? Ao iniciar a EA, você deve escrever o número de pedidos em uma variável, por exemplo, int last_total. Então, em cada tick, compare o OrderTotal() com o last_total. Se eles NÃO são iguais, isso é uma mudança. Escreva a diferença entre OrdersTotal() e last_total em uma variável, por exemplo, num_changes e salve o novo estado de OrdersTotal() para last_total.
Pode haver aqui algumas sutilezas, por exemplo, quando uma ordem pendente é acionada. Mas, por enquanto, você deve fazer o que precisa fazer primeiro.
Sabendo o número de pedidos pendentes, você pode consultá-los na história. Entretanto, você também pode limitar o monitoramento de ordens na lista histórica - faça tudo o que foi dito acima para a lista de ordens históricas, e não para a lista de ordens de mercado. A diferença entre o que foi e o que se tornou - esta é a quantidade de pedidos que você precisa analisar. Você sempre analisa apenas a última ordem da lista.

No entanto, isto não pode garantir que a última ordem na lista histórica seja a última ordem fechada. Esta é também uma nuance que deve ser considerada. Mas então.

Muito obrigado. Isso o torna muito mais claro. Palavras-chave - você deve imprimir não apenas um, mas 4 pedidos de cada vez. Se você me tivesse dito no primeiro posto, eu não o teria torturado.

 
ANDREY:

Muito obrigado. Isso faz muito mais sentido. As palavras-chave são para imprimir não um, mas 4 pedidos de cada vez. Se você me tivesse dito no primeiro posto, eu não o teria torturado.

Seja bem-vindo. Até que você aprenda por si mesmo a fazer lógica desta ou daquela ação, você não sairá do ponto morto - você vai perguntar no fórum. Você estará fazendo perguntas no fórum. Não precisa estar ligado a pedidos/listas/tickets, etc...

Acho que se você estivesse usando maçãs, poderia facilmente criar um algoritmo para acompanhar quantas maçãs estão sobre a mesa, depois você sai para fumar e volta - há menos maçãs...
Como você sabe disso? Fácil - 5 maçãs, 3 maçãs. Faltam dois. O gato deve ter... Ou eram cinco e agora são seis. Apareceu um. Do úmido, talvez... Em ambos os casos, você contou a diferença em sua cabeça.

Então, como a mesma ação é diferente da contagem de ordens? As mesmas maçãs... Em vez de "em mente", escreva "em função".

 

favor aconselhar como remover a função do código(decomposição), se já existem mais de 200 linhas de código e é inconveniente pesquisar tudo isso. Estou interessado em "mecânica": como a função é "decomposta", onde está escrita, a fim de chamá-la mais tarde no código principal.

Se você tem um exemplo com uma descrição, eu apreciaria um link
 
Alexey Kolybelnikov:

favor aconselhar como remover a função do código(decomposição), se já existem mais de 200 linhas de código e é inconveniente pesquisar tudo isso. Estou interessado em "mecânica": como a função é "decomposta", onde está escrita, a fim de chamá-la mais tarde no código principal.

Se houver um exemplo com uma descrição, eu apreciaria um link

Costumava ser:

double a = (b + c) / (d - e);


Tornou-se:

double a = Add(b,c) / Sub(d,e);

//---------

Add(const double v1,const double v2) { return v1 + v2; }

Sub(const double v1,const double v2) { return v1 - v2; }
 
Artyom Trishkin:

Seja bem-vindo. Até aprender como formular a lógica de uma ação, você não sairá do ponto morto - você estará fazendo perguntas no fórum. E a lógica não pode ficar mais fácil - ela pode ser colocada em palavras simples. Não precisa estar vinculado a warrants/listas/tickets etc...

Eu acho que com as maçãs você pode facilmente criar um algoritmo para rastrear sua quantidade - tudo é como na vida real: você se lembra de quantas maçãs estão na mesa, você sai para fumar, e quando você volta, há menos maçãs...
Como você sabe disso? Fácil - 5 maçãs, 3 maçãs. Faltam dois. O gato deve ter... Ou eram cinco e agora são seis. Saiu um. Do úmido, talvez... Em ambos os casos, você contou a diferença em sua mente.

Então, como a mesma ação é diferente da contagem de ordens? As mesmas maçãs... Em vez de "na mente" escreva "na função".

Entendido. Obrigado pelo esclarecimento. A mesma questão está em minha mente há muito tempo.... Meu código assume quea função Print() será impressa freqüentemente na revista. Automaticamente na revista será impresso cada pedido aberto e cada fechamento de cada pedido. Eu tenho muitos pedidos. De forma correspondente, haveria muitos registros sobre os pedidos. Estes registros frequentemente me impedem de obter dados da função Print(), que também podem ser muito numerosos.

Q: .

Como posso fazer para que, quando eu precisar, as informações sobre pedidos abertos e fechados não sejam mostradas na revista, mas somente na função Print().

Isso pode ser feito com a ajuda de alguma função MQL4 ou devo alterar o código do terminal MT4?

Obrigado.
 
ANDREY:

Entendi. Obrigado pelo esclarecimento. A mesma questão está em minha mente há muito tempo.... Meu código assume que a função Print() será impressa freqüentemente na revista. Automaticamente na revista será impresso cada pedido aberto e cada fechamento de cada pedido. Eu tenho muitos pedidos. De forma correspondente, haveria muitos registros sobre os pedidos. Essas entradas freqüentemente me perturbam ao olhar os dados na função Print(), que também podem ser numerosos.

Q: .

Como posso fazer para que, quando eu precisar, as informações sobre pedidos abertos e fechados não sejam mostradas na revista, mas somente na função Print().

Isso pode ser feito usando alguma função MQL4, ou requer alterações no código do terminal MT4?

Obrigado.

Se você fizer a pesquisa, é melhor escrevê-la em um arquivo. Não sei como exibir ações com ordens no arquivo de registro e acho que não existe tal coisa. Este é o nível de entradas do início e do fim da operação de EA. Estas são entradas de arquivos de log. O arquivo conterá apenas o que você deseja, o registro conterá registros terminais além dos seus. Você pode fazer mudanças no terminal, você pode até escrever o seu próprio))) mas quanto custará?

 
Alexey Kolybelnikov:

favor aconselhar como remover a função do código(decomposição), se já existem mais de 200 linhas de código e é inconveniente pesquisar tudo isso. Estou interessado em "mecânica": como a função é "decomposta", onde está escrita, a fim de chamá-la mais tarde no código principal.

Se houver um exemplo com uma descrição, eu ficaria grato por um link

https://www.mql5.com/ru/docs/runtime/imports

https://www.mql5.com/ru/docs/basis/preprosessor/include

e mais adiante sobre os links... Em geral: colocar tudo "extra" na biblioteca *.mqh, no início do código principal. O compilador irá "colá-lo" junto

Mas em geral, 200 linhas não é demais - usando botões você pode se sentir confortável com mais de mil linhas.

 
Valeriy Yastremskiy:

Se você estiver fazendo pesquisa, é melhor escrever em um arquivo. Não sei como exibir ações de ordem no arquivo de registro e acho que não há nenhuma, este é o nível dos registros de início e fim da EA. Estas são entradas de arquivos de log. O arquivo conterá apenas o que você deseja, além de suas entradas, o registro conterá entradas terminais. Você pode fazer mudanças no terminal, você pode até escrever o seu próprio))) mas quanto custará?

Obrigado pela dica. Mas acho que nunca escrevi uma EA em um arquivo. Eu sempre escrevi EAs no MetaEditor 4. Para ver o que a Pront() produz durante todo o período de teste, eu seleciono Log - Abrir aba. Um arquivo se abre no Bloco de Notas com o mesmo conteúdo que na guia Log. Parece-me que se trata de um arquivo de registro.
Mas me parece que não sou capaz de apagar todas as ordens abertas e fechadas deste arquivo de bloco de notas. Para ser mais preciso, você faz. Mas é um trabalho muito entediante e demorado.
Eu ficaria muito grato a você se me dissesse o segredo de como fazer meu código abrir e fechar ordens, mas no arquivo, as informações sobre a abertura e fechamento de todas as ordens não eram, mas apenas um registro da função Pront().
Obrigado pela ajuda.

 
ANDREY:


Você sabe onde posso ler mais sobre as últimas atualizações da MQL4? Há muitas informações, mas é difícil encontrar o que você precisa.

https://www.mql5.com/ru/forum/160683/page1109#comment_15711102

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.03.31
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
ANDREY:

Obrigado pela dica. Mas eu acho que nunca escrevi EA em um arquivo. Eu sempre escrevi EA no MetaEditor 4. Para ver o resultado da função Pront() para todo o período de teste, eu seleciono Log - Abrir aba. Um arquivo se abre no Bloco de Notas com o mesmo conteúdo que na guia Log. A mim parece-me um arquivo de registro.
Mas me parece que não sou capaz de apagar todas as ordens abertas e fechadas deste arquivo de bloco de notas. Para ser mais preciso, você faz. Mas é um trabalho muito entediante e demorado.
Eu ficaria muito grato a você se me dissesse o segredo de como fazer meu código abrir e fechar ordens, mas no arquivo, as informações sobre abertura e fechamento de todas as ordens não estavam, e havia apenas entradas da função Pront().
Obrigado pela ajuda.

int OnInit()
  {   
//----------
   FileTest() // функция открытия файла записи данных
   point = 1/Point; // чтобы не делить на пойнт
   tx=TimeCurrent();// задание времени начала работы советника
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   FileClose( Handle );                // Закрываем файл
   Alert("Файл ",File_Name," закрыт.");// Сообщение
     
//--- destroy timer
   EventKillTimer();

  }

void OnTick()    // Функция start() раньше называлась
  {
.................
 Qnt_Symb=FileWrite(Handle,Symbol()," ТФ ",Period(),"Открыт ордер Buy по цене ",Ask,
            "Ticket = ",Ticket," ProfB=",ProfB," MxProfB=",MxProfB, " ProfS=",ProfS," MxProfS=",MxProfS);//Запись в файл
            if(Qnt_Symb<=0) // Если не получилось
              {
               Alert("Ошибка записи в файл ",GetLastError());// Сообщение
              };
.................
}
//-------------------------------------------------------------- 12 --

int FileTest()
  {
   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//Открытие файла
   if(Handle==-1) // Неудача при открытии файла
     {
      Alert("Ошибка при открытии файла. ",// Сообщение об ошибке
            "Возможно, файл занят другим приложением");

     }

   return(Handle);
  }
//+------------------------------------------------------------------+

No testador, o arquivo estará na pasta de arquivos de teste, e se você colocá-lo na janela, estará na pasta de arquivos MQL4. E Kovalev tem isso em detalhes.