Sunday 23 July 2017

Stline Forex


O Oscilador SCE O Oscilador SCE (Statistical Cumulative Energy) é baseado em cálculos de parâmetros estatísticos de séries temporais de parâmetros de entrada. Duas médias móveis são usadas para entrada no mercado. Nas configurações de parâmetros (Fig. 1), os usuários podem especificar a aparência de cada média móvel, bem como o período de suavização e o tipo de preço utilizado para o cálculo. O parâmetro adicional (ArrowShow) exibe as setas mostrando a direção atual das linhas do indicador e do tempo do servidor. As construções gráficas do indicador são exibidas como linhas cumulativas (quebradas). Essa representação torna as reversões e os valores extremos mais visíveis, uma vez que os topos das linhas cumulativas são formados pelo cruzamento das duas linhas orientadas de forma oposta. As linhas cumulativas suavizam as flutuações insignificantes. Se a linha estiver localizada na borda superior ou inferior do seu alcance, significa que a tendência continua na direção apropriada. O indicador SCE usa cinco construções gráficas calculadas como valores cumulativos do desvio quadrático médio dos seguintes parâmetros: estocástico - oscilador estocástico (calculado com base nos dados do indicador estocástico) Previsão - previsão de preços (calculada por buffers aberto, alto, baixo e fechado) MA rápido - Média móvel rápida (definida pelos parâmetros de entrada) MA lenta - média lenta (definida pelos parâmetros de entrada) Média - Previsão, Fast MA e média lenta de buffer MA. A construção gráfica do sexto sexto é uma relação de correlação dos dados de cálculo de buffers médios. A construção gráfica da sétima Trend é calculada como a média ponderada normalizada de todos os buffers de linhas cumulativas usando a seguinte equação: Trend10 (StLinei102FcLinei102FsLinei11AvgLinei12SlLinei13) 7 A construção oitava Energy gráfica é a energia Linha calculada como energia cinética em física: E (mv2) 2, onde m - tick volumes v - taxa de mudança de preço (ROC). Uma vez que as médias móveis servem como dados de entrada para o indicador SCE, seria melhor configurar a janela dos gráficos principais de acordo com os parâmetros SCE. Assim, recebemos o sistema de negociação ajustado consistindo em um indicador de indicadores de tendência (ver Fig. 2). ZigZagFT está disponível gratuitamente no mercado. Adicionado a possibilidade de desenhar as linhas de tendência de emissão, média e rápida como histogramas. Ao negociar ativamente em pequenos quadros de tempo, essa visão de indicador permite se concentrar em linhas rápidas, como Energia, Previsão e Correlação. Você pode alternar usando o parâmetro DrawHistogram. 1. Mudou o algoritmo de cálculo do espectro de cores do histograma da tendência geral. Agora, o espectro está em conformidade com as cores do arco-íris, o que torna a mudança de uma tendência mais lisa. 2. Corrigido o erro de cálculo da última barra da linha de energia. 3. Corrigiu o aviso sobre objetos deixados após a desinitialização. Baixar MetaTrader 5 Copyright 2000-2017, MQL5 Ltd. MetaTrader 4 - Exemplos Walkthrough HTML usando o MQL4 Introdução O HTML (Hypertext Mark-Up Language) foi criado para formatar materiais textuais convenientes. Todos os documentos deste tipo são formatados com palavras de função especiais chamadas tags. Praticamente todas as informações em arquivos html acabam sendo incluídas nas tags. Se quisermos extrair dados puros, temos que separar as informações do serviço (tags) dos dados relevantes. Nós chamaremos esse procedimento passo a passo HTML para selecionar a estrutura da tag. O que é Tag Em termos de uma descrição simples, tag é qualquer palavra entre colchetes angulares. Por exemplo, esta é uma tag: lttaggt, embora, em HTML, as tags sejam certas palavras digitadas em letras latinas. Por exemplo, lthtmlgt é uma marca correta, mas não há tag lthtml2gt. Além disso, muitas tags podem ter atributos adicionais que a formatação precisa realizada pela marca dada. Por exemplo, lt div align center gt significa tag ltdivgt em que o atributo adicional do alinhamento central do conteúdo da etiqueta é especificado. As tags geralmente são utilizadas em pares: há tags de abertura e fechamento. Eles diferem um do outro apenas com a presença de barra. Tag ltdivgt é uma tag de abertura, enquanto tag ltdivgt é um fechamento. Todos os dados entre as tags de abertura e de fechamento são designados como conteúdo de tag. É este conteúdo que nos interessa no passo a passo do código HTML. Exemplo: Tag lttdgt contém 6 aqui. O que significa Walkthrough do texto No contexto deste artigo, significa que queremos obter todas as palavras ocorridas em um arquivo html e incluídas em dois ângulos: lt e gt - abertura e fechamento. Não analisaremos aqui se cada palavra nestes suportes é uma marca correta ou não. Nossa tarefa é puramente técnica. Vamos escrever todas as marcas consecutivas encontradas em um conjunto de seqüências de caracteres em uma base de primeiro retorno. Nós chamaremos essa estrutura de tag da matriz. Função de leitura de arquivos Antes de analisar um arquivo de texto, é melhor carregá-lo em uma matriz de seqüência de caracteres. Assim, abriremos e fechamos imediatamente o arquivo para não esquecer de fechar o arquivo por engano. Além disso, uma função definida pelo usuário que lê o texto de um arquivo em uma matriz é muito mais conveniente para várias aplicações do que escrever cada vez que o procedimento completo de leitura de dados com uma verificação obrigatória de possíveis erros. Function ReadFileToArray () tem três parâmetros: string array - uma matriz de string passada por um link, permite alterar seu tamanho e conteúdo diretamente na seqüência de função FileName - nome do arquivo as linhas a partir das quais devem ser lidas em matriz de matriz WorkFolderName - nome da subpasta No diretório Terminaldirectoryexpertsfiles. O tamanho da matriz de string auxiliar é de 64000 elementos. Os arquivos de um grande número de linhas devem não ocorrer com muita frequência. No entanto, você pode alterar esse parâmetro conforme desejar. StringCounter variável conta o número de linhas lidas do arquivo em matriz de matrizes auxiliares, então as linhas de leitura são escritas em matriz cujo tamanho é definido preliminarmente como igual a stringCounter. Em caso de erro, o programa exibirá uma mensagem nos registros de EAs, que você pode ver na guia de especialistas. Se a matriz foi preenchida com sucesso, a função ReadFileToArray () retorna true. Caso contrário, ele retorna falso. Ajuda Função FindInArray () Antes de começar a processar o conteúdo da matriz de cadeias na nossa pesquisa de tags, devemos dividir a tarefa geral em várias subtarefas menores. Existem várias soluções para a tarefa de detectar a estrutura da etiqueta. Agora vamos considerar um específico. Vamos criar uma função que nos informe em que linha e em que posição nesta linha a palavra procurada é colocada. Passaremos a esta função a matriz de cadeias e a variável de string que contém a palavra que estamos procurando. A função FindInArray () retorna as coordenadas de matchedText usando variáveis ​​inteiras passadas pelo link. ReturnLineNumber variável contém o número da linha, enquanto returnPosIndex contém o número da posição nesta linha. FIG. 1. Procure a posição inicial do texto na matriz de seqüências de caracteres. A pesquisa não é realizada em toda a matriz, mas começa a partir do número da linha inputLine e do inputPos do número da posição. Estas são coordenadas de busca iniciais na matriz. Se a palavra de pesquisa não for encontrada, as variáveis ​​de retorno (returnLineNumber e returnPosIndex) conterão o valor de -1 (menos um). Obtendo uma linha por suas coordenadas inicial e final a partir de uma matriz de seqüência Se tivermos as coordenadas inicial e final de uma etiqueta, precisamos obter e escrever em cadeia todos os caracteres localizados entre os dois suportes angulares. Usaremos a função getTagFromArray () para isso. Nesta função, procuramos consecutivamente em todas as linhas localizadas dentro das coordenadas da abertura e dos ângulos de fechamento com a participação das coordenadas espaciais. A operação da função resulta em obter a expressão de lttagnamegt, que pode ser montada de várias linhas. FIG. 2. Criação de uma variável de string da matriz de string usando as posições inicial e final. Obtendo estrutura de tags Agora temos duas funções auxiliares, então podemos começar a procurar tags. Para isso, procuraremos consecutivamente lt, gt e (espaço) com a função FindInArray (). Para ser mais exato, procuraremos as posições desses caracteres na matriz de cordas e, em seguida, montaremos os nomes das tags encontradas usando a função getTagFromArray (), e as colocamos em uma matriz contendo a estrutura da etiqueta. Como você pode ver, a tecnologia é muito simples. Este algoritmo é realizado na função FillTagStructure (). Observe que, no caso de encontrar uma marca bem sucedida, o tamanho da matriz que representa a estrutura da tag aumenta em um, uma nova tag é adicionada e, em seguida, a função chama-se recursivamente. FIG. 3. Um exemplo de função recursiva: Function FillTagStructure () está chamando para si mesmo. Este método de funções de escrita para cálculos consecutivos é muito atraente e muitas vezes melhora um lote de programadores. Com base nessas funções, o script TagFromHTML. mq4 foi desenvolvido para pesquisar tags no relatório do testador, StrategyTester. html e exibe todas as tags encontradas no log. FIG. 4. Resultado das operações do script TagsFromHTML. mq4: o número da etiqueta e a própria tag são exibidos. Como você pode ver, um relatório de teste pode conter algumas milhares de tags. Na Fig. 4, você pode ver que a última tag encontrada, lthtmlgt, tem o número de 6194. É impossível pesquisar na quantidade de tags manualmente. Obter conteúdo encerrado nas tags A pesquisa de tags é uma tarefa associada, a tarefa principal é obter a informação envolvida nas tags. Se visualizarmos o conteúdo do arquivo StartegyTester. html usando um editor de texto, por exemplo, o Bloco de Notas, podemos ver que os dados do relatório estão localizados entre as tags lttablegt e lttablegt. A tabela de tags serve para formatar dados tabulares e geralmente inclui muitas linhas colocadas entre as tags lttrgt e lttrgt. Por sua vez, cada linha contém células que estão incluídas nas tags lttdgt e lttdgt. Nosso objetivo é encontrar os valiosos conteúdos entre tags lttdgt e coletar esses dados em strings formatados para nossas necessidades. Antes de tudo, vamos fazer algumas modificações na função FillTagStructure () para que possamos armazenar a estrutura da tag e as informações sobre as posições do tag startend. FIG. 5. Junto com a própria etiqueta, suas posições de início e final na matriz de cadeias são escritas nas matrizes correspondentes. Conhecendo o nome da etiqueta e as coordenadas de cada tag, comece e termine, podemos facilmente obter o conteúdo localizado entre duas tags consecutivas. Para isso, vamos escrever outra função, GetContent (), que é muito semelhante à função getTagFromArray (). Agora, podemos processar o conteúdo das tags de qualquer maneira conveniente para nós. Você pode ver um exemplo de tal processamento no script ReportHTMLtoCSV. mq4. Abaixo está a função start () do script: Na Fig. 6, você pode ver como um arquivo de log aparece contendo as mensagens desse script e aberto com o Microsoft Excel. FIG. 6. Arquivo de log da pasta MetaTrader 4expertslogs contendo os resultados da operação do script ReportHTMLtoCSV. mq4, aberto com Micrisoft Excel. Na Fig. 6 acima, você pode ver a estrutura conhecida do relatório de teste MetaTrader 4. Defeitos deste script Existem vários tipos de erros de programação. Erros de primeiro tipo (erros de sintaxe) são fáceis de detectar na fase de compilação. Os erros do segundo tipo são algorítmicos. O código do programa é compilado com sucesso, mas pode acontecer situações imprevistas no algoritmo, o que resulta em padrões de erro no programa ou mesmo em seu acidente. Esses erros não são tão fáceis de detectar, mas ainda assim possíveis. Finalmente, pode haver erros de terceiro tipo, os conceituais. Tais erros ocorrem se o algoritmo do programa, apesar de estar escrito corretamente, não estiver pronto para usar o programa em condições diferentes. O Script ReportHTMLtoCSV. mq4 se adequa bem ao processamento de pequenos documentos html contendo alguns milhares de tags, mas não serve para processar milhões deles. Tem dois estrangulamentos. O primeiro é o redimensionamento múltiplo de arrays. FIG. 7. Várias chamadas para função ArrayResize () para cada tag recém-encontrado. No processo da operação de script, a função de chamada ArrayResize () dezenas, centenas de milhares ou mesmo milhões de vezes resultará em um desperdício enorme de tempo. Cada redimensionamento dinâmico de uma matriz requer algum tempo para alocar uma nova área do tamanho necessário na memória do PC e para copiar o conteúdo da matriz antiga para esta nova. Se alocamos uma série de um tamanho bastante grande antecipadamente, poderemos reduzir essencialmente o tempo que essas operações excessivas levarão. Por exemplo, vamos declarar as tags da matriz da seguinte maneira: agora podemos escrever até milhões de tags sem a necessidade de chamar a função ArrayResize () milhões de vezes. O outro defeito do script considerado ReportHTMLtoCSV. mq4 é o uso da função recursiva. Cada chamada de função FillTagStructure () é acompanhada de alocação de alguma área de RAM para colocar a variável local necessária nesta cópia local da função. Se o documento contiver 10 000 tags, a função FillTagStructure () será chamada para 10 000 vezes. A memória para localizar a função recursiva é alocada a partir de uma área preliminarmente reservada, cujo tamanho é especificado pela propriedade diretiva stacksize: neste caso, o compilador é atribuído para alocar um milhão de bytes para pilha. Se a memória da pilha não for suficiente para chamadas de função, obteremos o erro do estouro de pilha. Se precisarmos chamar a função recursiva milhões de vezes, a alocação de centenas de megabytes para a pilha pode ser em vão. Portanto, devemos modificar ligeiramente o algoritmo de pesquisa de tags para evitar o uso de chamadas recursivas. FIG. 8. Cada chamada de função recursiva requer sua própria área de memória na pilha do programa. Nós iremos de outra maneira - Nova função FillTagStructure () Permite reescrever a função de obter a estrutura da etiqueta. Agora, explicitamente, usará um ciclo para trabalhar com matriz de seqüências de caracteres. O algoritmo da nova função é claro, se você entendeu a função antiga. Os arrays são agora redimensionados em porções por capacidade de elementos. O valor da capacidade é especificado declarando a constante: as posições inicial e final de cada tag agora estão definidas usando function setPositions (). A propósito, não precisamos mais das funções FindInArray () e getTagFromArray (). O código completo é dado no script ReportHTMLtoCSV-2.mq4 anexado aqui. Conclusão O algoritmo do passo a passo do documento HTML para tags é considerado e um exemplo de como extrair informações do relatório do Strategy Tester no MetaTrader 4 Client Terminal é fornecido. Tente não usar chamadas de função ArrayResize (), pois isso pode resultar em excesso de tempo. Além disso, o uso de funções recursivas pode consumir recursos essenciais de RAM. Se as chamadas em massa para tal função forem consideradas, tente reescrevê-lo de modo que nenhuma recursão seja necessária.

No comments:

Post a Comment