A EA mistura pedidos de compra e venda - página 2

 

Sem conhecer a ea inteira e como você a está usando, estaremos apenas adivinhando o que está errado. Assumindo que está selecionando uma ordem correta para passar esta declaração.

while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}

não há como passar:

if ((orderType == OP_BUY || orderType == OP_BUYSTOP)) {

se seu Op_Sell. A menos que você tenha esta coisa em vários gráficos do mesmo Símbolo.

Vendo que você está usando um loop contencioso. Esta é provavelmente alguma forma de Rapid Order Maker.

Meu palpite final. A ordem selecionada muda após a verificação do tipo de ordem :)

Qualquer outra coisa, eu sugiro, como o Raptor, que você utilize uma grande quantidade de declarações impressas.

 
  1. A ordem selecionada NÃO pode ser alterada após o pedidoSelect.
  2.  for(cnt = total-1; cnt >= 0; cnt--)  {
          while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}
    se a ordemSelect falhar, ela falhará continuamente e você terá um loop infinito. Se várias ordens fecharem em outro gráfico enquanto você estiver atualizando o seu, a próxima iteração da seleção falhará. Muito perigoso.
 

Imprimi o número do ticket e ele não coincide com o OrderType().


Se a ordem selecionada for do tipo OP_BUY, o correto se será processado, mas então na minha chamada OrderModify(...), eu passo OrderTicket() como o primeiro parâmetro, mas é o ticket de uma outra ordem.


Alguma idéia?

 
dvarrin:

Alguma idéia?

Talvez você esteja tentando Modificar uma ordem que já está fechada ? você não está especificando um pool do qual você está Selecionando seus negócios de .

OrderSelect( int index, int select, int pool=MODE_TRADES) 
MODE_TRADES (padrão)- ordem selecionada do pool de negociação (ordens abertas e pendentes),

MODE_HISTÓRIA - ordem selecionada a partir do pool histórico (ordem fechada e cancelada).


	          
 
RaptorUK:

Talvez você esteja tentando Modificar uma ordem que já está fechada ? você não está especificando um pool do qual você está Selecionando seus negócios de . .

MODE_TRADES (padrão)- ordem selecionada do pool de negociação(ordens abertas e pendentes),

MODE_HISTÓRIA - ordem selecionada a partir do pool histórico (ordem fechada e cancelada).


Eu também tentei isso, mas não mudou nada. Parece que tenho que armazenar todos os dados da ordem selecionada que quero utilizar:


int ticket=0;

duplo SL = 0,0;

OrderSelect(cnt, ...);

ticket = OrderTicket();

SL = OrderStoploss();

if (OrderType() == OP_BUY) {


}


...


Por que é assim? Eu não entendo o que está errado em meu código para que OrderTicket() não corresponda à mesma ordem que o OrderType() está se referindo.

 
dvarrin:

Imprimi o número do ticket e ele não coincide com o OrderType().


Se a ordem selecionada for do tipo OP_BUY, o correto se será processado, mas então na minha chamada OrderModify(...), eu passo OrderTicket() como o primeiro parâmetro, mas é o ticket de uma outra ordem.

É a próxima ordem em seqüência, é a ordem anterior em seqüência?
 

OrderType = OrderType()

mudar para

int orderType = OrderType(); e excluir a declaração original.

 
forexCoder:

OrderType = OrderType()

mudar para

int orderType = OrderType(); e excluir a declaração original.


OrderType está ok. É o OrderTicket() que não é o bilhete da ordem correta.
 

Eu o encorajaria a descobrir o que está causando seu problema em vez de codificar em torno dele ...

A engenharia de software tem tudo a ver com resolução de problemas, é como aprendemos e melhoramos. Estou na minha terceira tentativa desde sábado de codificar um problema específico relacionado a Fibs, estou quase lá. . o uso cuidadoso da função Print() ajuda muito . .

 
dvarrin:

OrderType está ok. É o OrderTicket() que não é o bilhete da ordem correta.

int OrderType = OrderType() não está bem, um pode estar escondendo o outro (as declarações locais escondem os globos sem nenhum erro).

int orderType = OrderType()