Características da linguagem mql5, subtilezas e técnicas - página 203

 
Comentários não relacionados com este tópico foram movidos para"Quaisquer perguntas de novatos sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos".
 

Estamos a alargar as sequências inicializadoras "{ ... }", na próxima construção será permitida qualquer expressão, e não apenas uma constante.

Em vez desta alteração, haverá uma restrição ao uso de constantes para enumerações (como para uma expressão regular): se uma constante não fizer parte de um enumero, será gerado um erro apropriado.

A análise dos códigos existentes mostrou que a sequência única zero "{0}" é frequentemente utilizada incorrectamente.

Por exemplo, como este:

MqlTradeRequest request={0};


Tal notação significa fixar o valor de zero para o primeiro campo da estrutura e zero para o resto dos campos.

Para a linha de código acima, de acordo com as novas regras, haverá um erro uma vez que o primeiro campo tem o tipo ENUM_TRADE_REQUEST_ACTIONS, uma enumeração que não tem o valor "0".

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


O caminho correcto seria o seguinte:

MqlTradeRequest request={};
 
Ilyas:

Isto é correcto:

MqlTradeRequest request={};

E então a que é que o request.action seria igual?

 
mktr8591:

E então a que é que o request.action seria igual?

Zero, claro, como se a ZeroMemória fosse chamada para o objecto desta estrutura

 

Como é que acompanho as séries cronológicas e os indicadores baseados nelas?

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

Insectos, insectos, perguntas

Slava, 2021.05.29 18:16

Gostaria de vos lembrar.

1. Para cada símbolo, para o qual pelo menos um gráfico está aberto, um fio separado está a trabalhar para processar as carraças de entrada. Vários gráficos podem estar abertos para algum símbolo, mas ainda haverá apenas um fio.

2. O fio símbolo não processa gráficos, mas sim séries cronológicas. Ou seja, as mesmas matrizes de dados, que são submetidas ao pedido do CopyRates.

3. é inútil perguntar ao seu símbolo em OnTick ou OnCalculate, se ele está sincronizado. Claro que é!

4. Todas as séries temporais são tratadas em ordem, do mais baixo ao mais alto. Em primeiro lugar, é aplicado o tick, e depois o cálculo de todos os indicadores, criados nesta série temporal. Se pedir dados para o mesmo símbolo H1 ao indicador, trabalhando no M1, nunca obterá dados com o carrapato aplicado. Os dados serão sempre um tique de volta, independentemente dos truques que aplicar. Porque um fio por símbolo com processamento consecutivo no tempo.

5. A declaração anterior não se aplica a EAs e guiões, porque cada EAs e guiões funcionam nos seus próprios fios separados.


 
Andrey Khatimlianskii:

Como é que acompanho as séries cronológicas e os indicadores baseados nelas?

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

Insectos, insectos, perguntas

Slava, 2021.06.01 06:34

Quando solicita pela primeira vez, o indicador pode não receber dados do seu símbolo, mas outro período de tempo apenas por uma razão - as séries de tempos requeridas ainda não foram construídas ou já foram destruídas após algum tempo, quando não houve pedidos.

Após um pedido sem sucesso, basta enviar um comando para o seu gráfico para o actualizar e terminar o OnCalculate imediatamente. É garantido que a OnCalculate será chamada e as séries de tempos estarão prontas por esta altura

 

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Características da linguagem mql5, subtilezas e truques

fxsaber, 2017.11.30 09:48

Memo

Acção/tipo de programa Mudança de TF ou símbolo Alteração de conta
Indicador Run OnDeinit e OnInit, alterações globais de objectos de classe (reset completo). Nada acontece excepto que o calculado_previamente é reiniciado.
EA Run OnDeinit e OnInit, objecto de classe global não muda. Executar OnDeinit e OnInit, alterações globais de objectos de classe (recarga completa).
O comportamento destacado dos indicadores mudou. É agora o mesmo que a EA.
 
fxsaber:
O comportamento do indicador destacado mudou. Agora coincide com a EA.

A questão é diferente - poderia ser uma omissão em vez de uma mudança deliberada de comportamento? Descobriu?

 
Artyom Trishkin:

A questão é diferente - poderia ser uma omissão em vez de uma mudança deliberada de comportamento? Reconheceu-o?

Não o fiz. O feedback é quase inexistente. No entanto, aqui está uma característica que acabei de descobrir.

const bool Init = EventSetMillisecondTimer(1);
const long Account = AccountInfoInteger(ACCOUNT_LOGIN);

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnTimer()
{
  if (Account != AccountInfoInteger(ACCOUNT_LOGIN))
    Alert(TOSTRING(Account) + TOSTRING(AccountInfoInteger(ACCOUNT_LOGIN)));
}

Este Conselheiro Especialista alerta quando se alterna entre contas. Parece que não o deveria fazer de acordo com a regra.

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

Características da linguagem mql5, subtilezas e truques

fxsaber, 2017.11.30 09:48

Memo

Acção/tipo de programa Mudança de TF ou símbolo Alteração de conta
Indicador Run OnDeinit e OnInit, alterações globais de objectos de classe (full reset). Nada acontece excepto que o calculado_previamente é reiniciado.
EA Run OnDeinit e OnInit, objecto de classe global não muda. Executar OnDeinit e OnInit, alterações globais de objectos de classe (recarga completa).
No entanto, isto deve-se ao temporizador.
 
fxsaber:

Este conselheiro alerta quando se muda de conta. Parece que não o deveria fazer, de acordo com a regra

No entanto, isto acontece por causa do temporizador.

Ninguém garantiu que os outros manipuladores de eventos serão interrompidos (ou não correrão).

Após o alerta, tanto o deinit como o init acontecem, certo?

Razão: