Erros, bugs, perguntas - página 308

 
aharata:
Tente ler sobre o BarsCalculated na ajuda, o que, a propósito, dá o exemplo certo.

Vamos tentar fazê-lo com este. Obrigado!
 
Im_hungry:

isto é, desde que o CopyBuffer>0 seja calculado, e o novo parâmetro (Close())

aparece quando a posição é fechada. Por outras palavras, precisamos de fazer um loop through While. Acontece assim.

Eu diria desta forma: "Enquanto CopyBuffer<0, repetimos a chamada desta função".

A linha While (vhandle>0) não parece transportar nenhuma carga especial, porque no caso do primeiro CopyBuffer<0 voltará(0);

Eu trabalharia nesta direcção:

if(!PositionSelect(Symbol1) && !PositionSelect(Symbol2))
  {
   for(uchar u=0;u<100;u++)  //запускаем цикл с ограниченным количеством шагов
    {
     if(CopyBuffer(vhandle,0,0,50,Sp1Buffer) && CopyBuffer(vhandle,1,0,50,Sp2Buffer))
      {
       return(true);  //дождались копирования буферов - выходим
      }
     else
      {
       if(u==99) //т.е. выявляем последний шаг нашего цикла for, который не принёс ожидаемых результатов
         {
          Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
          return(0);
         }
       Sleep(50);  //засыпаем ненадолго (хотя я сам не сторонник использования Sleep в теле OnTick)
      }
    }
  }

Em geral, algo neste sentido, à discrição do autor. Como bem assinalado, um guia de referência não faria mal.

 
aharata:
Tente ler na ajuda sobre o BarsCalculated, a propósito, o exemplo certo é dado aí.

Obrigado pela referência feita - obras, parece não ter problemas (1 mês testado)

Aqui está o meu código de trabalho para o 1º par

void OnTick()
{ 
   if (isNewBar()==true && proverkaHANDLA()==true)
     {
      if (!PositionSelect(Symbol1))
         {
          BSOpen();
         }
     }    
}
//+==================================================================+
bool proverkaHANDLA()
{
  ArraySetAsSeries(Sp1Buffer,true);
  ArraySetAsSeries(Sp2Buffer,true);
  vhandle=iCustom(NULL,0,"МТ5",Symbol1,100,Lots,1,Close());
  ResetLastError();
  int copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
  int copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
  if(copied0<=0 || copied1<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(vhandle)>0)
         break;
         Sleep(50);
        }
      copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
      copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
      if(copied0<=0 || copied1<=0)
        {
         Print("Не удалось скопировать Буфера индюков :-)",GetLastError(),
         "copied0",copied0,"copied1=",copied1);
         return (false); 
        }
       Print("Удалось скопировать Буфера :-)copied0",copied0,"copied1=",copied1);
       return (true);
     }
   Print("Удалось скопировать Буфера. Sp1Buffer=",ArraySize(Sp1Buffer),
         "Sp2Buffer=",ArraySize(Sp2Buffer));
   return (true);
}
 
Yedelkin:

Eu diria: "desde que o CopyBuffer<0, repita a chamada a esta função".

A linha While (vhandle>0) não parece ser muito carregada, porque no caso do primeiro CopyBuffer<0 voltaria(0);

Eu trabalharia neste sentido:

Basicamente, algo do género, à discrição do autor. Como bem assinalado, um livro de referência não faria mal.

É ainda mais simples, vejamos qual destas 2 abordagens é melhor e mais rápida - é o que vamos tomar,

Obrigado a todos! Vamos lá testar.

 
desenvolvedores, por favor prestem atenção à aplicação #33601 (há uma "grande característica" sobre alavancagem em diferentes SOs)...
 
Interesting:
desenvolvedores, por favor preste atenção ao pedido #33601 (há uma "grande característica" sobre alavancagem em diferentes SOs)...

Talvez esteja a utilizar terminais originalmente instalados a partir de diferentes corretores? Adicione detalhes à sua candidatura, por favor.
 
Rosh:
Talvez esteja a utilizar terminais originalmente instalados a partir de diferentes corretores? Adicione detalhes à sua candidatura, por favor.
Esclarecido sobre os terminais e o que preciso de obter no final.
 

Pergunta para os criadores.

Tudo é claro sobre spreads, eles são armazenados em barras e o testador pode correr todo o histórico, tendo em conta os spreads em mudança (se o histórico for normalmente carregado), mas e quanto a swaps?

Ou seja, o que acontece se o corretor/comerciante mudar as taxas de swaps ou de comissão?

Compreendo que a situação é um pouco absurda, mas mesmo assim.

Se entendi correctamente agora o testador, como no MT4, fará as trocas e comissionará por último....

PS

Clarificado novamente, agora com screenshots....

 
Interesting:

Pergunta para os criadores.

Tudo é claro sobre spreads, eles são armazenados em barras e o testador pode correr todo o histórico, tendo em conta os spreads em mudança (se o histórico for normalmente carregado), mas e quanto a swaps?

Ou seja, o que acontece se um corretor/revendedor alterar o tamanho dos swaps ou da comissão?

O histórico de swaps e comissões não é armazenado, estas configurações são retiradas da última ligação
 
Rosh:
O histórico de trocas e comissões não é guardado, estas definições são retiradas da última ligação
Estou a ver, isso é o que eu pensava. Esperemos que não mudem com frequência/não mudem nada.