Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 915

 

O problema é que estes bilhetes são mais de um. talvez 4, ainda não sei exatamente. por isso criei uma classe com número de bilhete e outras informações que não são armazenadas por ordem de seleção. por isso quis ter acesso ao bilhete. mas até agora só posso criar objetos de classe e colocá-los no CarrayObj e depois obter o índice, comparar o bilhete e analisar mais a fundo. Mas eu resolvi isso, obrigado. Eu me culpo em outro lugar. SenhoresmalvadosAlexeyVik - obrigado por suas respostas rápidas!

 
Olá! Por favor, escreva porque no testador de estratégia não abre negócios, escreve no log error: (2015.07.13 00:22:39.218 TestGenerator: erro de dados incomparável (valor alto 1.31150 em 2013.07.11 05:00 não é alcançado a partir do menor prazo, preço alto 1.31140 desajustes) cotações atualizadas. Aqui está o código do Expert Advisor:
int ticket;
int init;

int start()
{

int bars0;
int bars1;
int bars2;
int bars3;
int   stoploss=50; 
int   takeprofit=30;
int       slipage=2;

//-------------------------------------------------------------------+
  
  if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0] && Open[bars1]<Close[bars1] )
      if (  Open[bars2]>Close[bars2]&& Open[bars3]>Close[bars3] )
      if(V1()==true) 
     
       ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
     
//-------------------------------------------------------------------+ 
    if ( OrdersTotal()<1 &&  Open[bars0]>Close[bars0] && Open[bars1]>Close[bars1]&& Open[bars2]<Close[bars2])
     if (  Open[bars2]<Close[bars2]&& Open[bars3]<Close[bars3] )
      if(V2()==true) 
     
       ticket = OrderSend(Symbol(),OP_SELL,0.1,Bid,slipage,Bid+stoploss*Point,Bid-takeprofit*Point,"",123,0,Red);
      
    
         
//-------------------------------------------------------------------+                    
 return;}
//+------------------------------------------------------------------+
bool V1( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
      return(false);
   }
  }    
 }
 return(true); 
}

bool V2( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if(OrderType()==OP_SELL) {
      return(false);
   }
  }
 }
 return(true); 
}

)
 
rylay:
Olá! Por favor, escreva porque no Testador de Estratégia não abre negócios, escreve no log error: (2015.07.13 00:22:39.218 TestGenerator: erro de dados incomparável (valor alto 1.31150 em 2013.07.11 05:00 não é alcançado a partir do menor prazo, preço alto 1.31140 desajustes) cotações atualizadas. Aqui está o código do Expert Advisor:
)

Com relação ao mencionado erro do testador, este será sempre o caso ao testar carrapatos. A história das citações no MT4 não é perfeita, há sempre desajustes.

O código está cheio de erros. As variáveis não são inicializadas, a função de partida não entende o que retorna, não há verificação da execução das funções comerciais, portanto, por favor, conserte-a.

Adicione #propriedade estrita ao início do código.

E como criamos duas funções para definir tipos de ordem, por que não integrar o contador de ordens de cada tipo e escrever se ( OrderBuy<1...), se ( OrderSell<1...) em vez de comparar if( OrderTotal()<1...)? Seria mais correto.

 

Favor informar como abrir somente uma negociação em condições de um bar, se a negociação ocorrer dentro do bar, mas no momento de fechar o sinal para abrir aparece imediatamente no mesmo bar.

Em outras palavras - o bar deu um sinal para abrir uma ordem. Foi aberta e uma curta tomada foi acionada. O negócio foi fechado, mas a EA fecha o primeiro e imediatamente abre o segundo com exatamente a mesma ordem porque ainda temos a condição de abri-lo dentro da mesma barra. Preciso abrir apenas uma posição em um bar. E para abrir o próximo comércio, devemos esperar pela abertura de outro bar.

 
Poinson:

Favor informar como abrir somente uma negociação em condições de um bar, se a negociação ocorrer dentro do bar, mas no momento de fechar o sinal para abrir aparece imediatamente no mesmo bar.

Em outras palavras - o bar deu um sinal para abrir uma ordem. Foi aberta e uma curta tomada foi acionada. O negócio foi fechado, mas a EA fecha o primeiro e imediatamente abre o segundo com exatamente a mesma ordem porque ainda temos a condição de abri-lo dentro da mesma barra. Preciso abrir apenas uma posição em um bar. E esperamos pela abertura de outro bar para abrir o próximo comércio.

O _já aberto = falso;

se (isNewBar()){ _already opened = false;}

se (!OrderSend(...) ) { /* tratamento de erros */; } caso contrário, { _já aberto = verdadeiro; }

isNewBar() - padrão, como nos artigos, usando data/hora estática = Hora[0];

se (_já aberto) { devolver; // não enviar o mandado }

 
evillive:

Com relação ao erro do testador mencionado, este será sempre o caso ao testar em carrapatos. A história das citações no MT4 é imperfeita, há sempre desajustes.

O código está cheio de erros. As variáveis não são inicializadas, a função de partida não entende o que retorna, não há verificação da execução das funções comerciais, portanto, por favor, conserte-a.

Adicione #propriedade estrita ao início do código.

E como criamos duas funções para definir tipos de ordem, por que não integrar o contador de ordens de cada tipo e escrever se ( OrderBuy<1...), se ( OrdersSell<1...) em vez de comparar if( OrderTotal()<1...)? Seria mais correto.

Obrigado. Vou corrigi-lo. É só que quando havia uma condição:
if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0]
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
simplesmente não estava funcionando bem, então eu perguntei.
 
danik:

bool _já aberto = falso;

se (isNewBar()){ _already opened = false;}

se (!OrderSend(...) ) { /* tratamento de erros */; } caso contrário, { _já aberto = verdadeiro; }

isNewBar() - padrão, como nos artigos, usando data/hora estática = Hora[0];

se (_já aberto) { devolver; //donão enviar o mandado }

diz 'isNewBar' - função não definida 2015

Eu não sou realmente um mago. Eu gostaria de uma cópia e cola exata, se você puder.

 
Poinson:

diz 'isNewBar' - função não definida 2015

Eu não sou realmente um artesão. Eu gostaria de uma cópia exata e colar se possível, por favor.

Se for uma nova barra, você pode copiar e colar a função éNewBar(), talvez você acerte, não é complicado - compara o tempo de abertura de uma nova barra (com o índice 0, ou seja, o último), se for mais do que antes significa que uma nova barra acabou de aparecer, e se aparecer significa que você pode abrir um novo comércio se você tiver outras condições
 
Poinson:

diz 'isNewBar' - função não definida 2015

Eu não sou realmente um artesão. Eu gostaria de uma cópia exata e colar se possível, por favor.

Sim, em qualquer assessor da kodobase o encontraria!

//в старте перед условиями входа:
      if(NewBar() == true)
      { 
//----------------------
  return(0);
}
// и вне старта:
//----------------------------//  NewBar  \\----------------------------\\
bool NewBar() 
{
  static datetime lastbar = 0;
  datetime curbar = iTime(NULL,15,0);
  if(lastbar != curbar) 
  {
    lastbar = curbar;
    return(true);
  }
  else return(false);
} 
 
borilunad:

Qualquer conselheiro em uma kodobase o teria encontrado!

Obrigado )) O mais forte simplesmente! tudo funcionou desde a 1ª vez!

Obrigado a todos vocês!