Comandos para trabalhar com gráficos, gerenciamento de perfis, armazenamento de dados históricos e gráficos são coletados neste menu, bem como propriedades de impressão de gráficos. Os seguintes comandos estão disponíveis no menu: Novo gráfico 150 abre uma nova janela de gráfico para o símbolo. Na execução do comando, a lista de símbolos disponíveis será exibida. Tendo selecionado um símbolo da lista, pode-se abrir um novo gráfico. As mesmas ações podem ser executadas pelo botão da barra de ferramentas quotStandardquot. Abra o Offline 150 abra um gráfico de símbolos offline. Por este comando, um será capaz de selecionar um arquivo necessário com seus dados históricos sendo armazenados. Com isso, as novas cotações para este símbolo não serão mostradas no gráfico. A abertura de gráfico offline pode ser útil para testar consultores especializados. Abrir Excluído 150 restaura um gráfico excluído. Os gráficos excluídos serão restaurados se a opção "Salvar gráficos excluídos para reabrir" estiver ativada nas configurações do terminal. Todos os modelos de gráficos excluídos são armazenados no diretório / DELETED. Nesta execução de comando, esses modelos são chamados e o gráfico correspondente será aberto. Os perfis 150 abrem o submenu para gerenciar perfis. Os perfis podem ser armazenados ou excluídos deste submenu, assim como os armazenados anteriormente podem ser baixados. Esse submenu de gerenciamento de perfil também pode ser chamado pelo botão da barra de ferramentas quotStandardquot. Mais detalhes podem ser encontrados na seção "Perfis e modelos". Feche 150 e feche o gráfico atual. Salvar como 150 salva dados do histórico como um arquivo de texto no formato "CSV", "PRN" ou "HMI". Salvar como imagem. 150 salve o gráfico no formato "BMP" ou "GIFquot". Depois de pressionado, a janela contendo as alternativas de uma área de terminal a ser salva aparece: quotEspaço de trabalho ativo, "Gráfico ativo (como está)" e "Gráfico ativo" mostrando o tamanho específico. As mesmas ações podem ser executadas pelo comando do menu de contexto do gráfico com o mesmo nome. Abra a pasta lá o terminal do cliente armazena seus dados: histórico de preços, arquivos de configuração, programas MQL4, etc. Abra uma conta 150 abra uma nova conta de demonstração. Essas contas podem ser abertas sem a colocação de qualquer quantia no depósito e permitem testar bem o próprio sistema de negociação. Para abrir uma conta, também é possível executar o comando do menu de contexto com o mesmo nome da janela "Contas do Norton 150" ou pressionar o botão Inserir. Entrar para a conta comercial 150 autorizar. Nesta execução do comando, o terminal tenta se conectar ao servidor usando a conta selecionada. Após a autorização bem-sucedida, as cotações e as notícias começarão a gerar receita e você poderá começar a negociar. É possível autorizar a execução do comando quotLoginquot do menu de contexto da janela "ContasNavigator 150" ou clicar duas vezes no nome da conta. Faça o login no MQL5munity 150 abra as configurações da plataforma de negociação para acessar a MQL5munity e obter serviços adicionais. Configuração de impressão. 150 configuração geral dos parâmetros de impressão 150 dispositivo de impressão, tamanho e orientação da página, etc. Visualizar impressão 150 visualize o gráfico antes de imprimi-lo. As configurações da impressora selecionada são usadas para isso. Esse comando ajuda a visualizar antes de imprimir se todos os dados desejados podem ser impressos com as configurações fornecidas. As mesmas ações podem ser realizadas pressionando o botão da barra de ferramentas quotStandardquot ou executando o comando do menu de contexto do gráfico com o mesmo nome. Impressão. 150 imprimir um gráfico. Se a opção "Color Print" estiver habilitada nas configurações do programa. o gráfico pode ser impresso em cores, não como em preto e branco. As mesmas ações podem ser realizadas pressionando o botão da barra de ferramentas quotStandardquot. acelerando botões de CtrlP ou pela execução do comando do menu de contexto do gráfico quotPrintquot. Saia da 150 parada do terminal. Atenção: Se o terminal for desligado, os consultores especialistas e Trailing Stops não serão executados. A MetaQuotes Software Corp. é uma empresa de software e não fornece serviços de investimento ou de corretagem nos mercados financeiros. MetaTrader 4 - Exemplos Interação entre o MetaTrader 4 e o Matlab via arquivos CSV Introdução O poder computacional dos ambientes do Matlab é conhecido por ser consideravelmente superior ao de qualquer programação idioma incluindo MQL4. Ampla gama de funções matemáticas fornecidas pelo Matlab permite realizar cálculos complexos negligenciando completamente a base teórica das operações realizadas. No entanto, a interação em tempo real entre um terminal de negociação e o Matlab representa uma tarefa não trivial. Neste artigo, sugiro uma maneira de organizar a troca de dados entre o MetaTrader 4 e o Matlab por meio de arquivos CSV. 1. Interação Suponha que, na entrada de cada nova barra, o MetaTrader 4 envie dados sobre as últimas 100 barras para o Matlab e seja respondido com seus resultados de processamento. Para resolver esse problema, precisaremos criar um indicador no MetaTrader 4 que possa gravar dados em um arquivo de texto e ler os resultados do processamento de outro arquivo de texto criado pelo Matlab. O MetaTrader 4 deve formar seu arquivo de dados na entrada de cada nova barra. Deve tentar ler os resultados a cada tick também. Para não ler o resultado antes que o Matlab o atualize, teremos deletado o arquivo contendo o resultado antes de formarmos nosso arquivo de saída. Nesse caso, a tentativa de leitura só será bem sucedida depois que o Matlab concluir seu cálculo e formar um novo arquivo. O Matlab deve analisar os atributos de arquivo criados no MetaTrader 4 a cada segundo e iniciar o processamento quando o tempo de criação for alterado. Após o término do processamento, o arquivo excluído pelo MetaTrader 4 antes do início da gravação de dados é recriado. O MetaTrader 4 apaga-o com sucesso, carrega novos dados e aguarda responder. 2. Formando um arquivo de dados de saída Existem muitos artigos dedicados a salvar dados como arquivos, então não vou trabalhar o ponto aqui. Vou apenas deixar claro que escrevemos dados em 7 colunas: DATE, TIME, HI, LOW, CLOSE, OPEN, VOLUME. O caractere de separação é. A prioridade da barra é de anterior para posterior, isto é, a linha que contém as características da barra zero deve ser registrada na última. O arquivo será fornecido com uma linha contendo os nomes das colunas. O nome do arquivo consistirá no nome do símbolo e no período de tempo. Não precisaremos de todos esses dados, é claro, mas é sempre melhor ter um arquivo significativo do que apenas um conjunto de colunas com números desconhecidos. 3. Criação da interface gráfica do usuário (GUI) Assim, o arquivo está pronto. Vamos começar o Matlab. Devemos desenvolver um aplicativo que leia os dados de texto do arquivo, processe e grave os resultados em outro arquivo. Teremos que criar uma GUI para especificar o nome do arquivo, visualizar gráficos e iniciar o processamento. Vamos começar agora. Para criar a GUI, vamos iniciar o Guia Rápido do Guia, digitando o guia no console ou pressionando o painel principal do Matlab. Na caixa de diálogo exibida, selecione Criar nova GUI --gt GUI em branco (padrão). Agora podemos ver a interface para criar uma GUI com um formulário vazio. Neste formulário, colocaremos os seguintes objetos: Edit Text, Push Button, Static Text, Axes, Push Button. Como resultado, ele deve ser semelhante ao seguinte: Agora, devemos chamar o construtor de propriedades visuais de cada objeto e definir as propriedades da seguinte maneira: Texto estático. HorizontalAlignment à esquerda, Tag textInfo, String - Info. Editar texto: HorizontalAlignment left, Tag editPath, String Path select. Botão de pressão: tag pushBrowse, String Browse. Eixos: Caixa ligada, FontName MS Sans Serif, FontSize 8, Tag - axesChart. Botão de ação: tag pushSrart, String Start. Ao alterar a propriedade Tag, selecionamos um nome exclusivo para cada objeto. Ao alterar outras pessoas, modificamos a aparência. Quando tudo estiver pronto, vamos iniciar a interface pressionando Executar, confirme o arquivo da interface salvando e salvando o arquivo M, dê um nome (por exemplo, FromTo) e pressione Salvar. Depois disso, o GUI será lançado e aparecerá como aparece durante o seu trabalho. O Matlab gera o arquivo M para ser a base do nosso programa futuro e o abre no editor incorporado. Se a aparência não couber em você por algum motivo, feche a GUI de trabalho e corrija a organização do objeto usando o editor. Meu distributivo, por exemplo, não mostrava o MS Sans Serif corretamente. Então eu tive que mudar para Sans Serif. 4. Construção da interface do usuário O comportamento da interface pode ser programado no M-file Editor usando a linguagem Matlab. O esqueleto programa gerado pelo Matlab representa uma lista de funções a serem chamadas pelo usuário ao trabalhar com os objetos da interface. As funções estão vazias, então a GUI não faz nada ainda. É nossa tarefa preencher funções com o conteúdo necessário. 4.1 Programando o Botão Navegar Primeiro de tudo, precisamos acessar um arquivo gerado pelo MetaTrader 4, então vamos começar com a função chamada pressionando Navegar. O nome da função chamada pressionando o botão consiste no nome do botão (definido pela propriedade Tag) e no retorno de chamada postfix. Vamos encontrar a função pushBrowseCallback no texto do arquivo ou apenas pressionar Show Functions na barra de ferramentas e selecionar pushBrowseCallback na lista. A sintaxe da linguagem de programação Matlab difere das regras convencionais de codificação nas linguagens C e C. Particularmente, não há necessidade de marcar o corpo da função com chaves ou especificar o tipo de dados a serem passados para a função, os índices da matriz (vetor) começam com um, e o caractere de comentário é. Assim, todo o texto verde acima não é um programa, mas um comentário feito pelos desenvolvedores do Matlab para que possamos entender o caso. Vamos precisar criar um diálogo para inserir o nome completo do arquivo. Para isso, vamos usar a função uigetfile: handles here é uma estrutura que armazena os descritores de todos os objetos em nossa GUI, incluindo a do formulário, no qual os colocamos. A estrutura é passada de uma função para outra e permite acessar os objetos. hObject é um descritor do objeto que chamou a função. set ajuda a definir o valor do objeto para um determinado valor e possui a seguinte sintaxe: set (objectdescriptor, objectpropertyname, propertyvalue). Você pode encontrar o valor das propriedades do objeto usando a seguinte função: propertyvalue get (objectdescriptor, objectdescriptorname). Mas não se esqueça que o nome é um valor do tipo string, por isso deve estar entre aspas simples. A última coisa que precisamos saber sobre objetos e suas propriedades. A forma em que colocamos os elementos da GUI é, ela mesma, um objeto colocado no objeto raiz (é seu descendente). Também possui um conjunto de propriedades que podem ser modificadas. As propriedades podem ser visualizadas usando a ferramenta denominada Editor de Objeto a ser chamada na barra de ferramentas principal do editor de interface. A raiz do objeto, como o termo sugere, é a raiz da hierarquia de objetos gráficos e não possui ancestralidade. Agora vamos verificar o que temos como resultado. Vamos agora iniciar nossa GUI pressionando Run na barra de ferramentas principal do M-file Editor. Tente clicar em Browse e selecione nosso arquivo. Em seguida, feche a interface gráfica de trabalho e continue. 4.2 Programando o botão Iniciar, Desenho do Gráfico Agora vamos atribuir o botão Iniciar ao chamar a função que ler os dados do arquivo e mostrá-los em um gráfico. Primeiro, vamos criar a função em si. Vamos precisar da estrutura de identificadores de objetos como entradas. Tendo acesso a objetos, poderemos lê-los e definir suas propriedades. dlmread lê os dados do arquivo de texto com separadores e tem a seguinte sintaxe: dlmread (fullfilename, separador, skipstrings, skipcolumns) length (qqq) o tamanho maior da matriz qqq agora data e hora atuais datestr (agora) transforma data e hora em um text Você também deve saber que o Matlab fornece uma enorme ajuda com teorias e exemplos. Vamos colocar nossa função no final do programa (será mais fácil encontrá-la lá) e incluir sua chamada em pushStartCallback: Inicie usando Executar, selecione um arquivo, pressione Iniciar e aproveite o resultado. 4.3 Salvando o Caminho para um Arquivo Tudo está bem agora, mas é um pouco chato clicar permanentemente com o mouse selecionando um arquivo depois de ter pressionado Browse. Vamos tentar salvar o caminho depois de selecionado. Vamos começar com a leitura. O nome de um arquivo que armazena o caminho consistirá no nome da GUI e no postfix saveparam e terá a extensão. mat. A função FromToOpeningFcn é executada diretamente após o formulário da GUI ter sido criado. Nós vamos adicionar lá a tentativa de ler o caminho do arquivo. Se a tentativa falhar, o valor padrão será usado. Outras strings da função FromToOpeningFcn serão deixadas inalteradas. Vamos modificar a função pushBrowseCallback da seguinte forma: 4.4 Processamento de Dados Como um processo exemplar, vamos interpolar a coluna OPEN por uma função polinomial de quarta ordem. Vamos adicionar o seguinte código no final da nossa função, process: Vamos tentar iniciar e pressionar Start. Se você tiver aproximadamente o mesmo resultado mostrado acima, é hora de começar a salvar os dados como um arquivo. 4.5 Salvando Dados como um Arquivo Salvar dados não é mais complicado do que lê-los. O único detalhe é que o vector atualizado deve ser contado, isto é, do último para o primeiro. Isso é feito para simplificar a leitura do arquivo no MetaTrader 4, a partir da barra zero e até que o arquivo termine. Vamos complementar o processo de função pelo seguinte código: Agora, certifique-se de que o arquivo que contém o resultado foi criado, localizado no mesmo lugar onde está o arquivo inicial, e tenha o mesmo nome complementado pelo resultado do postfix. 4.6 Controle do Temporizador Esta é a parte mais difícil do trabalho. Teremos que criar um timer que verificaria o tempo de criação do arquivo formado pelo MetaTrader 4 a cada segundo. Se a hora mudar, o processo da função deve ser iniciado. O temporizador stop-start será executado usando Start. Quando a GUI abrir, excluiremos todos os timers criados anteriormente. Vamos criar um temporizador colocando o seguinte código dentro da função FromToOpeningFcn: O código acima deve ser inserido imediatamente após a nossa inserção anterior nesta função, ou seja, antes das alças de strings. output hObject e guidata (hObject, handles). Ao executar este código, o Matlab, imediatamente após a criação da GUI, verificará a disponibilidade dos timers, apagará os existentes e criará um novo temporizador. O temporizador chamará o tempo de verificação da função a cada segundo e passará a lista de descritores para ele. Além das alças, o cronômetro passará seu próprio descritor para a função, bem como a estrutura que contém o tempo e o motivo da chamada. Não podemos influenciá-lo, mas devemos considerar isso ao codificar a função a ser chamada pelo temporizador. Você pode localizar a função em si quando desejar. Deixe-se escrever na barra de status do Matlab a hora em que foi chamado: Na sua criação, o temporizador está parado, agora devemos lançá-lo. Vamos encontrar a função pushStartCallback. Vamos comentar o processo de chamada (handles) colocado nele e escrever o gerenciamento de timer nele: Agora vamos verificar como tudo funciona. Vamos tentar ativar e desativar o timer usando Iniciar. Se o temporizador estiver ativado, o relógio acima do campo de entrada do caminho deve funcionar. Seria mais correto excluir o timer usando o botão X no fechamento da GUI. Se você quiser fazer isso, adicione no início da função figure1CloseRequestFcn. Esta função será chamada no fechamento da GUI. Você pode acessá-lo a partir do editor da GUI: Mas, por favor, leve em consideração que agora, se você pressionar Run do editor sem ter fechado a GUI operacional, o timer antigo não será apagado enquanto o novo será criado. E da próxima vez haverá mais um criado, etc. Você pode lidar com temporizadores instáveis usando o comando delete (timerfind) do console do Matlab. Agora, se tudo estiver funcionando bem, criaremos uma função para verificar a hora da última modificação do arquivo do MetaTrader 4: A função dir (fullfilename) retorna uma estrutura que contém as informações do arquivo (nome, data, bytes, isdir). As informações sobre o horário de criação do arquivo anterior serão armazenadas na propriedade Userdata do objeto de timer. Seu descritor é passado para a função checktime nomeada como obj. Agora, ao alterar um arquivo criado pelo MetaTrader 4, nosso programa sobrescreverá o resultado. Você pode verificar isso modificando o arquivo manualmente (por exemplo, excluindo as últimas strings) e controlando as alterações no gráfico ou arquivo resultante. Claro, o botão Iniciar deve ser pressionado para isso. Se uma janela extra contendo a cópia do gráfico for criada durante a operação dos programas, inclua a seguinte string no início do processo da função: 5. Desenhando os Resultados no MetaTrader 4 Agora vamos retornar ao MetaTrader 4. Temos que complementar nosso indicador com um função que iria ler o resultado do arquivo e desenhá-lo em um gráfico. O comportamento do programa será descrito da seguinte forma: 1. Se uma nova barra for recebida: Exclua o arquivo de resultado antigo, Apague o gráfico, Salve o arquivo de dados. 2. Se o arquivo de resultado for legível: Leia o arquivo, Desenhe um gráfico, Exclua o arquivo de resultado. Não vou descrever aqui como funciona o código abaixo, pois a leitura de dados de arquivos e indicadores de desenho pode ser encontrada em outros artigos. Eu só percebo que o arquivo de resultado aqui é excluído imediatamente depois de ter sido colocado no gráfico. Portanto, não se preocupe se você vir várias mensagens de erro lidas. Os erros de leitura ocorrem em dois casos: 1. Imediatamente após uma nova barra ter renda, uma vez que o arquivo de resultado ainda não foi criado. 2. Imediatamente após o resultado ter sido lido e o gráfico ter sido desenhado, uma vez que o arquivo foi excluído para não reler os mesmos dados. Assim, o programa mantém seu status de erro de leitura praticamente o tempo todo. ) Abaixo está o meu resultado final. Espero não ter cometido erros e você será capaz de reproduzi-lo. Conclusão Neste artigo, descrevemos a maneira de organizar uma interação entre o MetaTrader 4 e o Matlab por meio de arquivos CSV. Este método não é único nem ideal. O valor dessa abordagem é que ela ajuda a trocar arrays de dados sem habilidades especiais de operar com qualquer outra ferramenta de programação além do MetaTrader 4 e do Matlab. Isso parece um thread antigo, mas eu só queria lançar isso para o que vale a pena. Há várias coisas que me preocupam aqui. seu primeiro comando no script: deve abrir o arquivo para gravação. se não existir, irá criá-lo. Portanto, se o arquivo não estiver em qualquer lugar, ele não será criado. conforme indicado pelo user3666197. Certifique-se de que está executando o MT4 como administrador. você pode querer incluir um loop ao recuperar qualquer dado com o prefixo i. eu fecho. eu abro. iHigh. iLow - porque todos os dados que você está solicitando podem não estar disponíveis. O MT4 precisará extrair do servidor, caso em que o número de barras retornadas será 0. iClose () Valor retornado Fecha o valor do preço para a barra do símbolo especificado com timeframe e shift. Se o histórico local estiver vazio (não carregado), a função retornará 0. Para verificar erros, é preciso chamar a função GetLastError (). Então, se você encontrou o arquivo e ele está sendo criado, mas nenhuma barra ou apenas algumas barras estão sendo salvas, este seria o motivo. Apenas pensei em jogar isso ali, para o caso de se tornar um problema para você na estrada.
No comments:
Post a Comment