Como verificar se um pedido é selecionado - página 9

 
Vinin:


Eu não perguntei a ninguém em particular.

Mas você deve ter tido razão em levá-lo pessoalmente.

Não posso chamá-lo de tolo, mas você é surdo, isso é certo.

Você não ouve os outros. Não estou falando de minhas observações, mas dos conselhos que lhe foram dados.

Você já escreveu programas interoperáveis?

O que a Ant_TL pede é "interoperabilidade", mas ela não pode ser implementada na MQL.

 
PapaYozh:

Você já escreveu algum programa interoperável?

O que a Ant_TL está perguntando é sobre "interoperabilidade", mas não é viável na MQL.


Não é difícil de implementar. E, em princípio, existe uma solução. Demasiado preguiçoso para ler mais
 
Tal solução pode ser viável para posições fechadas, que não mudarão mais. Mas para posições em aberto, não vale a pena fazer
 
Vinin:

Não é difícil de implementar. E há uma solução. Demasiado preguiçoso para ler mais

Você não poderá executar operações com ordens e certificar-se de que o ambiente não seja afetado.

Já foi dito sobre GetLastError(), você não será capaz de restaurar o código que deve ser devolvidopela função GetLastError().

 
PapaYozh:

Você não poderá executar operações com ordens e certificar-se de que o ambiente não seja afetado.

Já foi dito sobre GetLastError(), você não será capaz de recuperar o código que a função GetLastError() deveria ter retornado.


Se você quiser, você pode, ele terá apenas sua própria função ( quero dizerGetLastError())
 

Isto pode parecer uma solução - OrderSelect() - MySelect() invólucro para uso em funções que buscam pedidos por índice

int last_select=0; // colocá-lo em algum lugar antes do init e começar

// ...... código do programa

bool MySelect(int i,int mode=MODE_TRADES){ // seleção do pedido - retorna Verdadeiro se o pedido for selecionado e pertencer à EA, Falso caso contrário
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
else
return(false);
}
return(false);
}

bool TickSelect(int tick){ // Seleção do pedido diretamente pelo tick
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
else
return(false);
return(true);
}

void SomeFunc(){ // Um modelo de função que pode quebrar a seleção da ordem e, consequentemente, quebrar a lógica do programa, se a seleção da ordem atual não for cuidada
int tick=last_select;

// ... executar ações necessárias

if(tick>0)
TickSelect(tick);
}

 
Ant_TL:

Não pode, a menos que você mesmo mude este estado no programa.

Presume-se que o estado do pedido mudou de MODE_TRADES para MODE_HISTORY. E seu Consultor Especialista não fez nada com o pedido. É a mesma ordem ou é diferente?

 
Mislaid:

Foi assumido que o status do pedido mudou de MODE_TRADES para MODE_HISTORY. E sua EA não fez nada com o pedido. É a mesma ordem ou é diferente?

É a mesma ordem

 
Eu não vejo o problema. E há muito alarido acontecendo... Você precisa selecionar uma ordem em uma função principal A(), e em outra função B(), chamada da função principal A(), processar a ordem selecionada na função A(). E devemos saber com certeza na função B() se a ordem ainda está selecionada ou não... Assim, passe para a função B() o bilhete da ordem selecionada na função A(). Na função B(), você pode verificar a partir de qual lista a ordem é selecionada e então decidir para onde ir e o que retornar à função A()...
 
Ant_TL:

Isto pode parecer uma solução - OrderSelect() - MySelect() invólucro para uso em funções que buscam pedidos por índice

int last_select=0; // colocá-lo em algum lugar antes do init e começar

// ...... código do programa

bool MySelect(int i,int mode=MODE_TRADES){ // Seleção da ordem que precisamos - retorna Verdadeiro se a ordem foi selecionada e pertence ao Expert Advisor; caso contrário, Falso
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
retorno(true);
senão
retorno(falso);
}
retorno(falso);
}

bool TickSelect(int tick){ // Seleção do pedido diretamente por tick
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
senão
retorno(falso);
retorno(true);
}

void SomeFunc(){ // Um modelo de função que pode quebrar a seleção da ordem e, portanto, quebrar a lógica do programa, se a seleção da ordem atual não for cuidada
int tick=last_select;

// ... executar a ação necessária

if(tick>0)
TickSelect(tick);
}

Vamos imaginar o que acontecerá com a variável last_select depois que o terminal for reiniciado (os caras maus apagaram a luz)
Razão: