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

 
Artyom Trishkin:

Ninguém o chamou de "chupador", isso não é verdade. Mas também 4-6 linhas de código, você sabe, causam perplexidade - porque se uma pessoa aprende algo, ela já deve estar tentando algo, já tentou escrever algo, e vê claramente que 4-6 linhas não cabem nela.

Mostre-nos o que você tentou fazer - vamos tentar entender.

Posso oferecer uma variante alternativa, simplificada - não procure uma passagem de nível por carrapatos, mas procure por MA(1) - então o MA na barra 1 e o MA na barra 0 serão usados como um indicador da passagem de nível necessária.


Desculpe pelo longo atraso na resposta. Estou contente que tenha sido um mero desnorteamento, fiquei nervoso. E quanto à minha pergunta, consegui escrever um código que abriria uma ordem normal quando atingisse o preço e que não voltaria a abrir depois de cruzar esse preço. Mas eu o fiz desta maneira:
duplo b = 5;
int start()
{
lance duplo = Lance;
se (bid==0,7777 && b====5)
{
b=b+1;
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0);
}

retornar;

Já entendi que este é um método de "jardim de infância" e não pode ser usado porque há muitas nuances e não é nada prático. Você pode dizer em que situação esse código não vai funcionar ou como você pode mudá-lo para que ele funcione? P.s. "procure por MA(1) - então MA na barra 1 e MA na barra 0 lhe servirá como um indicador de que você está atravessando o nível desejado. "Eu realmente não sei do que se trata, então posso adiar por agora até que eu tenha estudado mais material


 
maxon777:

Desculpe por demorar tanto tempo para responder. Estou contente que tenha sido apenas um desnorteamento, fiquei nervoso. E quanto à minha pergunta, consegui escrever um código que abriria uma ordem normal quando atingisse o preço e que não voltaria a abrir depois de cruzar esse preço. Mas eu o fiz desta maneira:
duplo b = 5;
int start()
{
lance duplo = Lance;
se (bid==0,7777 && b====5)
{
b=b+1;
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0);
}

retornar;

Já entendi que este é um método de "jardim de infância" e não pode ser usado porque há muitas nuances e não é nada prático. Você pode dizer em que situação esse código não vai funcionar ou como você pode mudá-lo para que ele funcione? P.s. "procure por MA(1) - então MA na barra 1 e MA na barra 0 servirá como um indicador de que você precisa cruzar o nível que você precisa". "Eu não sei realmente do que se trata, então isto pode ser adiado por enquanto até que eu aprenda mais material.



Comparação em igualdade de dois números, tipo duplo, esta não é uma boa operação.

Como,NormalizeDuplo(A - B , 5)==0, acho eu.

 

Boa noite a todos!

Por favor, ajude-me, não consigo encontrar um bug no código.

Preciso determinar se tive lucro com meu par e, se tive, não devo continuar negociando e fechar a EA.

colocar uma ordem pendente.

O problema é que quando eu executo a EA, ela a apaga imediatamente, ou seja,ExpertRemove() aciona, embora eu ainda não tenha tido um lucro.

Abaixo está algum código:

nulo OnTick()

{

se (TakeProfit ()>0)

{

ExpertRemove();

}

se (TakeProfit ()<=0)

{

Aqui estabelecemos uma pausa

}

}

//+------------------------------------------------------------------+

////////Procurando ver se houve algum negócio fechado aqui com lucro!!!!!!!!

int TakeProfit ()

{

int count = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol () == Symbol () && OrderProfit()>0.0)

{

contar ++;

}

}

retornar (contar);




 
yaaarik777:

Boa noite a todos!

Por favor, ajude-me, não consigo encontrar um bug no código.

Preciso determinar se tive lucro com meu par e, se tive, não devo continuar negociando e fechar a EA.

colocar uma ordem pendente.

O problema é que quando eu executo a EA, ela a apaga imediatamente, ou seja, ExpertRemove() aciona, embora eu ainda não tenha tido um lucro.

Abaixo está uma parte do código:

////////Pesquisando se havia ... fechado com profit!!!!!!!!

int TakeProfit ()

{

int count = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol () == Symbol () && OrderProfit()>0.0)

{

contar ++;

}

}

retornar (contar);

O que você está procurando com este código?

Ele analisa o lucro de toda a história, não exatamente de uma posição fechada, e se toda a história for positiva, então você recebe OrderProfit()>0 em qualquer caso

 
Vitaly Muzichenko:

O que você está procurando com este código?

Procura um lucro em todo o histórico, não especificamente uma posição fechada, e se todo o histórico for positivo, então você terá OrderProfit()>0 na saída em qualquer cenário


Como posso fazer uma busca não por toda a história, mas por posições fechadas desde o momento do trabalho do assessor?

Eu não entendo.

Eu não entendo.

 
yaaarik777:


Como posso fazer com que não busque toda a EA, mas as fechadas a partir do momento do trabalho da EA?

Eu não entendo.

Obrigado pela ajuda.

Encontre a última posição fechada, que foi fechada depois do início da EA, ou a última fechada neste dia, e veja seu lucro: OrderProfit()+OrderComission()+OrderSwap()
 
yaaarik777:


Como faço para que procure não toda a EA, mas as fechadas a partir do momento do trabalho da EA?

Eu não entendo.

Obrigado por sua ajuda.


Como você determina quando a EA está funcionando?

Eis a minha sugestão;

double TakeProfit ()
{
 datetime момент работы советника=0;
 double p=0;
  for(int i=OrdersHistoryTotal()-1; i>=0; i--){
    if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)){
       if (OrderMagicNumber() == Magic){
          if(OrderSymbol () == Symbol ()){
            if(момент работы советника<OrderCloseTime()){
               p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
 return(p);
}
   
 
Artyom Trishkin:
Encontre a última posição fechada, que foi fechada depois do início da EA, ou a última fechada neste dia, e veja seu lucro: OrderProfit()+OrderComission()+OrderSwap()


Por que eu preciso dele para procurar todas as posições fechadas mais tarde do que a hora de início da EA?

Quero que ele procure desde o início da EA, não antes.

 
yaaarik777:


Por que depois da hora de início da EA? Já a tenho procurando todas as posições fechadas.

você precisa dela para pesquisar desde o início da EA, não antes.


Se você pensar sobre isso, "desde o início e além" é depois da hora de início da EA ;)

Não seja preguiçoso para usar o órgão interaural.

 

Olá.

Por favor, ajude-me a exibir dados de um arquivo como histograma.

No arquivo "file.txt", uma data corresponde a um número.

Recebo os dados do arquivo e os imprimo,
Razão: