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

 
Alexey Viktorov:

Um deles sou eu. E eu nunca estudei C# ou C++ e nunca soube o que é o OOP.

Por favor, entenda a simples verdade, que mql5 difere do mql5 somente na função OrderSend() e talvez mais algumas funções que eu não me lembro. Outra diferença importante é a direção da indexação dos amortecedores indicadores. Entretanto, pode ser resolvido muito rapidamente, mas é melhor você se acostumar às novas características. E a obtenção de valores indicadores permanece a mesma. Não li o livro de Kovalev, não sei o que existe, mas duvido que qualquer solução deste livro não possa ser escrita usando o MetaEditor mql4 atualizado.

Legal. )))) Não funcionou para mim, realmente carregado de Fortran e Basic de procedimentos. É um bom tutorial, bem estruturado, claro o suficiente e pode realmente ser tomado como base, se os criadores precisarem de alunos, é claro. Infelizmente, não há outros. Eu não tenho o suficiente de OLP, então tenho que ler artigos. Eu tentei muito o tutorial sobre o terminal MT4 atualizado. Há muitas observações sobre tipos de dados que não são dadas. O compilador não viu nenhum erro, mesmo na verificação rigorosa.

 
Valeriy Yastremskiy:

Legal. )))) No entanto, eu não consegui com o Fortran de procedimento e Basic na carga. Um bom tutorial, bem estruturado, claro o suficiente e pode realmente ser tomado como base, se os criadores precisarem de alunos, é claro. Infelizmente, não há outros. Eu não tenho o suficiente de OLP, então tenho que ler artigos. Eu tentei muito o tutorial sobre o terminal MT4 atualizado. Há muitas observações sobre tipos de dados que não são dadas. O compilador não viu nenhum erro, mesmo na verificação rigorosa.

Aqui estão meus pensamentos sobre o OOP. E não faria mal ler todo o fio desde o início.

ООП для школьников.
ООП для школьников.
  • 2019.10.04
  • www.mql5.com
======================================================================================================================== В этой теме будет нескольк...
 

Saudações. Favor avisar, após selecionar um pedido não fica claro por que motivo o bilhete muda. Código:

      for(int i=OrdersTotal()-1; i>=0; i--){
         if(OrderSelect(i ,SELECT_BY_POS, MODE_TRADES)){
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP){
               Print("111  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
               temp=OrderTicket();
               if( OrderOpenPrice()>start_bid
               +((MathCeil( (Bid-start_bid)/(bs_distance*Point) )+bs_orders+Orders("bs")+1)*bs_distance*Point) ){
                  Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice()); 
                  if(!OrderDelete(OrderTicket(), clrBlack)){
                     Print("333 OrderDelete bs Bid ", Bid, "  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
                  }
               }
            }
         } 
      }

Existem duas ordens no mercado,BUYSTOP ticket 10 eBUY ticket 9 .

Diário de bordo:


 
Alexey Viktorov:

Aqui estão meus pensamentos sobre o OOP. E não faria mal ler todo o fio desde o início.

Obrigado, eu concordo))))

 
Andrey Sokolov:

Saudações. Favor avisar, após selecionar um pedido não fica claro por que motivo o bilhete muda. Código:

Existem duas ordens no mercado,BUYSTOP ticket 10 eBUY ticket 9 .

Diário de bordo:


Presumo que uma das funções autoescritas esteja passando pelas ordens (por exemplo,Ordens("bs")) e, portanto, executando novamente OrderSelect(). no momento em que retorna ao laço apresentado, todos os dados são fornecidos para a última ordem selecionada ali.

 
Igor Zakharov:

Presumo que uma das funções auto-escritas passe pelas ordens (por exemplo,Ordens("bs")), e, conseqüentemente, reordene OrderSelect(). no momento de retornar ao laço submetido, todos os dados são fornecidos para a última ordem ali selecionada.

obrigado

 
Andrey Sokolov:

Saudações. Favor avisar, após selecionar um pedido não fica claro por que motivo o bilhete muda. Código:

Existem duas ordens no mercado,BUYSTOP ticket 10 eBUY ticket 9 .

Diário de bordo:


Seu código de trabalho não corresponde ao código publicado.

Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice());

Onde neste código "OrderTicket()" é impresso

Preste atenção às chamadas para outras funções do usuário que podem incluir a seleção de pedidos.

 
Alexey Viktorov:

Você veio ao lugar certo. Aqui está uma dica de como fazer o mql4 corretamente, guiado pela nova documentação do mql4.

Se você achar difícil escrever algo, então faça uma pergunta concreta, o que você escreveu e o que você não conseguiu obter. Basta ter em mente que ninguém vai ler um código de um quilômetro de comprimento com uma linha incompreensível. Certamente não o farei.

Você é a pessoa a quem minha pergunta se destinava. Porque, com base em seu pedido, encurtei meu código Mql4 para o testador, apenas para mostrar claramente meu problema. Mas infelizmente a Artem não o entendeu.

Ficaria muito grato a você se pudesse mudar o código para resolver meu problema. Mais uma vez vou lhes dizer sua essência.

