Dividir as posições em aberto em grupos - página 8

 
Sergey Voytsekhovsky:

Por favor, diga-me, o artigohttps://www.mql5.com/ru/articles/567 tem o seguinte código e menciona

Mas não consegui encontrá-lo no pacote padrão. Não é uma boa busca ou o artigo está desatualizado?

Não, eu só cometi um erro.

Você está puxando pedaços de código daqui, dali e dali, e nós devemos adivinhar.

O código para adicionar um item ao final da lista que você mostrou é muito semelhante ao código para adicionar um item ao final da lista da biblioteca padrão.

E acontece que você tirou algo de algum lugar...

 
Sergey Voytsekhovsky:

A idéia é clara, não está claro por que não usar algoritmos já comprovados, mas sobre "três loops" - muito compreensível, obrigado. Quando você obtém soluções simples de alta qualidade, eu sempre me pergunto por que eu mesmo não descobri, porque é tão óbvio. Obrigado.

Há muitos erros também, e procurar problemas no código de outras pessoas é absolutamente impossível para mim. Além disso, se de repente você encontrar um erro, você o corrige por si mesmo e mesmo que o comunique, isso não significa que eles verão a mensagem e a consertarão. E a próxima atualização começará tudo de novo.
 
Alexey Viktorov:
Há muitos erros também, e procurar um problema no código de outra pessoa é absolutamente impossível para mim. Além disso, se de repente você encontrar um erro, você o corrige por si mesmo e, mesmo que o comunique, não tem certeza de que a mensagem será vista e corrigida. E a próxima atualização começará tudo de novo.

Você tem certeza de que há muitos bugs na SB? Ou você simplesmente não gosta de gatos porque não tem um livro de receitas?

 
Artyom Trishkin:

Não, eu só cometi um erro.

Você está "puxando" pedaços de código daqui, ali, ali..., e nós temos que adivinhar.

O código para adicionar um item ao final da lista que você nos mostrou é muito semelhante ao código para adicionar um item ao final da lista da biblioteca padrão.

E acontece que você puxou algo de algum lugar...

O código para adicionar um item ao final da lista é da biblioteca padrão, você está certo. E eu tentei "puxá-lo" depois que não encontrei esse código do artigo. :-))

 
Artyom Trishkin:

Você tem certeza de que sabe que existem muitos erros na SB ? Ou simplesmente não gosta de gatos devido à falta de um livro de receitas?

Digamos, Artyom, você se lembra do problema com o fechamento parcial de uma posição? Você se lembra que posteriormente eles adicionaram outro método em vez de encontrar a razão para este comportamento?

Não sei como o desvio=ULONG_MAX fez com que todo o método não funcionasse, mas eu o substituí por desvio=1000 e tudo funcionou bem. Escrevi sobre isso no tópico "Bugs bugs...", mas o tema cresceu tão rápido que esta mensagem caiu no esquecimento e não foi notada. Como resultado, surgiu outro método, mas será que ele é realmente necessário? E agora como se pode ter certeza de que não há mais erros em nenhum lugar??? Como você pode ter certeza de que a mensagem será notada?

 
Sergey Voytsekhovsky:

O código para adicionar um item ao final da lista é da biblioteca padrão, você está certo. E eu tentei "puxá-lo" depois que não encontrei esse código do artigo. :-))

Se você usa a biblioteca padrão para armazenar seus dados representados por objetos, então os dados não devem ser uma estrutura, mas um objeto baseado no CObjeto da biblioteca padrão, e então você pode usar conjuntos dinâmicos de ponteiros para objetos da biblioteca padrão para armazená-los. Não há como puxar uma peça para fora.

Документация по MQL5: Стандартная библиотека / Базовый класс CObject
Документация по MQL5: Стандартная библиотека / Базовый класс CObject
  • www.mql5.com
Класс CObject обеспечивает всем своим потомкам возможность быть элементом связанного списка. Кроме того определяется ряд виртуальных методов для дальнейшей реализации в классах-потомках.
 
Alexey Viktorov:

