Laços e Encerramento ou Eliminação de Pedidos - página 4

 
ggekko:

Olá especialistas, qual é a sua opinião sobre esta solução?

while(OrdersTotal()>0)
Ela significa que é incompatível com todas as outras EA (inclusive com ela mesma) e com o comércio manual. (Negociações em outros gráficos)
 
WHRoeder:
ggekko:

Olá especialistas, qual é a sua opinião sobre esta solução?

Ela significa que é incompatível com todas as outras EA (inclusive com ela mesma) e com o comércio manual. (Negociações em outros gráficos)

É claro. Isto é tudo muito próximo.

Às vezes há situações (por exemplo, você quer fechar imediatamente muitas transações abertas) quando a versão "original" não funciona. Esta versão é boa para isso.

 
ggekko:

É claro. Isto é tudo muito próximo.

Às vezes, há situações (por exemplo, você quer fechar imediatamente muitos negócios abertos demais) quando a versão "original" não funciona. Esta versão é boa para isso.

Por que você não está tentando reagir a erros? não deveria analisar o erro e reagir de acordo? para alguns erros você pode tentar novamente, para outros você tem que parar de tentar.
 

Hi,


Tenho uma pergunta sobre os loops. Quero executar a EA atual em um loop o mais freqüente possível. Portanto, meu pensamento é colocar o código atual dentro de um loop while com uma função de sono incluída dentro que faz com que o while execute apenas a cada 1 milissegundo.


Entretanto, quando fiz isto, (tenho algumas chamadas de função Print("...") colocadas em que se mantém um registro do que está acontecendo em cada loop), eu vejo este congelamento, e não mais impressões na tela.

Estou me perguntando qual poderia ser o problema. É correto executar o EA em um loop com a mesma freqüência de 1ms? Haveria algum problema em tentar obter o último lance/pesquisa, por exemplo, do servidor a cada milissegundo? Isso colocaria muita carga lá, causando o congelamento?

Possivelmente algo mais que meu algoritmo está fazendo está causando isto, não tenho certeza.


Eu o executei em ciclos de 200ms e ainda tenho o mesmo problema (embora não tão imediato). Poderia haver um problema com a impressão de demasiadas linhas no arquivo de registro?



obrigado por qualquer conselho sobre isto.

cumprimentos,


C.

 
Pode ser um problema de código - mas sem saber o código?
 

14967057:

Eu tenho uma pergunta sobre os loops. Quero executar a EA atual em um loop o mais freqüente possível.

Então, meu pensamento é colocar o código atual dentro de um loop while com uma função sleep incluída dentro que faz com que o while execute apenas a cada 1 milissegundo.

Haveria um problema em tentar obter a última oferta/venda.

Haveria um problema com a impressão de demasiadas linhas no arquivo de registro?

  1. Este tópico era sobre Fechamento e Exclusão de ordens. Não desvie os fios para perguntas fora do tópico. Postar um novo.
  2. Por que você quer fazer um loop contínuo? Nada está mudando. Tudo o que você está fazendo é desperdiçar tempo da CPU.
  3. Volte desde o início e quando Bid/Ask mudar, seu início será chamado o mais rápido possível.
  4. Sim, você preencheu todas as linhas disponíveis, mais rápido que o Windows pode colocá-las em disco. Todos os programas são paginados. Tudo fica pendurado.
 

Hi,

Acontece que o problema que eu tinha não era devido a encapsular meu código EA dentro de um loop de 1ms com um sono de 1ms. Esta parte parece boa (independentemente de onde eu imprima ou não para a tela), pois tenho-o funcionando agora durante a última meia hora sem falhas.


O problema se deveu a outra parte que eu tinha no código, o que acabou fazendo com que a EA ficasse presa em um loop infinito.

Obrigado pela entrada de Gooly e Roesder.

cumprimentos,

 

Olá a todos. Eu li este tópico e tenho uma pergunta. Tento fazer um código, que apague a ordem pendente (apenas STOP, sem LIMIT), mas somente se outra ordem pendente tiver sido ativada (iniciar OP_SELL ou OP_BUY). Então o código é este (mas há um erro, mas eu não sei onde). Você poderia olhar meu código, por favor?

 bool   result;
   int   i, j, cmd, cmd2,total;

   total=OrdersTotal();

   for(i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         cmd=OrderType();
         
         if(cmd!=OP_BUYSTOP && cmd!=OP_SELLSTOP)  //take an orders which was activated 
           {
           for(j=0; j<total; j++)   //another variable j 
     { 
     if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){ cmd2=OrderType();
     if(cmd2!=OP_BUY && cmd2!=OP_SELL)
           {
            
            OrderPrint();
            
            result=OrderDelete(OrderTicket());  //first pending order become to OP_SELL or OP_BUY, second pending order will be delete
            if(result!=TRUE) Print("LastError = ", GetLastError());
            break;
           }
        }
       }
     }
     }
   }
 

OrdensTotal() não correto...

Fiquei surpreso com a seqüência de códigos de looping que usa OrdersTotal() não dando resultados corretos (observados com dois corretores diferentes).

Estou usando a versão 1090 do MT4 em um desktop Linux Ubuntu-MATE 16.04, executando o WINE 3.0

Aqui está o que tenho usado...

for(int cc = 0; cc < OrderTotal(); cc++)
{
se (!OrderSelect(cc, SELECT_BY_POS, MODE_TRADES) ) continuar;
se (OrderSymbol() != Symbol() ) continuar;
se (OrderType() > 1) continuar; //--ignore negociações pendentes

OpenTradecnt++; //- conta para cada posição viva desse símbolo que existe
Imprimir("a contagem dos negócios abertos deste símbolo é: ", OpenTradecnt);
}

Notei com dois corretores diferentes que o valor OrdersTotal() nem sempre concorda com o que é mostrado na aba 'Trade' do corretor MT4. Inicialmente, pensei que era o corretor fazendo com que OrderTotal() não funcionasse corretamente. Quando notei no segundo corretor, comecei a me perguntar se o MT4 tinha um 'problema' interno, ou se meu código estava errado OU se este era um problema com o MT4 sincronizando corretamente com o servidor....?

Depois de ler este tópico do fórum, me pergunto se eu teria uma mudança nos resultados para mudar o for...loop para ler:

for(int cc = OrderTotal() - 1; cc >= 0; cc--)
{
...........
}

OU, há uma bandeira ou linha de código que assegurará que o OrdersTotal() esteja devidamente sincronizado durante um evento OnTick()?

Qualquer esclarecimento a este respeito seria muito útil e seria muito apreciado!

 

Favor usar o botão </> para inserir seu código.


Razão: