Minha EA faz uma entrada dupla - página 6

 
doshur:
Alguma atualização da central de serviço?
Ainda não.
 
angevoyageur:
Ainda não.

Hi,

Alguma novidade da central de serviço ainda?

 
doshur:

Hi,

Alguma novidade da central de serviço ainda?

Você pode ter certeza de que eu enviarei a resposta aqui se eu receber uma.

Pessoalmente, aindanão vim para reproduzir o problema.

 

Minha EA gera sinal muito lentamente e hoje fez uma troca.

Não há problema com o tamanho do lote depois que uso o novo código, porém não posso confirmar que o novo código está funcionando.

 
doshur:

Minha EA gera sinal muito lentamente e hoje fez uma troca.

Não há problema com o tamanho do lote depois que uso o novo código, porém não posso confirmar que o novo código está funcionando.

Olá doshur,

Nenhuma resposta do ServiceDesk ainda. Entretanto, seu problema é "perturbador" para mim Você pode confirmar se você tem este problema de duplicidade de negócios em uma conta real e não em uma demonstração? (Não posso reproduzir este problema em minha conta demo).

Também verificando mais uma vez seus postos, agora eu comento este registro :

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Minha EA faz uma entrada dupla

(baseado no pedido #40018327) DEAL2 - Entrada 3

2013.12.20 08:35:01 Negociações '800****': compra de câmbio 0.01 EURUSD no mercado colocado para execução em 331 ms DEAL2 - Entrada 2

2013.12.20 08:35:01Trades'800****': negócio #27731691 compra 0.01 EURUSD a 1.36353 feito (baseado no pedido #40018326) DEAL 1 - Entrada 3

2013.12.20 08:35:00Trades'800****': compra de câmbio 0.01 EURUSD no mercado DEAL2 - Entrada 1

2013.12.20 08:35:00 Negociações '800****': compra de câmbio 0.01 EURUSD no mercado colocado para execução em 313 ms DEAL1 - Entrada 2

2013.12.20 08:35:00 Negociações '800****': compra de câmbio 0.01 EURUSD no mercado DEAL1 - Entrada 1

Se entendi corretamente, confirma que a questão é que a PositionSelect() ainda é falsa, enquanto uma nova posição está sendo aberta. De fato, você pode ver que 1 negociação resulta em 3 entradas, e a segunda negociação é iniciada antes da chegada da terceira entrada para a negociação 1 (confirmação da nova negociação/posição).

Sobre o trabalho com a função Sleep(), não estou satisfeito com isso, pois não há como saber qual o atraso a ser usado. Claro que mais este atraso é grande, menos é a chance de conseguir uma "dupla troca", mas ainda assim é possível. Portanto, ainda estou procurando uma solução melhor.


 
angevoyageur:

Sobre o trabalho com a função Sleep(), não estou satisfeito com isso, pois não há como saber qual a demora para usar. Claro que mais este atraso é grande, menos é a chance de conseguir uma "troca dupla", mas ainda assim é possível. Portanto, ainda estou procurando uma solução melhor.

Desculpe se estou errado, pois acabei de chegar aqui neste tópico, mas parece que este código poderia ser uma solução melhor do que apenas Dormir(), e ajudaria a identificar o problema e o real valor do atraso necessário:

bool fatalError=false; // atention: declare this as global

....

if (fatalError==false) {
  if (m_Trade.PositionOpen(Symbol(), ORDER_TYPE_BUY, LotSize, Price, 0, 0)) {
    Print("Position opened in ", Symbol());
    int maxTimeout=0;
    while (!PositionSelect(Symbol())) {
       Sleep(100);
       maxTimeout++;
       if (maxTimeout>100) {
          Print("### PositionSelect fatal error!");
          fatalError=true;
          break;
       }
    }
    Print("--> PositionSelect delay=",maxTimeout*100);
    break;
  }
}
 
angevoyageur:

Olá doshur,

Nenhuma resposta do ServiceDesk ainda. Entretanto, seu problema está me "perturbando". Você pode confirmar se você consegue este problema de dupla negociação em uma conta real e não em uma demonstração? (Não posso reproduzir este problema em minha conta demo).

Também verificando mais uma vez seus postos, faço agora uma observação a este registro :

Se entendi corretamente, confirma que a questão é que a PositionSelect() ainda é falsa, enquanto uma nova posição está sendo aberta. De fato, você pode ver que 1 negociação resulta em 3 entradas, e a segunda negociação é iniciada antes da chegada da terceira entrada para a negociação 1 (confirmação da nova negociação/posição).

Sobre o trabalho com a função Sleep(), não estou satisfeito com isso, pois não há como saber qual o atraso a ser usado. Claro que mais este atraso é ótimo, menos é a chance de conseguir uma "dupla troca", mas ainda assim é possível. Portanto, ainda estou procurando uma solução melhor.


Sim. Estou usando uma conta real
Mais uma negociação feita. Nenhuma entrada dupla. Talvez meu novo código funcione?
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Environment State / Account Properties - Documentation on MQL5
 
figurelli:

Desculpe se estou errado como acabei de chegar aqui neste tópico, mas parece que este código poderia ser uma melhor solução do que apenas Dormir(), e ajudaria a identificar o problema e o real valor de atraso necessário:

Idéia interessante. Vou usá-la para identificar o problema, mas não gosto da função Sleep() embora cada um seja livre para escolher sua solução.

Obrigado.

Documentation on MQL5: Common Functions / Sleep
Documentation on MQL5: Common Functions / Sleep
  • www.mql5.com
Common Functions / Sleep - Documentation on MQL5
 
angevoyageur:

Idéia interessante. Vou usá-la para identificar o problema, mas não gosto da função Sleep() Embora cada um seja livre para escolher sua solução.

Obrigado.

De nada, esta solução é apenas uma alternativa, eu também não gosto de Dormir, já que você perderá carrapatos. Provavelmente, semáforos/bandeiras ou mesmo máquinas estatais seriam mais seguras/eficientes/elegantes.
 
figurelli:
De nada, esta solução é apenas uma alternativa, eu também não gosto de Dormir, já que você perderá carrapatos. Provavelmente, semáforos/bandeiras ou mesmo máquinas estatais seriam mais seguras/eficientes/elegantes.
Meus testes com sua solução mostram que PositionSelect() é em algum momento verdadeiro logo após PositionOpen (maxcount=0) , ou falso (maxcount=1). Portanto, há obviamente um atraso. Seria interessante se alguém pudesse testá-lo em uma conta real.
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Environment State / Account Properties - Documentation on MQL5