Digamos, Artyom, você se lembra do problema com o fechamento parcial de uma posição? Você se lembra que mais tarde eles adicionaram outro método em vez de encontrar a razão para este comportamento?

Não sei como o desvio=ULONG_MAX afetou todo o método não funcionando, mas eu o substituí por desvio=1000 e tudo funcionou bem. Escrevi sobre isso no tópico "Bugs bugs...", mas o tema cresceu tão rápido que esta mensagem caiu no esquecimento e não foi notada. Como resultado, surgiu outro método, mas será que ele é realmente necessário? E como se pode agora ter certeza de que não há erros em nenhum outro lugar?? Como você pode ter certeza de que a mensagem será notada?

Não, eu não me lembro do problema com o fechamento parcial. E não sei qual é o desvio que afeta a operação. E não consigo nem imaginar como um desvio máximo igual a pontos ULONG_MAX (que é equivalente a nenhum desvio) poderia afetar o fechamento parcial. E eu ainda não ouvi falar do novo método. Qual é o método?

E para garantir que a mensagem não se perca - encontre-a, copie-a para o seu bolso e repita com uma nota que provavelmente se perdeu em algum lugar na discussão que"MQL != C++, e deve ser ==".

 
Artyom Trishkin:

Não, eu não me lembro de um problema com o fechamento parcial. E não sei se o desvio afeta a operação. E nem consigo imaginar como um desvio máximo de pontos ULONG_MAX (que é equivalente a nenhum desvio) poderia afetar o fechamento parcial. E eu ainda não ouvi falar do novo método. Que tipo de método?

E para que a mensagem não se perdesse - encontrá-la, copiá-la em um bolso e repô-la com uma nota que provavelmente se perdeu em algum lugar na discussão que"MQL != C++, e deveria ser ==".

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Divisão das posições abertas em grupos

Alexey Viktorov, 2020.04.08 09:13

Diga-me Artem, você se lembra do problema com o fechamento parcial da posição? Você se lembra que mais tarde eles adicionaram outro método em vez de encontrar a causa de tal comportamento?

Não sei como o desvio=ULONG_MAX afetou toda a inoperabilidade do método, mas o substituí por desvio=1000 e tudo funcionou bem. No tópico "Bugs bugs..." escreveu sobre isso, mas o tema cresceu tão rápido, que esta mensagem desapareceu no abismo e não foi notada. Como resultado, surgiu outro método, mas será que ele é realmente necessário? E como se pode agora ter certeza de que não há erros em nenhum outro lugar?? Como você pode ter certeza de que a mensagem será notada?


 
Artyom Trishkin:

Não, eu não me lembro de um problema com o fechamento parcial. E não sei se o desvio afeta a operação. E nem consigo imaginar como um desvio máximo de pontos ULONG_MAX (que é equivalente a nenhum desvio) poderia afetar o fechamento parcial. E eu ainda não ouvi falar do novo método. Qual método?

E assim a mensagem não se perde - encontre-a, copie-a para um bolso, e repita com uma nota que provavelmente se perdeu em algum lugar na discussão que"MQL != C++, e se deve ser ==".

Você está, portanto, sugerindo que as outras mensagens sejam empurradas de volta? Que ninguém fale neles? Isso não está certo.

Na minha opinião, seria melhor definir uma seção de fórum separada, onde cada problema seria um tópico separado. O número de tópicos é muito menor do que o número de postos por tópico. Portanto, apesar do grande número de tópicos, eles não serão empurrados para tão longe quanto as perguntas individuais e os relatórios de erros são empurrados agora.

 
Alexey Viktorov:

Eliminar a força bruta das posições para determinar "que a posição é realmente nova". Encontre outro caminho. Por exemplo, na OnTradeTransaction. E tente usar a função ArrayRemove ao invés de transbordar a matriz

Se entendi bem, este é o caminho certo a seguir. Como um camarada mais experiente, por favor aconselhe, com o propósito de pegar posições de recém-nascidos, tal filtro funcionará ???? Ou talvez haja uma opção melhor ????

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 {
     if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
      {
         if(trans.type != TRADE_TRANSACTION_ORDER_DELETE)
            {
             if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN) // открылась позиция
               {
Razão: