Como detectar saldo quando ele para de mudar ? - página 3

 
sergio.fg #:

Mas será que com o mercado aberto vai dar isso ? vou testar aqui e te aviso. Conta demo, saldo começa sempre em 0

Funcionou, digo, pelo menos o EA foi colocado no gráfico sem apresentar mensagem de erro. Agora vou monitorar para ver como ele se comporta quando o saldo empatar. Problema é que não há certeza se vai empatar nem quando vai empatar. Qualquer coisa te aviso. 

Outra coisa: O trecho do código que permite operar com o mini índice é este aqui abaixo. Como ele teria que ficar para também ser possível testar com ações (centavos) e com o mini-dólar que pula de 5 em 5 ?

/--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
   m_adjusted_point=m_symbol.Point()*digits_adjust;


 
sergio.fg #:

Funcionou, digo, pelo menos o EA foi colocado no gráfico sem apresentar mensagem de erro. Agora vou monitorar para ver como ele se comporta quando o saldo empatar. Problema é que não há certeza se vai empatar nem quando vai empatar. Qualquer coisa te aviso. 

Outra coisa: O trecho do código que permite operar com o mini índice é este aqui abaixo. Como ele teria que ficar para também ser possível testar com ações (centavos) e com o mini-dólar que pula de 5 em 5 ?



Deu o erro de array denovo e o EA é removido do gráfico

 
sergio.fg #:

Deu o erro de array denovo e o EA é removido do gráfico

Eu coloquei este bloco para o código que você fez só ser chamado se houver ordem aberta, mas parece que não está respeitando. Mesmo com ordem aberta dá o erro de array

if(IsPositionExists()) // Verifica se há posições abertas
    {
    if(cont_saldo>=10)  // Verificamos se cont_saldo é igual ou maior que 10 o que significa que houve mais de 10 interações no evento onTimer sem mudança de saldo
    {
     // Aqui vc decide o que fazer 

      DeleteOrders();
      ClosePositions();
      cont_saldo=0;     // Zeramos cont_saldo para uma nova interação a ser utilizada no evento onTimer
      s=0;              // Zeramos  s pra uma nova interação a  ser utilizada no evento onTimer
    }
   }
 

O EA trabalha colocando ordens pendentes, estas ordens estavam sendo excluídas a cada 10 segundos mesmo sem ser acionadas. Isso porque eu havia colocado o DeleteOrders();

Tirei isso e tá funcionando.

A sua lógica está funcionando perfeitamente pois eu presenciei uma 4 empatadas do saldo e de fato após 10 segundos as ordens são fechadas.

E até agora não deu mais aquele erro de array

 
sergio.fg #:

O EA trabalha colocando ordens pendentes, estas ordens estavam sendo excluídas a cada 10 segundos mesmo sem ser acionadas. Isso porque eu havia colocado o DeleteOrders();

Tirei isso e tá funcionando.

A sua lógica está funcionando perfeitamente pois eu presenciei uma 4 empatadas do saldo e de fato após 10 segundos as ordens são fechadas.

E até agora não deu mais aquele erro de array

Legal Sergio. Caso o erro persista, experimente colocar a clausula condicional abaixo no evento onTimer testando la mesmo se houve 10 repetições , pois o erro de Array out the Range só deveria ocorrer se o evento Ontick falhasse em executar a rotina.. Por isso mesmo que deixei o tamanho do Array list_saldo[60] que armazenaria ate 60 registros que indicaria que houve 60 segundos sem alteraçao de saldo..

if(cont_saldo>=10)  // Verificamos se cont_saldo é igual ou maior que 10 o que significa que houve mais de 10 interações no evento onTimer sem mudança de saldo
    {
     // Aqui vc decide o que fazer 

      DeleteOrders();
      ClosePositions();
      cont_saldo=0;     // Zeramos cont_saldo para uma nova interação a ser utilizada no evento onTimer
      s=0;              // Zeramos  s pra uma nova interação a  ser utilizada no evento onTimer
    }
 
josue moraes #:

Legal Sergio. Caso o erro persista, experimente colocar a clausula condicional abaixo no evento onTimer testando la mesmo se houve 10 repetições , pois o erro de Array out the Range só deveria ocorrer se o evento Ontick falhasse em executar a rotina.. Por isso mesmo que deixei o tamanho do Array list_saldo[60] que armazenaria ate 60 registros que indicaria que houve 60 segundos sem alteraçao de saldo..

BLZ, até agora tá indo bem. Você sabe sobre isso ? fazer funcionar com mini dólar e também com ações (só funciona com mini indice): 

/--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
   m_adjusted_point=m_symbol.Point()*digits_adjust;
 
sergio.fg #:

BLZ, até agora tá indo bem. Você sabe sobre isso ? fazer funcionar com mini dólar e também com ações (só funciona com mini indice): 

Não entendi o que vc quer fazer...É sobre tamanho de lotes?

 
josue moraes #:

Não entendi o que vc quer fazer...É sobre tamanho de lotes?

Fiz uma pequena confusão aqui

Tudo certo

Muito grato por tudo

Boa sorte aí no seu destino



Saúde e Paz

 
sergio.fg #:

Fiz uma pequena confusão aqui

Tudo certo

Muito grato por tudo

Boa sorte aí no seu destino



Saúde e Paz

Amem..

 
sergio.fg #:

Acho que daria certo assim: 


int count;  // cria uma variável count

int ticket; //variável que percebe cada ticket que a cotação do ativo der

if (IsPositions())  //se tem ordem aberta, BUY ou SELL (no código já tem esta função que detecta se há ordens abertas)

count++;  //o contador vai incrementando 1 em 1

if (saldo muda a cada ticket, que é a cotação do ativo) // enquanto o saldo estiver mudando a cada cotação do ativo

count=0;  // o contador vai sendo zerado

if (count => 1000)  // Mas se este contador atingir determinado valor é porque o saldo não mudou

CloseAllPositions();  // aí fecha todas as ordens

count = 0;  // e zera o contador esperando novas ordens serem abertas e recomeçar o acompanhamento


Como fazer isso dar certo ? vou pesquisar mas se puderem me adiantar alguma coisa, agradeço.