Quando eu fecho cada pedido (e há muitos pedidos abertos ao mesmo tempo), eu preciso emitir alguns parâmetros de um pedido fechado em Impressão (). Eu aprendi a fazer isto com muito sucesso. Mas..... há um problema que minha mente não é suficiente para resolver. Alguns pedidos são fechados por parada no mesmo tique e pelo mesmo preço. Neste caso, o programa ignora a primeira ordem fechada e imprime somente a última ordem fechada. E não se imprime depois do primeiro.

Q: .

Que linguagem de construção pode ser usada para imprimir o programa () nos casos que descrevi acima, mesmo após o primeiro pedido fechado pela parada?

int H;
int L;
int TP;  
int start()
{
int Ht = OrdersHistoryTotal();
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                             
if (TP!=OrderTicket( ))
{
Print("---------------------------------------------------------------=",TimeToString(OrderOpenTime()) );
TP=OrderTicket( );
}

if (TimeCurrent()==1262598040)
if (H==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.6217,1.60919,"300",10 );
H=1;
}
if (TimeCurrent()==1262601140)
if (L==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.62199,1.61758,"300",10 );
L=1;
}
return(0);


 
ANDREY:

Você é a pessoa a quem minha pergunta se dirigia. Porque, com base em seu pedido, encurtei meu código Mql4 para o testador, apenas para demonstrar claramente meu problema. Mas infelizmente Artem não o entendeu.

Serei muito grato a vocês se puderem mudar o código para resolver meu problema. Mais uma vez vou lhes dizer sua essência.

Quando eu fecho cada pedido (e há muitos deles abertos ao mesmo tempo), eu preciso imprimir () alguns parâmetros de um pedido fechado. Eu aprendi a fazer isto com muito sucesso. Mas..... há um problema que minha mente não é suficiente para resolver. Alguns pedidos são fechados por parada no mesmo tique e pelo mesmo preço. Neste caso, o programa ignora a primeira ordem fechada e imprime somente a última ordem fechada. E não se imprime depois do primeiro.

Q: .

Que linguagem de construção pode ser usada para fazer a aplicação imprimir () mesmo após o primeiro pedido fechado na parada, nos casos que descrevi acima?


O que seu código faz além de abrir duas posições de venda, cada uma em um horário estritamente especificado, e imprimir a hora da última abertura da posição quando permitido? É isso aí. Usando variáveis não inicializadas, que podem levar a "milagres" no comportamento do código, e um manipulador de início muito, muito antigo(), que foi puxado de uma prateleira poeirenta com anos de teias de aranha, e no mercado (um dia você quer vender algo) com manipuladores antigos nunca faltará o validador - ele dirá que o tipo de programa errado.

 
ANDREY:

Você é a pessoa a quem minha pergunta se dirigia. Porque, com base em seu pedido, encurtei meu código Mql4 para o testador, apenas para demonstrar claramente meu problema. Mas infelizmente a Artem não o entendeu.

Ficaria muito grato a você se pudesse mudar o código para resolver meu problema. Mais uma vez vou lhes dizer sua essência.

Quando fecho cada ordem (e há muitas delas abertas ao mesmo tempo), preciso imprimir () alguns parâmetros de uma ordem fechada. Eu aprendi a fazer isto com muito sucesso. Mas..... há um problema que minha mente não é suficiente para resolver. Alguns pedidos são fechados por parada no mesmo tique e pelo mesmo preço. Neste caso, o programa ignora a primeira ordem fechada e imprime somente a última ordem fechada. E não se imprime depois do primeiro.

Q: .

Que estrutura de linguagem pode ser usada para imprimir o programa () mesmo após o primeiro pedido fechado na parada, nos casos que descrevi acima?

Eu não me lembro da resposta de Artem. Todos os códigos em seus artigos são multiterminais ou têm duas versões, uma para mql5 e outra para mql4. Verifiquei estas versões no mql4. Tudo funciona corretamente e detecta o fechamento por parada ou tomada e não comete erros.

Sim, estes artigos são difíceis de entender, mas vale a pena se você não for mais velho do que eu. E eu, para um programador, sou obscenamente velho.

A outra opção é mais simples, mas funcionará muito mais lentamente. Escreva os pedidos em uma matriz e, usando essa matriz, selecione o pedido, verifique o tempo de fechamento do pedido. Se for maior que zero, significa que está fechado. Se o comentário de uma ordem fechada contém as letras "sl", isso significa que a ordem é fechada usando uma parada. Se o pedido for fechado, ele é excluído da matriz. Ou, depois que a matriz é completada, ela é reabastecida com os pedidos em aberto restantes. A imaginação é voar em geral.

Qual a opção que você escolhe, depende de você. E leia alguns dos meus posts no livro de Kovalev. O tutorial sugere escrever int start(), enquanto no mql4 atualizado, OnTick() vazio deve ser escrito para Expert Advisors.

Para indicadores e roteiros, consulte a documentação. E, a propósito, é muito mais fácil escrever indicadores em mql4 atualizado do que quando Sergey escreveu este tutorial.