Erros, bugs, perguntas - página 3079

 
O screenshot não está a carregar no mercado. Experimentei-o a partir de dois navegadores.
 
Dmitry Fedoseev #:
O mercado não carrega uma imagem de ecrã. Experimentado a partir de dois navegadores.

Eu também...

 

Boa tarde, qual poderá ser o problema? Utilizo dll para escrever no SQL Server (exemplo do artigo https://www.mql5.com/ru/articles/2895 ).

Se eu utilizar até 5 fios, os dados são escritos correctamente. Se eu usar mais fios, haverá um erro "Unhandled exception 0xE0434352".

Интеграция эксперта на MQL и базы данных (SQL Server, .NET и C#)
Интеграция эксперта на MQL и базы данных (SQL Server, .NET и C#)
  • www.mql5.com
Статья описывает, как добавить в экспертов на MQL5 возможность работы с сервером баз данных Microsoft SQL Server. Используется импорт функций из DLL. Для создания DLL применяется платформа Microsoft .NET и язык C#. Используемые в статье методы с незначительными изменениями подходят и для экспертов, написанных на MQL4.
Arquivos anexados:
SQL.mqh  19 kb
OHLC_1.mq5  5 kb
 
SEM #:

Boa tarde, qual poderá ser o problema? Utilizo dll para escrever no SQL Server (exemplo do artigo https://www.mql5.com/ru/articles/2895 ).

Se eu utilizar até 5 fios, os dados são escritos correctamente. Se eu usar mais erros de linha "Excepção sem fios 0xE0434352" ocorre.

Em todas as funções da DLL da interface devemos tentar apanhar, apanhar a "excepção não movimentada" e escrevê-la no registo...

É uma boa ideia apanhar todas as excepções e tentar todas as chamadas para as vantagens. Mesmo na documentação MQL está claramente escrito - DLL's não devem lançar excepções, não C+++.

em particular no artigo conn.Close e novo SqlConnection não se enquadram na "captura de excepções" e podem potencialmente lançar excepções

 
Dmitry Fedoseev #:
O screenshot não está a carregar no Mercado. Experimentei-o com dois navegadores.
Yury Emeliyanov #:

Eu também...

Já tentou um simples arrastar e largar da imagem?

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

Mercado e Matemática

Alexey Viktorov, 2021.08.19 21:01

Tente inserir uma imagem simplesmente arrastando-a e largando-a sobre o texto.

Agora tentei fazer alterações no Expert Advisor escondido e arrastei a primeira imagem que vi.



 
Alexey Viktorov #:

Já tentou um simples arrastar e largar da imagem?


de 5 fotografias, apenas uma é adicionada

 
Andrei Trukhanovich #:

É o caso há muito tempo. cordas mql não gostam realmente de caracteres nulos dentro de uma corda e, literalmente, também em funções.

A única forma normal é converter três cordas para uma matriz com um zero terminal.

Isto é, este comportamento, tal como é agora, foi feito deliberadamente há alguns anos atrás. Não conheço as razões.

Há inimigos em todo o lado

 
Maxim Kuznetsov #:

Em todas as funções DLL da interface, embrulhe tudo na tentativa de apanhar, apanhe a "excepção sem soltar" e registe-a...

É uma boa ideia apanhar todas as excepções e embrulhar todas as chamadas para as vantagens na tentativa. Mesmo na documentação MQL está claramente escrito - DLL's não devem lançar excepções, não C+++.

particularmente a SqlConnection, em particular a Conn.Close e a nova SqlConnection não lançam excepções e podem potencialmente lançar uma

Obrigado! Verifiquei-o, erro de acesso variável partilhado. O autor também escreveu sobre o assunto.

Deve notar-se que o projecto de demonstração tem uma limitação muito significativa: permite executar apenas um Expert Advisor a trabalhar com a DB num único terminal MetaTrader. A questão é que todos os EAs utilizam uma instância de uma DLL carregada. Uma vez que a nossa classe é feita estática, será a mesma para todos os Expert Advisors em funcionamento. As variáveis também serão comuns. Se vários peritos tentarem aceder a estes objectos ao mesmo tempo, poderão ocorrer problemas.


P: Como posso implementar o acesso multithreaded à dll (exemplo separado para cada chamada de função e variáveis locais para cada chamada)?

 
2020.08.17 01:22:44   9842:0.8953065>0.92137
2020.08.17 01:22:44   9843:0.8953065>0.92106
2020.08.17 01:22:44   9844:0.8953065>0.92075
2020.08.17 01:22:44   9845:0.8953065>0.92045
2020.08.17 01:22:44   9846:0.8953065>0.92014
2020.08.17 01:22:44   9847:0.8953065>0.91983
        

2020.08.17 01:22:48   9842:0.8953065>0.92137
2020.08.17 01:22:48   9843:0.8953065>0.92106
2020.08.17 01:22:48   9844:1.7189865>0.92075
2020.08.17 01:22:48   Create GlobalVariables for SELL 1.7189865>0.92075
2020.08.17 01:22:48   9845:0.8953065>0.92045
2020.08.17 01:22:48   9846:0.8953065>0.92014
2020.08.17 01:22:48   9847:0.8953065>0.91983

Estou a experimentar este problema no testador do MT5.

Trabalhando com várias moedas, os dados são ocasionalmente trocados a partir de outra moeda. Verifique o testador. Por favor, corrijam-na.

O primeiro valor éSymbolInfoDouble(símbolo,SYMBOL_BID);

2020.08.17 01:11:38   9877(EURGBP):0.8952471000000001>0.91079
2020.08.17 01:11:38   9878(EURGBP):0.8952471000000001>0.91048
2020.08.17 01:11:38   9879(EURGBP):0.8952471000000001>0.91017
2020.08.17 01:11:38   9880(EURGBP):1.7184123>0.90987
2020.08.17 01:11:38   Create GlobalVariables for SELL 1.7184123>0.90987
2020.08.17 01:11:38   9881(EURGBP):0.8952471000000001>0.90956
2020.08.17 01:11:38   9882(EURGBP):0.8952471000000001>0.90925
2020.08.17 01:11:38   9883(EURGBP):0.8952471000000001>0.90894
2020.08.17 01:11:38   9884(EURGBP):0.8952471000000001>0.90864

Como se não pudesse receber preçosSymbolInfoDouble(EURGBP,SYMBOL_BID); e retira valor de outro par que está a trabalhar. Há alguma forma de verificar se a cotação está correcta?

 
SEM #:

Obrigado! Verifiquei-o, erro de acesso variável partilhado. O autor também escreveu sobre o assunto

Note-se que o projecto de demonstração tem uma limitação muito significativa: permite executar apenas um Expert Advisor a trabalhar com a DB num terminal MetaTrader. A questão é que todos os EAs utilizam uma instância de uma DLL carregada. Uma vez que a nossa classe é feita estática, será a mesma para todos os Expert Advisors em funcionamento. As variáveis também serão comuns. Se lançar vários peritos, todos eles utilizarão a mesma ligação e um objecto de comando para todos. Se vários peritos tentarem aceder a estes objectos de uma só vez, poderão ocorrer problemas.


P: Como posso implementar o acesso multithreaded à dll (exemplo separado para cada chamada de função e variáveis locais para cada chamada)?

Não há quase nenhuma maneira de o fazer em .NET. A classe é tornada estática não porque o autor do artigo é mau, mas porque é assim que as classes afiadas são importadas.

Vejo duas formas: 1) (muito tempo para escrever, funciona rápido) reescrever em C++ e não tocar mais em .NET 2) (bastante mecanicamente, mas a velocidade diminuirá e poderá haver efeitos secundários) embrulhar cuidadosamente as chamadas na Secção Crítica para evitar o acesso simultâneo a dois fios

se a sharping é importante, outra opção - reescrever os pools de ligação de controlo a nível DLL para lembrar o mapeamento da EA<->connection_id e cada EA trabalha com a sua ligação;
Não posso dizer sobre .net - é possível obter e armazenar referência a objectos sharping em alguma estrutura MQL ou escalar e passá-los para trás e para a frente. Isto é, operar como com um ponteiro C++ normal. Se for possível, então tudo é simplificado.