Perguntas de um "boneco" - página 75

 
kirill-demo:
Criei o meu Conselheiro Especialista em Feiticeiro. Não conheço muito bem o mql. Poderia explicar-me o que fazer com o exemplo dos envelopes?

A classe CSignalEnvelopes não tem tal modelo de mercado.

Conclusão: Precisamos de melhorar a turma (ou escrever a nossa própria turma).

 
Qual é a diferença entre a chamada de função de dll em MT4 e MT5? Compilo dll, funciona bem em MT5, mas em MT4 dá-me erro:

2011.10.06 23:00:34 Solaris executor EURUSDm,M1: não pode chamar a função 'InfoOfTrading' da dll 'Solaris.dll' (erro 127)

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 
joo:
Qual é a diferença entre chamar funções do dll em MT4 e MT5? Compilo um dll, funciona bem em MT5, mas em MT4 gera um erro:

2011.10.06 23:00:34 Solaris executor EURUSDm,M1: não pode chamar a função 'InfoOfTrading' da dll 'Solaris.dll' (erro 127)

Dê-me uma descrição do protótipo de função, por favor. Muito provavelmente utilizou o design _stdcall para MT5.

MT5 tem um mecanismo mais flexível para ligar nomes de funções DLL - suporta automaticamente tanto _stdcall (mais avançado com decoração de nomes) como _cdecl (método clássico antigo). O MetaTrader 4 apenas suporta chamadas _cdecl.

Já leu o artigo"Como escrever uma DLL para MQL5 e partilhar dados em 10 minutos?"Explica em detalhe como chamar funções DLL.

 
Renat:

Forneça uma descrição do protótipo de função, por favor. Muito provavelmente para MT5 utilizou o design _stdcall.

MT5 tem um mecanismo mais flexível para ligar nomes de funções DLL - suporta automaticamente tanto _stdcall (mais avançado com decoração de nomes) como _cdecl (método clássico antigo). O MetaTrader 4 apenas suporta chamadas _cdecl.

Leia o artigo"Como escrever uma DLL para MQL5 e trocar dados em 10 minutos?" - há uma descrição detalhada das chamadas de funções DLL.

Tentou declará-lo dessa forma:

_DLLAPI void _cdecl InfoOfTrading(int &ou_ParamCountALl, int &ou_BarsRequired)

E assim:

_DLLAPI void InfoOfTrading(int &ou_ParamCountALl, int &ou_BarsRequired)

em vez do antigo:

_DLLAPI void __stdcall InfoOfTrading(int &ou_ParamCountALl, int &ou_BarsRequired)

Mas agora um erro diferente:

2011.10.07 01:35:05 Solaris executor EURUSDm,M1: função 'InfoOfTrading' chamada da dll 'Solaris.dll' erro crítico


Eu li o artigo.


Nas definições do projecto especificou explicitamente a forma de chamada:


E em MT5 ainda funciona sem erros.

 
tol64:
Em geral, os sinais são descritos na Ajuda exactamente da forma como precisa deles. Pode vê-lo aqui. A imagem mostra as definições do indicador CCI. Portanto, muito provavelmente, o seu Conselheiro Especialista não se baseará apenas nos sinais do indicador Envelopes. Existe também a CCI.

Certo, peço desculpa por isso. Afixei a fotografia errada. Mas isso não muda a questão. Aqui está uma fotografia da EA apenas em envelopes.

O que é que faço? Como é que o arranjo?

 

A propósito, no exemplo surs da entrega padrão MT4 a chamada é feita via __stdcall:

MT4_EXPFUNC double __stdcall GetDoubleValue(const double dpar)
  {
   printf("GetDoubleValue takes %.8lf\n",dpar);
   return(dpar);
  }

e funciona bem.

 
Alguém me explique!!!
 
joo:

A propósito, no exemplo surs da entrega padrão MT4 a chamada via __stdcall:

e funciona bem.


No exemplo do MT4:

#define MT4_EXPFUNC __declspec(dllexport)

MT4_EXPFUNC char* __stdcall GetStringValue(char *spar)

и имена экспортируемых функций явно описываются через *.def файл:

LIBRARY ExpertSample

EXPORTS GetIntValue
        GetDoubleValue
        GetStringValue
        GetArrayItemValue
        SetArrayItemValue
        GetRatesItemValue
        SortStringArray
        ProcessStringArray


stdcall parece ser apoiada. Não tenho a certeza se é correcto descrever parâmetros que passam via & para quatro.
Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Renat:

O exemplo do MT4:

#define MT4_EXPFUNC __declspec(dllexport)

MT4_EXPFUNC char* __stdcall GetStringValue(char *spar)

и имена экспортируемых функций явно описываются через *.def файл:

LIBRARY ExpertSample

EXPORTS GetIntValue
        GetDoubleValue
        GetStringValue
        GetArrayItemValue
        SetArrayItemValue
        GetRatesItemValue
        SortStringArray
        ProcessStringArray


stdcall acaba por ser apoiada. Não tenho a certeza se é correcto descrever o parâmetro que passa por & para os quatro.

Estou completamente desaprendido em dois anos com 4. :)

1. verifica-se que uma variável passada por referência não pode ser escrita numa dll. Para tal, é necessário utilizar uma matriz.

2. e é obrigatório o uso do ficheiro *.def.

Na verdade, aqui estão 2 diferenças de trabalho com as dlls de 4 e 5 que descobri, pode haver mais.

 
Pessoal, desculpem se este tipo de pergunta já é irritante, podem dizer-me como preencher correctamente os parâmetros>página de correio? Tenho correio no mail.ru, vai funcionar? Não sei qual é a morada do servidor ali ... se não for adequada, onde registar um adequado? Quero fazer notificações por e-mail...
Razão: