MT5 e trans2quik.dll - página 6

 
prostotrader:

Não, eu só preciso sincronizar 3 fios (basicamente escrever um Sincronizador), mas

Eu não sei como.

Bem, isso só deixa bandeiras. Nós colocamos uma bandeira, esperamos que outros terminem as atividades, paramos e retiramos suas bandeiras, fazemos coisas, retiramos a bandeira. Bem, e a lógica da prioridade da bandeira, obviamente.

Eu não pararia o DDE, mas o deixaria escrever no buffer para que nada fosse perdido.

 
Yuriy Asaulenko:

Bem, isso deixa apenas as bandeiras. Colocar uma bandeira, esperar que os outros concluam suas atividades, parar e retirar suas bandeiras, fazer o negócio, retirar a bandeira. Bem, e a lógica da prioridade da bandeira, obviamente.

Eu não pararia o DDE, no entanto, deixá-lo escrever no buffer para que nada se perca.

Em outras palavras, o Sincronizador deve armazenar as funções de entrada que serão executadas dependendo da prioridade?

 
prostotrader:

Então o Sincronizador precisa armazenar as funções de entrada que serão executadas dependendo da prioridade?

Não, basta suspender o(s) fio(s) de acordo com as bandeiras relevantes e sua prioridade. Nesta variante, nada mais é necessário.

A segunda opção é esperar que a função da linha termine, e depois pará-la por sua bandeira. Isto pode ser necessário, por exemplo, para atualizar a asc-bid, os indicadores e qualquer outra coisa que necessitemos.

Por exemplo, os valores das bandeiras.

0 - a rosca está ociosa,

1 - A rosca está ligada,

2 - solicitar a parada de todos os fios com menor prioridade.

Ajuste-o para 2 e espere até que todos os fios fiquem em 0, execute o programa e ajuste-o para 0 ou 1. Por esta bandeira, todos os outros fios retomam seu trabalho.

 
Yuriy Asaulenko:

Não, basta suspender o(s) fio(s) pelas bandeiras relevantes e sua prioridade. Esta opção não requer absolutamente nada mais.

A segunda opção é esperar até que a função da rosca termine e depois pará-la por sua bandeira. Isto pode ser necessário, por exemplo, para atualizar a asc-bid, os indicadores e qualquer outra coisa que necessitemos.

Por exemplo, os valores das bandeiras.

0 - a rosca está ociosa,

1 - A rosca está ligada,

2 - solicitar a parada de todos os fios com menor prioridade.

Ajuste-o para 2 e espere até que todos os fios fiquem em 0, execute o programa e ajuste-o para 0 ou 1. Por esta bandeira, todos os outros fios retomam seu trabalho.

Você mesmo escreveu que não é bom suspender o DDE

 
prostotrader:

Você mesmo escreveu que não é bom suspender um DDE

Eu simplesmente não o entendo.

O que eu faço é isto.

1. o servidor (eu tenho TCP-server) em sua thread escreve constantemente os dados para a coleção como o último em primeiro lugar. Não há necessidade de pará-lo.

Os dados são lidos/eliminados da coleta em outro fio e escritos em DataTable (é análogo à tabela do banco de dados, mas em memória). Esta linha pode ser pausada, se ficar no caminho.

3. outro tópico lê os dados da DataTable para análise. Esta linha não interfere na linha 2, uma vez que o fetching é realizado por seleção e ninguém além de 2 está escrevendo nesta tabela. Esta linha também pode ser suspensa se ficar no caminho.

Não preciso fazer nenhuma pausa, pois trabalho com uma ferramenta e a linha 3 é trocada para submeter ordens exatas e seguir os acordos.

 
Yuriy Asaulenko:

Eu simplesmente não o entendo.

O que eu faço é isto.

1. o servidor (eu tenho um servidor TCP) em sua thread escreve constantemente os dados para a coleção como o último em primeiro lugar. Não há necessidade de pará-lo.

Os dados são lidos/eliminados da coleta em outro fio e escritos em DataTable (é análogo à tabela do banco de dados, mas em memória). Esta linha pode ser pausada, se ficar no caminho.

3. outro tópico lê os dados da DataTable para análise. Esta linha não interfere na linha 2, uma vez que está sendo buscada por seleção e ninguém, exceto 2, escreve dados nesta tabela. Você também pode parar esta linha se ela ficar no caminho.

Não tenho que interromper nada, pois trabalho com uma ferramenta e a rosca 3 é trocada para submeter ordens exatas e seguir os acordos.

Sorte a sua, tenho 52 ferramentas, então tenho que trocar

 
prostotrader:

Você está com sorte, eu tenho 52 instrumentos, então eu tenho que trocar

Presumo que a análise de todos os 52 instrumentos é feita em um só fio? Ou será?

O que é usado como armazenamento? No meu caso, com acesso de múltiplos usuários, o travamento é desnecessário e a leitura não interfere na escrita.

A única coisa que precisa ser bloqueada é o acesso compartilhado da criança ao trans2quik. E somente no caso de um conjunto de fios Criança. Você pode fazer isso organizando o trans2quik em uma linha separada e chamá-lo no evento e simultaneamente bloquear o manipulador de eventos até que a solicitação seja finalizada. O resto não pode chegar).

 
prostotrader:

Abandonou completamente a idéia de vincular MT5 e Kvik, estabelecendo-se apenas em Kvik (servidor DEE + trans2quik.dll)

Que pena. Qual é a razão desta decisão, existem obstáculos sérios no recebimento/transmissão de dados entre os dois programas?

 
Yuriy Asaulenko:

Presumo que a análise de todos os 52 instrumentos é feita em um só fluxo? Ou não é?

O que é usado como armazenamento? No meu caso, com acesso de múltiplos usuários, o travamento é desnecessário e a leitura não interfere na escrita.

A única coisa que precisa ser bloqueada é o acesso compartilhado da criança ao trans2quik. E somente no caso de um conjunto de fios Criança. Você pode fazer isso organizando o trans2quik em uma linha separada e chamá-lo no evento e simultaneamente bloquear o manipulador de eventos até que a solicitação seja finalizada. O resto não chegará a ele).

Não, a análise em si ocorre em Child (separadamente, para cada ferramenta) Selector(1,2) escolhe qual robô enviar os dados e colbedges

Armazenamento - apenas tabelas que são armazenadas na memória

 
Aleksey Vyazmikin:

É uma pena. Qual é a razão desta decisão, existe um sério obstáculo ao recebimento/transmissão de dados entre os dois programas?

Só não faz sentido fazer bagunça.

Usando o MT5 precisamos de um código no Expert Advisor e uma DLL, que receberá os dados.

Usando apenas Quick, temos apenas uma aplicação (ver figura com diagrama)

Razão: