Criação de uma GUI para MQLs em modo gráfico. - página 13

 
Алексей Барбашин:

Maxim, como esta solução é melhor? Afinal, a fim de verificar o status de uma bandeira, ela também precisa ser verificada periodicamente na MQL. Então, acontece que em qualquer lugar que você olhe, você precisa monitorar constantemente as mudanças do estado de algo para entender que está na hora de pegar os dados. E este fragmento pode ser armazenado na própria dll e verificado lá - é o que eu faço. Em seu exemplo, você tem uma chamada implícita para a dll para devolver o estado da bandeira.

A verificação da bandeira é uma operação muito rápida. Quero dizer, o mais rápido de todos :-)

E não há chamadas implícitas neste exemplo:

A InitDLL recebeu as bandeiras como entrada, armazenou-as em algum lugar, desovou um traço que conta alguma coisa e, após a sua conclusão, faz atomic_inc(flags).

O assessor só tem que verificar as bandeiras[0].

 
É para verificar. Esse é o ponto-chave. O que eu estou sugerindo é que a ferramenta seja notificada quando uma "tarefa" for concluída. Ou seja, para que você não tenha que gastar recursos constantes em verificações. A notificação chegou - você recebeu os dados.
 
Maxim Kuznetsov:

A verificação da bandeira é uma operação muito rápida. Ou seja, é o mais rápido de todos :-)

E não há chamadas implícitas neste exemplo:

O InitDLL recebe bandeiras int * à entrada, armazena em algum lugar, gera um traço que conta algo e faz atomic_inc(bandeiras) após a conclusão.

O assessor só tem que verificar as bandeiras[0].

Mas não se pode fazer nada apenas com a verificação da bandeira - é necessária a sincronização entre fios, barreiras, atômicas ou mutex que se deve tomar, é claro, para nem todas as CPU.


Alexey Barbashin:
Exatamente para verificar. Esse é o ponto-chave. E sugiro alertar a ferramenta de que a "tarefa" foi concluída. Ou seja, você não precisa gastar recursos constantes em verificações. A notificação chegou - você recebeu os dados.
E como todos esses mutexes são implementados? Tudo através da verificação e colocação de bandeiras, tanto quanto eu saiba. Você tem que verificar alguma bandeira em algum lugar da linha µl de qualquer maneira.
 
Maxim Kuznetsov:

A verificação da bandeira é uma operação muito rápida. Ou seja, é o mais rápido de todos :-)

E não há chamadas implícitas neste exemplo:

A InitDLL recebe as bandeiras int * como entrada, armazena em algum lugar lá, gera um traço que conta alguma coisa e, após a conclusão, faz atomic_inc(flags).

A EA só tem que verificar as bandeiras[0].

Max, bem, a situação com a ligação de retorno é clara por enquanto. Vamos usar o que temos e esperar que os desenvolvedores adicionem o recurso de ligação de retorno.

Quero voltar à questão da GUI. Não importa no que se desenha. Por exemplo, eu faço isso em Sharp, você faz isso em Tcl.

Enquanto a forma existir por si só, ela não é um problema. Mas eu gostaria muito que os formulários não voassem sozinhos, mas que estivessem vinculados aos gráficos apropriados.

Quando você define o pai do formulário criado, ele é colocado na tabela necessária. Mas há um problema de "fundir" a janela com o gráfico e o gráfico apenas desenha a forma "colada".

Sugiro tentar resolver esta questão por enquanto, pois ela ainda está fora do escopo de ação dos desenvolvedores de MT.

Você já tentou anexar sua GUI aos gráficos?

 
pavlick_:

Mas você não pode fazer apenas com a verificação da bandeira, você precisa de sincronização entre fios, barreiras, atômica ou mutex, o que não é relevante para cada CPU, é claro.


E como todos os tipos de mutexes são implementados? Tudo através da verificação e colocação de bandeiras, tanto quanto eu saiba. Você tem que verificar alguma bandeira em algum lugar na linha do µl de qualquer maneira.

É bem verdade. Mas que isso aconteça em um nível de aplicação muito baixo, pois, por exemplo, funciona com o OnChartEvent. Isto é, agora nós o programamos explicitamente (verificações), mas tudo poderia ser transferido para o nível de aplicação, como disse Renat (ele sugeriu algumas variantes).

 
Maxim Kuznetsov:

Eu estou em baixo :-) doar - você pode enviar para a MS

066cd265-e2fe-468e-9492-4228e9759e38
8e1040ba-dc3e-4e2a-9208-e3ea8da9ad05
03dcd7cd-4b9b-4ff7-bff0-e0839a0f9d8b
d69f2c8c-de51-4557-8188-4ebb870da7da
a79a8cc6-f785-4268-bc4e-2deda0f1ecd0
f4f59f52-1da8-4f74-a71e-9aec1992674d
85608797-6015-456d-af64-ad7890120372
9289991a-e287-47fb-b595-6d719c1b7dbd
63d3b953-3229-4045-a82a-fc9e7795bb01
c75c4e0f-8320-42df-943c-9aada54b60eb

Se houver mais alguma coisa, talvez eu consiga encontrá-la.

Obrigado, passei, recebi uma libra!

 
Alexey Volchanskiy:

Obrigado, passei, recebi uma libra!

por isso é mais lucrativo que o escalper ! disposto a dar ao varejo por um centavo, você dá ao atacado por 1$/ten. o lucro é limitado apenas pela taxa de transferência :-) quantos kilobytes por segundo
 
Maxim Kuznetsov:
por isso é mais lucrativo que um escalper ! pronto para vendê-los por um centavo, você os vende a granel por 1$/ten. o único limite é a velocidade de transmissão :-) alguns kilobytes de GUIDs por segundo

Tentador como o inferno. É assim que conquistaremos o mercado GUID usado! E tornar-se um monopólio, criar um frenesi artificial como com o bitcoin e ficar rico!

 
Алексей Барбашин:

Max, bem, a situação com callback é clara por enquanto. vamos usar o que temos e esperar que os desenvolvedores adicionem a capacidade de callback.

Quero voltar à questão da GUI. Não importa no que se desenha. Por exemplo, eu faço isso em Sharp, você faz isso em Tcl.

Enquanto a forma existir por si só, ela não é um problema. Maseu gostariamuito que os formulários não voassem sozinhos, mas que estivessem vinculados aos gráficos apropriados.

Quando você define o pai da forma criada, ele é colocado na tabela necessária. Mas há um problema de "fundir" a janela com o gráfico e o gráfico apenas desenha a forma "colada".

Sugiro tentar resolver esta questão por enquanto, pois ela ainda está fora do escopo de ação dos desenvolvedores de MT.

Você já tentou anexar sua GUI aos gráficos?

Não tenho nenhuma necessidade de acorrentar formulários aos gráficos.

Existem gráficos operacionais que estão diretamente conectados ao gráfico (todos os tipos de linhas, legendas, inscrições, etc.), isto é feito naturalmente por ferramentas MT.

Mas existem GUIs de gerenciamento - configurações, relatórios, estatísticas. Eles são bastante grandes e é um crime contra o usuário :-)

Basta colocar o formulário no topo do gráfico. Você precisará remover o formulário do gerenciador de janelas e acompanhar as mudanças na geometria e no foco do gráfico.
Tal "pôr-do-sol à mão" :-) Pelo menos você não vai entrar nas entranhas do MetaTrader e não vai impor novos arrepios e ganchos em suas janelas - ou seja, você vai se comportar decentemente

Qualquer GUI chamada da DLL tem a característica mais desagradável - Conselheiros/indicadores especializados que a chamam reiniciarão periodicamente por causa do menor espirro. O que leva à reabertura de formas e quedas d'água de linguagem grosseira.
Talvez os há muito anunciados "serviços" (ou como quer que sejam chamados) fiquem desprovidos deste inconveniente.

A atualização/ sobre a colocação de um formulário - coloque o RectLabel no gráfico e nos eventos do gráfico para acompanhar a mudança de codinatos. Quando mudar - colocar sua forma estritamente em cima :-) Você precisa de um pouco de pandeiro ao trocar as abas, minimizar a janela, para esconder sua forma a tempo
 
Alexey Volchanskiy:

Você não explicou absolutamente nada. Como você obtém os dados da MT* para o painel sharpe?

Tenho feito feedback através do Memory Mapping com pesquisas cronometradas. O painel só transmitiu configurações diferentes e resultados de cálculos lentos

Eu tenho um TC externo, não preciso de feedback da GUI para o terminal.