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

 
Bom dia a todos.
Escrevi um código simples em mql4 que abre um pedido em um gráfico minuto cada vez que o preço sobe 30 pips a partir do mínimo local mais próximo. Após a abertura do pedido, o baixo local torna-se o preço de abertura do pedido.
void OnTick()
{
if (Bid<LoU)
LoU=Bid;
//********************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
}
}

O que eu não gosto em meu código..... Que tem que ser executado em quase todos os tick. Posso melhorar este código e ele não será executado em cada carrapato, mas em quase todos os minutos de vela. Isso significa que o programa tem que fazer uma enorme quantidade de trabalho para encontrar o ponto onde a ordem é aberta.

Q:

Você poderia sugerir uma estrutura linguística que me ajudasse a encontrar o ponto em aberto da ordem mencionada no meu código sem tentar carrapatos ou castiçais, ou com um mínimo de tentativa possível, ou seja, que o programa gaste o mínimo de tempo possível para encontrar o ponto em aberto.

Obrigado por sua ajuda.

 
ANDREY:
Bom dia para todos.
Escrevi um código simples em mql4 que abre um pedido em um gráfico minuto cada vez que o preço sobe 30 pips a partir do mínimo local mais próximo. Após a abertura do pedido, o baixo local torna-se o preço de abertura do pedido.

O que eu não gosto em meu código..... Que tem que ser executado em quase todos os tick. Posso melhorar este código e ele não será executado em cada carrapato, mas em quase todos os minutos de vela. Isso significa que o programa tem que fazer uma enorme quantidade de trabalho para encontrar o ponto onde a ordem é aberta.

Q:

Você poderia sugerir uma estrutura linguística que me ajudasse a encontrar o ponto em aberto da ordem mencionada no meu código sem tentar carrapatos ou castiçais, ou com um mínimo de tentativa possível, ou seja, que o programa gaste o mínimo de tempo possível para encontrar o ponto em aberto.

Obrigado pela ajuda.

//+------------------------------------------------------------------+
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

Obrigado por sua ajuda.

Mas o resultado do meu código não é o mesmo que o meu. Aqui está o resultado do meu código em GBPUSD em um gráfico de minutos durante um dia de 04.01.2010 a 05.01.2010.
Este é o resultado do meu código

E isto é o resultado de seu código

 
ANDREY:

Obrigado por sua ajuda.

Mas o resultado do meu código não é o mesmo que o meu. Aqui está o resultado do meu código em GBPUSD em um gráfico de minutos durante um dia de 04.01.2010 a 05.01.2010.
Este é o resultado do meu código

Isto é um resultado de seu código

Mostrar código OnInit()

 
MakarFX:

Mostre-me o código OnInit().

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }

Acabei de copiar seu código para o MetaEditor e obtive o resultado, que está acima.

Seu código abre uma ordem e conta 30 pips para baixo (amarelo), e o meu conta para baixo (azul)

Obrigado por sua ajuda

 
ANDREY:

Acabei de copiar seu código no MetaEditor e obtive o resultado acima.

Obrigado por sua ajuda.

Preciso do seu código para entender o ponto.

Em seu código o LoU muda a cada tick se o preço cair, mas no meu LoU muda somente depois de abrir uma negociação.

 
MakarFX:

Preciso do seu código para entender qual é o objetivo.

Em seu código, o LoU muda a cada tick se o preço cair, enquanto meu LoU muda somente depois que uma negociação é aberta.

Você tem 30 pips no lado errado. Adicionei uma foto ao post anterior
e meu código está no primeiro post. Assim que o preço tiver passado de 30 pips do mínimo local *bottom-up* - abra um pedido. E meu código abre o pedido exatamente como eu preciso dele. Mas quero que passe o mínimo de tempo para isso.

De acordo com meu código LoU muda a cada tick depois de abrir cada pedido. Sem ele o programa não encontrará o mínimo local mais próximo, a partir do qual devemos contar 30 pips. Estou pensando em como excluir a troca do LoU a cada tique ou a cada candelabro de minuto, mas as ordens serão abertas nos mesmos lugares onde meu código as abre.
 
ANDREY:

Acabei de copiar seu código no MetaEditor e obtive o resultado acima.

Seu código abre a ordem e conta 30 pips para baixo (amarelo), e o meu conta para baixo (azul)

Obrigado por sua ajuda

Meu erro...substituir

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid-30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

Meu erro...substituir

Obrigado por sua ajuda.
Eu fiz. Abre um grande número de pedidos (27657 pedidos), entre os quais estão os que eu preciso

Aqui está uma captura de tela das encomendas iniciais

 
MakarFX:

Meu erro...substituir

Aqui está o seu código com a linha alterada.

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
Como posso fazer o código abrir apenas as ordens necessárias?