ajude-me por favor [resolvido] - página 2

 
PROJETE O CÓDIGO.
 

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }
excluí todas as outras funções que não uso, todo meu código é apenas isso
Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 

Sua dupla declaração de bilhete .

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

A declaração de bilhete esconde ... blá blá ? veja eu sou o compilador humano.

Retire o segundo int .

 
mrluck1:

Eu coloquei

ordem de bool e

int ticket

sobre variáveis globais, e o resto do código no OnTick, mas ainda não faz nenhuma entrada agora

Descompilado, não testado

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Marco: Eu removi a int duplicada, mas agora nenhuma troca é feita, eu preciso de 1 troca, se preço> nuvem de ichimoku, esse código primeiro foi ótimo, mas ele continuou a criar novas trocas se

o preço estava acima da nuvem, eu só preciso de ajuda para codificar de forma que o roteiro pare após a 1 negociação.

Honest Knave: eu tentei seu código, acabei de definir magic_no que estava faltando, ele funciona bem, ele espera pelo novo comércio o preço tocar a nuvem novamente, ele será realmente útil para os próximos projetos, mas

só preciso que pare depois do 1º comércio, o que devo fazer?

Obrigado a todos vocês por sua ajuda

 
bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

Este é o problema.

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket>-1)
        {
         order=1;
        }
      }
    }
  }


Por isso, tente isto e eu lhe apontei alguns postes de volta.

Marco vd Heijden:

Observe também que a OrderSend ou devolve o número do bilhete, ou -1 menos um, se falhar.

Veja.
 
mrluck1:

Honest Knave: tentei seu código, acabei de definir magic_no que estava faltando, ele funciona bem, ele espera para um novo comércio se o preço tocar a nuvem novamente, ele será realmente útil para os próximos projetos, mas

só preciso que pare depois do 1 comércio, o que devo fazer?

Obrigado a todos vocês por sua ajuda

Não deveria negociar mais de 1...? Isso é o que isto faz:

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Honest Knave:

Seu EA é ótimo, mas cria novos negócios se o preço cair novamente para a nuvem de ichimoku e depois voltar para cima. Ele não repete as ordens na mesma vela, como o problema que eu tive, e aprenderei muito com esta amostra que você me deu, para criar novos

EA's, mas eu preciso de uma maneira de codificar que após a primeira negociação, a EA ou roteiro fechará imediatamente, então eu só preciso de 1 negociação já feita.

Marco: Eu tentei sua nova atualização, mas ela não faz nenhuma troca, eu coloquei exatamente como você postou por último, apenas removi a segunda int, no bilhete. Mas a primeira troca nunca é feita no testador de estratégia, o que fazer agora?

 
mrluck1:

Honest Knave:

Seu EA é ótimo, mas cria novos negócios se o preço cair novamente para a nuvem de ichimoku e depois voltar para cima. Ele não repete as ordens na mesma vela, como o problema que eu tive, e aprenderei muito com esta amostra que você me deu, para criar novos

EA's, mas eu preciso de uma maneira de codificar que após a primeira negociação, a EA ou roteiro fechará imediatamente, então eu só preciso de 1 negociação já feita.

Eu não entendo o que você quer dizer.

Esse código não pode abrir mais de 1 ordem de cada vez.

Mas se a ordem fechar, e o gatilho acontecer novamente, abrirá outra.

Você quer dizer que você quer que apenas uma ordem seja aberta TUDO?

 
honest_knave:

Eu não entendo o que você quer dizer.

Esse código não pode abrir mais de uma ordem de cada vez.

Mas se a ordem fechar, e o gatilho acontecer novamente, abrirá outra.

Você quer dizer que você quer que apenas uma ordem seja aberta TUDO?

Sim senhor, apenas 1 comércio já feito, mas seu exemplo foi ótimo, será muito útil como base para criar uma nova facilidade
Razão: