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

 
artmedia70:
Não vejo nenhum problema. Qual é o grande problema... Você precisa selecionar uma ordem em uma função principal A(), e em outra função B(), chamada da função principal A(), para 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(), podemos verificar de qual lista a ordem é selecionada e então decidir para onde ir e o que voltar à função A()...

Vocês me entenderam mal. Assim como metade das pessoas, por alguma razão. Não preciso na função B() para processar essa ordem, que é selecionada na função A(). A função B() funciona com outras ordens, não importa quais, ela nada tem a ver com a função A(); a função B() tem sua própria lógica. Pode contar o número de pedidos, seu lucro total, olhar através de seus comentários, TP SL, etc. A tarefa é retornar da função B() de volta à função A() de modo que não importa o que a função B() tenha feito com as ordens, a lógica da função A() no ponto de chamada da função B() a partir dela não seria violada devido ao fato de que a ordem selecionada pela função A() antes da função B() foi chamada não é mais selecionada e a ordem selecionada é outra ordem aleatória processada pela função B() que muito provavelmente também busca ordens no laço.

artmedia70:
Agora vamos imaginar o que vai acontecer com a última variável_selecionada após reiniciar o terminal (as luzes são desligadas por caras desagradáveis)

Após reiniciar a variável last_select, será inicializada a 0, conforme necessário.

 

Há 10 páginas de blá, blá, blá, blá. Aqui está o código que prevê a função para trabalhar com outra ordem (não destacada):

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем актуальную информацию об ордере                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fGet_OrderDetails (int fi_Ticket)              // OrderTicket()
{
    int lia_cmd[] = {1,-1,-1,1,1,-1};
//----
    //---- На текущий момент может быть выделенным другой ордер
    int li_LastTicket = OrderTicket();
    if (li_LastTicket != fi_Ticket)
    {   
        if (!OrderSelect (fi_Ticket, SELECT_BY_TICKET))
        {fSet_Comment (fi_Ticket, fi_Ticket, 100, "fGet_OrderDetails()", True, GetLastError()); return (false);}
    }
    if (bi_curTicket != fi_Ticket)
    {
        bi_Type = OrderType();
        bd_OpenPrice = NDD (OrderOpenPrice());
        bd_Lots = OrderLots();
        bi_cmd = lia_cmd[bi_Type];
        bi_curTicket = fi_Ticket;
    }
    bd_curSL = NDD (OrderStopLoss());
    bd_curTP = NDD (OrderTakeProfit());
    //---- Выделяем первоначальный ордер
    if (li_LastTicket != fi_Ticket) {if (li_LastTicket > 0) OrderSelect (li_LastTicket, SELECT_BY_TICKET);}
//----
    return (true);
}
este é apenas um exemplo. Uma pessoa que entenda o ponto, vai entender.
 
TarasBY:

Há 10 páginas de blá, blá, blá, blá. Aqui está o código que prevê a função de trabalhar com outra ordem (não alocada):

este é apenas um exemplo. Uma pessoa que entenda o ponto, vai entender.

Não é essa a questão. Há variáveis, locais ou globais, na EA e há variáveis terminais. No que diz respeito ao programa, estas variáveis são interativas, e seu valor pode mudar de forma absolutamente inexplicável para a EA a qualquer momento. O sinal de seleção do pedido é exatamente uma variável. Se Metaquotes permitisse o acesso ao atributo "selecionar" de um objeto gráfico, ele também seria o mesmo. Isto inevitavelmente levaria à seguinte conclusão: devemos selecionar uma ordem sempre que precisarmos saber o número da ordem selecionada ou lembrar da ordem selecionada se e somente se for exigido pela lógica do Consultor Especialista. Então, é assim...
 
tara:
Este não é o ponto. Há variáveis, locais ou globais, no EA e há variáveis do terminal. Estas variáveis são interativas do ponto de vista do programa, e seu valor pode mudar de forma inexplicável para a EA a qualquer momento. O sinal de seleção do pedido é exatamente uma variável. Se Metaquotes permitisse o acesso ao atributo "selecionar" de um objeto gráfico, ele também seria o mesmo. Isto inevitavelmente levaria à seguinte conclusão: devemos selecionar uma ordem sempre que precisarmos saber o número da ordem selecionada ou lembrar da ordem selecionada se e somente se for exigido pela lógica do Consultor Especialista. Então, é assim...

Concordo plenamente com você:

  • Antes de tudo, temos que levar em conta o que temos (capacidades MQL4);
  • Em segundo lugar, eu mesmo utilizo a estrutura de processar TODAS asordens comerciais com ordens abertas em um só lugar: faço uma enumeração das ordens e faço todas as ações necessárias com cada ordem (em ordem).

P.S. E eu faço a verificação acima no código "just in case"... :)

 

:)

Boas Festas! Para mim - 20 anos, não os piores da minha vida.

 
TarasBY:

Há 10 páginas de blá, blá, blá, blá. Aqui está o código que prevê que a função funcione com uma ordem diferente (não destacada):

Este é apenas um exemplo. Uma pessoa que entenda o ponto, vai entender.

Sim, bem ali:

int li_LastTicket = OrderTicket();

Seu código gerará um erro de execução 4105 se não houve uma chamada OrderSelect antes de ser feita. Basta colocar uma verificação GetLastError no final de cada tick e detectar este erro.

 
tara:

:)

Boas Festas! Para mim - 20 anos, não os piores da minha vida.

Parabéns! Você tem servido a Fé e a Verdade por 20 anos?
 
borilunad:
Parabéns! Você tem servido a Fé e a Verdade por 20 anos?
É isso mesmo.
 
tara:
Ela, minha querida.
Então, super-alistados, como costumavam me chamar em meus dias, ou talvez até mesmo agora, um pedaço de...? :)
 
borilunad:
Tão exagerado, como costumavam me chamar em meus dias, ou talvez até mesmo agora, um pedaço de...? :)
Você se sentiria melhor se eu dissesse que sim? :)