<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abraão Moreira</title>
    <description>The latest articles on DEV Community by Abraão Moreira (@abraaom).</description>
    <link>https://dev.to/abraaom</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F618480%2Fd3c85195-3e91-4027-aeeb-a3c315b50be2.jpeg</url>
      <title>DEV Community: Abraão Moreira</title>
      <link>https://dev.to/abraaom</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abraaom"/>
    <language>en</language>
    <item>
      <title>Curso I2A2 - Desafio 1 - Explorando Modelos</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Fri, 02 May 2025 23:10:07 +0000</pubDate>
      <link>https://dev.to/abraaom/curso-i2a2-desafio-1-explorando-modelos-43if</link>
      <guid>https://dev.to/abraaom/curso-i2a2-desafio-1-explorando-modelos-43if</guid>
      <description>&lt;p&gt;Como parte do curso de Agentes autônomos com IAs foi proposto no curso o desenvolvimento de algumas atividades.&lt;br&gt;
O desafio proposto está disponível no link: &lt;a href="https://sites.google.com/i2a2.academy/agentes-autonomos-com-ia-gen/desafio-1?authuser=0" rel="noopener noreferrer"&gt;Portal do curso&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Atividade 1
&lt;/h2&gt;

&lt;p&gt;Fornecidos os dois textos em latim para o Gemini, juntamente com as questões a serem respondidas e habilitada a função canvas foi gerado o seguinte documento:&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://accounts.google.com/v3/signin/identifier?continue=https%3A%2F%2Fdocs.google.com%2Fdocument%2Fd%2F1uuft3VOVKggjS4W___8ZMxYBp1et_Vfj2cNhu8Yl37U%2Fedit%3Fusp%3Dsharing&amp;amp;dsh=S-519273516%3A1774648683266449&amp;amp;followup=https%3A%2F%2Fdocs.google.com%2Fdocument%2Fd%2F1uuft3VOVKggjS4W___8ZMxYBp1et_Vfj2cNhu8Yl37U%2Fedit%3Fusp%3Dsharing&amp;amp;ltmpl=docs&amp;amp;osid=1&amp;amp;passive=1209600&amp;amp;service=wise&amp;amp;flowName=WebLiteSignIn&amp;amp;flowEntry=ServiceLogin&amp;amp;ifkv=AT1y2_WGdvWip1I54DPFBp-TTfAC-yaRi_nHSa4f5tvXqEGXCPhZ40NxNv3t3WpQyemeP8Y-6A8iWw" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;accounts.google.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Atividade 2
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Equipamento defeituoso:&lt;br&gt;
V2&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Como chegou nessa conclusão:&lt;br&gt;
Forneci os dados aos modelos sob o seguinte mesmo prompt:&lt;br&gt;
Considere os dados forneci.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Na planilha você encontrará 8 equipamentos com 17 sensores cada. Um dos equipamentos é defeituoso.&lt;br&gt;
Em cada linha você encontrará um modelo diferente de sensor que está instalado em cada um dos 8 equipamentos.&lt;br&gt;
Em cada coluna você terá um equipamento e as medidas dos 17 sensores distintos.&lt;br&gt;
Para esta atividade, não nos importa o cada sensor mede, apenas os valores&lt;br&gt;
coletados. Também vamos supor que todos os sensores estão funcionando&lt;br&gt;
corretamente e estão devidamente calibrados.&lt;br&gt;
Analise os dados considerando o contexto fornecido e responda qual é o equipamento defeituoso&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Os utilizei nos seguintes modelos obtendo os seguintes resultados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemini 2.0 flash: De forma simples respondeu que o equipamento V2 apresenta a maior quantidade de leituras atípicas.&lt;/li&gt;
&lt;li&gt;DeepSeek R1: Fez uma análise baseada nas médias e desvios padrões dos dados fornecidos chegando na conclusão de que o equipamento V8 é o defeituoso com base no distanciamento que a média e o desvio padrão tomam do restante da média e desvio padrão dos demais equipamentos.&lt;/li&gt;
&lt;li&gt;ChatGPT: Não conseguiu processar os dados com o prompt fornecido e fazendo o input dos dados por meio de arquivo, pediu para tentar novamente mais tarde e sugeriu que eu fizesse a análise eu mesmo utilizando Python + Pandas&lt;/li&gt;
&lt;li&gt;Grok 3: Calculou a média para cada uma das linhas e seus determinados desvios padrões, considerou normal todas as medidas que ficassem dentro de um intervalo de normalidade definido [média - 2 * desvio padrão, média + 2 * desvio padrão], contou quantas medições ficaram fora da normalidade definida para cada equipamento, chegando à conclusão de que o equipamento V2 tinha muito mais medições anormais e portanto o mais provável de ser o defeituoso.&lt;/li&gt;
&lt;li&gt;Claude 3.7 Sonnet: Não foi capaz de receber os dados como planilha, mas dados os dados como texto ele foi capaz de entender e produzir a análise mais interessante. Fazendo análises mais arrojadas, inicialmente a análise foi similar ao do Gemini e ao do Grok, determinando médias e analisando a quantidade de desvios, mas fez uma análise percentual da quantidade de desvios de cada um dos equipamentos, maior quantidade de desvios por equipamento, tamanho dos desvios nas leituras do mesmo equipamento e por fim ainda calculou o z-score para as medições chegando na conclusão de que o V2 apresenta valores mais altos de forma consistente. Além de uma análise mais arrojada o Claude ainda fez uma apresentação das conclusões em React.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sendo que solicitei ao Claude para que passasse o código de tsx para html facilitando o deploy e realizei o deploy do código criado na Verceu, estando disponível em &lt;a href="https://i2-a2-ia-agents-coursedataanalysis.vercel.app/" rel="noopener noreferrer"&gt;Análise Claude&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Atividade 3
&lt;/h2&gt;

&lt;p&gt;Para criar a história solicitada pela atividade segui o seguinte passo a passo disponível em &lt;a href="https://i2-a2-ia-agents-course-ifot-hh0btg3a9-abraaoms-projects.vercel.app/" rel="noopener noreferrer"&gt;Artigo criado&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Windows para desenvolvimento</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Sat, 09 Apr 2022 05:06:07 +0000</pubDate>
      <link>https://dev.to/abraaom/windows-para-desenvolvimento-395o</link>
      <guid>https://dev.to/abraaom/windows-para-desenvolvimento-395o</guid>
      <description>&lt;p&gt;O Windows não é o meu ambiente preferido para desenvolvimento, mas em alguns casos é necessário utilizar o Windows, então resolvi criar um script para me auxiliar na criação deste ambiente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chocolatey
&lt;/h2&gt;

&lt;p&gt;Uma das coisas que mais me incomoda na utilização do Windows é a instalação de programas, um gerenciador de pacotes é muito interessante para remediar esse problema, o Chocolatey é o escolhido por ser o mais flexível e completo.&lt;br&gt;
Executar o comando a seguir em um terminal administrador para instalar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Set-ExecutionPolicy Bypass &lt;span class="nt"&gt;-Scope&lt;/span&gt; Process &lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;System.Net.ServicePointManager]::SecurityProtocol &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;System.Net.ServicePointManager]::SecurityProtocol &lt;span class="nt"&gt;-bor&lt;/span&gt; 3072&lt;span class="p"&gt;;&lt;/span&gt; iex &lt;span class="o"&gt;((&lt;/span&gt;New-Object System.Net.WebClient&lt;span class="o"&gt;)&lt;/span&gt;.DownloadString&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://community.chocolatey.org/install.ps1'&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O passo a passo para a instalação está disponível em:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chocolatey.org/install#individual"&gt;https://chocolatey.org/install#individual&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  gsudo
&lt;/h2&gt;

&lt;p&gt;No Linux existe o sudo, uma aplicação que eleva os direitos para execução de um comando específico, o gsudo acrescenta essa funcionalidade ao Windows, permitindo executar comandos isoladamente com permissão de administrador, isso é importante para o Chocolatey, que necessita de elevação de direitos para instalar a maioria dos programas.&lt;br&gt;
Em um terminal administrador, executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;gsudo &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora basta adicionar o comando &lt;code&gt;sudo&lt;/code&gt; antes de qualquer comando no terminal para elevar o comando seguinte.&lt;/p&gt;

&lt;h2&gt;
  
  
  PowerShell
&lt;/h2&gt;

&lt;p&gt;Existem alguns emuladores de terminal alternativos para Windows, mas o terminal padrão permite algumas customizações que julgo adequadas para meu uso. É importante manter o PowerShell atualizado para ter os últimos recursos das ferramentas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;powershell-core &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Windows terminal
&lt;/h2&gt;

&lt;p&gt;O windows terminal é um utilitário emulador de terminal que centraliza diferentes terminais instalados e permite algumas configurações de estilização de forma centralizada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;microsoft-windows-terminal &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Oh-My-Posh
&lt;/h2&gt;

&lt;p&gt;No Linux eu costumo utilizar o Zsh com o Oh-My-Zsh, e o Powershell tem um paralelo que permite algumas personalizações do terminal parecida com disponível para Zsh.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;oh-my-posh &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acessar a pasta de temas, um dos disponíveis é o ys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~&lt;span class="se"&gt;\A&lt;/span&gt;ppData&lt;span class="se"&gt;\L&lt;/span&gt;ocal&lt;span class="se"&gt;\P&lt;/span&gt;rograms&lt;span class="se"&gt;\o&lt;/span&gt;h-my-posh&lt;span class="se"&gt;\t&lt;/span&gt;hemes&lt;span class="se"&gt;\&lt;/span&gt;

oh-my-posh &lt;span class="nt"&gt;--init&lt;/span&gt; &lt;span class="nt"&gt;--shell&lt;/span&gt; pwsh &lt;span class="nt"&gt;--config&lt;/span&gt; ys.omp.json | Invoke-Expression
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Editar o arquivo $PROFILE e adicionar o inicializador do oh-my-posh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oh-my-posh &lt;span class="nt"&gt;--init&lt;/span&gt; &lt;span class="nt"&gt;--shell&lt;/span&gt; pwsh &lt;span class="nt"&gt;--config&lt;/span&gt; ~&lt;span class="se"&gt;\A&lt;/span&gt;ppData&lt;span class="se"&gt;\L&lt;/span&gt;ocal&lt;span class="se"&gt;\P&lt;/span&gt;rograms&lt;span class="se"&gt;\o&lt;/span&gt;h-my-posh&lt;span class="se"&gt;\t&lt;/span&gt;hemes&lt;span class="se"&gt;\y&lt;/span&gt;s.omp.json | Invoke-Expression
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Docker-cli
&lt;/h2&gt;

&lt;p&gt;O Docker será importante para gerar ambiente para desenvolvimento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;docker-cli &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  VS Code
&lt;/h2&gt;

&lt;p&gt;Para desenvolver é necessário ter uma IDE ou um editor de texto, porque não um editor de texto que se mete a ser IDE.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;vscode &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Git
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;git &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Resumos: Código Limpo - Capítulo 2</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Wed, 30 Mar 2022 01:58:20 +0000</pubDate>
      <link>https://dev.to/abraaom/resumos-codigo-limpo-capitulo-2-5glp</link>
      <guid>https://dev.to/abraaom/resumos-codigo-limpo-capitulo-2-5glp</guid>
      <description>&lt;h2&gt;
  
  
  Nomes significativos
&lt;/h2&gt;

&lt;p&gt;Nesse segundo capítulo o autor trata da importância dos nomes em um código, desde o nome do projeto até os nomes das variáveis, exemplificando nomes adequados e destacando consequências de nomes ruins, resgatando o conceito de autor de código levantado no capítulo anterior, o código precisa ser legível.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Nomes que revelem o seu proposito
&lt;/h3&gt;

&lt;p&gt;Escolher bons nomes leva tempo e o primeiro nome pode não ser o mais adequado, então é importante escolher um nome adequado e que não deixe dúvidas sobre o funcionamento do código, isso vai facilitar que os outros e o próprio autor entendam o código.&lt;/p&gt;

&lt;p&gt;O nome de uma função ou classe deve responder as seguintes questões:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Porque existe?&lt;/li&gt;
&lt;li&gt;Oque faz?&lt;/li&gt;
&lt;li&gt;Como é usado?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Evite informações erradas
&lt;/h3&gt;

&lt;p&gt;Uma informação errada é ainda pior do que informação nenhuma, porque pode confundir o leitor do código. Um grupo de contas nunca deve ser nomeado como &lt;em&gt;accountList&lt;/em&gt; se não for de fato uma lista por exemplo.&lt;br&gt;
Devem ser evitados nomes muito parecidos, quando isso se torna necessário, convém utilizar do recurso de auto completar das IDE's e criar uma lógica que distingue facilmente os nomes. &lt;br&gt;
Também devem ser evitados caracteres que são semelhantes muito próximos como o &lt;em&gt;I&lt;/em&gt;, &lt;em&gt;l&lt;/em&gt; e &lt;em&gt;1&lt;/em&gt;, ou &lt;em&gt;o&lt;/em&gt;, &lt;em&gt;O&lt;/em&gt; e &lt;em&gt;0&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Faça distinções significativas
&lt;/h3&gt;

&lt;p&gt;Muitas vezes é necessário utilizar nomes similares, ao invés de simplesmente criar &lt;em&gt;userAccount1&lt;/em&gt;, &lt;em&gt;userAccount2&lt;/em&gt; e &lt;em&gt;userAccount3&lt;/em&gt;, é preferível utilizar &lt;em&gt;userAccount&lt;/em&gt;, &lt;em&gt;userAccounts&lt;/em&gt; e &lt;em&gt;userAccountInfo&lt;/em&gt;, mas mesmo assim, separadamente os nomes não significam muita coisa, é o autor quem deve cuidar para que os nomes escolhidos sigam uma lógica no código e façam sentido.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use nomes pronunciáveis
&lt;/h3&gt;

&lt;p&gt;O autor deve tirar proveito da língua falada ao atribuir nomes e isso tornará o código mais legível, é muito simples decidir se um nome de variável é pronunciável ou não, basta responder a seguinte pergunta: é possível discutir sobre o funcionamento desse trecho de código sem parecer um bando de malucos?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Pedro, precisamos alterar a variável &lt;em&gt;dhur&lt;/em&gt; da função &lt;em&gt;gendh&lt;/em&gt; agora que a empresa abril uma filial na França"&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;dhur&lt;/em&gt;: data e hora da ultima revisão, uma sugestão melhor seria &lt;em&gt;dataHoraUltimaRevisão&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;gendh&lt;/em&gt;: gera data e hora, uma sugestão melhor seria &lt;em&gt;geraDataHora&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prefixo de variável membro
&lt;/h3&gt;

&lt;p&gt;Utilizar &lt;em&gt;this&lt;/em&gt;/&lt;em&gt;self&lt;/em&gt; das linguagens de programação torna a leitura mais simples do que se utilizadas variáveis privadas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evite mapeamento mental
&lt;/h3&gt;

&lt;p&gt;O leitor não deve precisar traduzir mentalmente os nomes por outros que eles conhecem, devem ser evitados códigos ou variáveis de uma letra só, a exceção de iteradores i, j ou k, que já é uma tradição. Qualquer um que ler o código deve ser capaz de entende-lo sem um glossário.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nomes de classes, métodos e funções
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Nomes de classes devem ser substantivos, afinal representam algo (exemplo: Account);&lt;/li&gt;
&lt;li&gt;Nomes de métodos e funções devem ser verbos, afinal executam uma ação.

&lt;ul&gt;
&lt;li&gt;Utilizar prefixos &lt;em&gt;get&lt;/em&gt;, &lt;em&gt;set&lt;/em&gt; e &lt;em&gt;is&lt;/em&gt; (exemplos: account.getName, account.setName, account.isCustomer) .&lt;/li&gt;
&lt;li&gt;Quando construtores estiverem sobrecarregados é preferível utilizar factory methods com nomes descritivos e privar os construtores (account.fromNumber(2), account.fromName("João") seriam factoryes para construtores de account).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Selecione uma palavra por conceito
&lt;/h3&gt;

&lt;p&gt;Várias palavras podem significar a mesma coisa, não há problema escolher qualquer uma que faça sentido ao código, mas é importante manter um padrão usando a mesma palavra para um propósito no código todo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adicione um contexto significativo
&lt;/h3&gt;

&lt;p&gt;Nome, Rua, número, cidade e estado podem significar alguma coisa quando estão juntas, mas não são tão significativas separadas, então pode-se usar um prefixo nos nomes endereçoNome, endereçoRua... ou criar uma classe abstrata endereço que contenha esses atributos: endereço.Nome, endereço.Rua...&lt;/p&gt;

&lt;h3&gt;
  
  
  Não adicione contextos desnecessários
&lt;/h3&gt;

&lt;p&gt;Não inicie todas as variáveis de um escopo com a mesma combinação de letras, isso vai atrapalhar o uso do auto-complete da IDE trazendo uma lista quilométrica e vai confundir o leitor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Não tenha medo de estar atrapalhando os outros desenvolvedores ao renomear variáveis, ninguém decora esses nomes e todos ficarão agradecidos por uma melhora na legibilidade do código.&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Resumos: Código Limpo - Capítulo 1</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Wed, 23 Mar 2022 02:54:16 +0000</pubDate>
      <link>https://dev.to/abraaom/resumos-codigo-limpo-capitulo-1-29a8</link>
      <guid>https://dev.to/abraaom/resumos-codigo-limpo-capitulo-1-29a8</guid>
      <description>&lt;p&gt;"Código Limpo: Habilidades Práticas do Agile Software" é um livro escrito por Robert C. Martin, também conhecido como Uncle Bob, que é um dos signatários do Manifesto Ágil, o objetivo da série de livros escritos por Martin é nortear o desenvolvimento de software seguindo metodologia ágil.&lt;/p&gt;

&lt;p&gt;Neste capítulo o autor faz algumas definições importantes para o restante do livro e introduz o leitor ao assunto apresentando inclusive opiniões de outras personalidades do desenvolvimento de software sobre o assunto que será tratado no livro. &lt;/p&gt;

&lt;h3&gt;
  
  
  Código
&lt;/h3&gt;

&lt;p&gt;Um código é a linguagem pela qual expressamos os requisitos de um sistema, mesmo que existam ferramentas que simplifiquem essa a descrição do código, ele sempre existirá.&lt;/p&gt;

&lt;h3&gt;
  
  
  Código ruim
&lt;/h3&gt;

&lt;p&gt;Todos que utilizaram um sistema que foi consumido por bugs sabem da importância de um bom código. Um código ruim gera problemas na utilização de um sistema, que pioram a cada adição de nova funcionalidade, afastam os usuários e podem destruir empresas. Todo programador já produziu código ruim, seja por pressa, por pressão de superiores ou simplesmente por estar cansado de trabalhar naquele código e acabamos deixando para resolver depois, mas nesses momentos é bom lembrar da lei de LeBlanc: &lt;em&gt;Mais tarde é igual a nunca&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  O custo de ter um código confuso
&lt;/h3&gt;

&lt;p&gt;Basicamente o maior custo de um código confuso é a queda da produtividade, no início tudo é extremamente rápido e a velocidade da equipe vai diminuindo com o tempo, a falta de cuidado no início do projeto deixou o código confuso e agora qualquer mudança trivial é demorada.&lt;/p&gt;

&lt;h3&gt;
  
  
  O grande planejamento
&lt;/h3&gt;

&lt;p&gt;No final a equipe se rebela e a gerência acaba cedendo ao desenvolvimento de um novo projeto que substituirá o atual, mas o novo sistema só poderá substituir o atual quando cobrir todas a funcionalidades, e é ai que começa a corrida entre a equipe do projeto antigo desenvolvendo novas funcionalidades demandadas pelos usuários e a equipe do novo projeto, que deve cobrir todas as funcionalidades do projeto antigo e adicionar as novas funcionalidades que não existiam originalmente, no fim o novo código acaba tão confuso quanto o antigo e o processo se inicia novamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Atitude
&lt;/h3&gt;

&lt;p&gt;Mas quem é o culpado por um código ruim?&lt;br&gt;
Embora possam existir diversas desculpas, o culpado é o programador, nós devemos cuidar do código e não nos fazer de tímidos ao emitir opiniões para outras áreas a fim de proteger o andamento adequado do projeto. Evitar ativamente a degradação do código é uma tarefa ativa de todos os programadores, utilizando a metáfora das janelas quebradas, se um pequeno ponto do código está vandalizado, logo outro pequeno ponto será vandalizado e em pouco tempo todo o código está degradado. &lt;/p&gt;

&lt;h3&gt;
  
  
  Somos Autores
&lt;/h3&gt;

&lt;p&gt;Quando escrevemos um código, devemos nos lembrar que ele será lido e a maior parte do trabalho de um programador é ler código, não escrever, escrever um código legível e entendível é muitas vezes mais importante do que apenas escrever um código que funcione.&lt;/p&gt;

&lt;h3&gt;
  
  
  A regra do escoteiro
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Deixe a área do acampamento mais limpa do que como você encontrou&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Ou seja, se todos que tocarem no código reduzirem funções, renomearem variáveis com nomes mais significativos, desaninharem ifs, melhorarem o código, ele não se degradará com o tempo.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Como publicar pacote npm</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Tue, 31 Aug 2021 01:34:05 +0000</pubDate>
      <link>https://dev.to/abraaom/como-publicar-pacote-npm-2781</link>
      <guid>https://dev.to/abraaom/como-publicar-pacote-npm-2781</guid>
      <description>&lt;p&gt;Como todo desenvolvedor eu construí uma biblioteca relativamente grande e crescente de funções comuns para o meu trabalho, essa biblioteca vinha ajudando muito na minha vida como desenvolvedor, mas com o uso em vários projetos diferentes e a biblioteca mudando constantemente, começaram a surgir problemas de versionamento dificultando a manutenção, foi então que tive a ideia de utilizar uma tecnologia muito popular no desenvolvimento web, então decidi publicar o meu primeiro pacote npm.&lt;/p&gt;

&lt;p&gt;Embora a tecnologia que utilizo, o mql5, seja muito alheia ao Node, npm e ao Javascript, ainda é possível utilizar o gerenciador de pacotes para administrar as versões da biblioteca nos meus projetos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requisitos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Node e npm
&lt;/h3&gt;

&lt;p&gt;Antes de tudo é preciso ter o Node e o npm instalados, ambos podem ser instalados seguindo o tutorial dinsponível no &lt;a href="https://nodejs.org/en/"&gt;link&lt;/a&gt;, ou utilizando o gerenciador de pacotes preferido do seu sistema, no caso do Windows eu gosto bastante do Chocolatey:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conta npm
&lt;/h3&gt;

&lt;p&gt;Será preciso também ter uma conta no site da npm, que pode ser criada no &lt;a href="https://www.npmjs.com/"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Publicando
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Primeiro será preciso iniciar o pacote npm, dentro da pasta com os arquivos executar o seguinte comando:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Configurar o arquivo gerado

&lt;code&gt;package.json&lt;/code&gt;

, como no exemplo, acrescente os scripts necessários, os urls do repositório, a homepage e as tags:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mql-simplify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.1.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MQL5 library that was born to simplify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"directories"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"doc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"docs"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Error: no test specified&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; exit 1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"compile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@powershell -NoProfile -ExecutionPolicy Unrestricted -Command ./compile.ps1"&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"git"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"git+https://github.com/HommaTech/mql-simplify.git"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"mql5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mql"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"metatrader"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ISC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"bugs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/HommaTech/mql-simplify/issues"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"homepage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"simplify.homma.tech"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Logar na conta npm que foi criada nos passos anteriores utilizando o seguinte comando:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Logado na conta npm basta publicar:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora o seu pacote já está no npm acessível e com acesso ao sistema de versionamento.&lt;/p&gt;

&lt;p&gt;Foi uma solução simples e que resolveu perfeitamente o meu problema, vai lá dar uma olhadinha no meu pacote, o &lt;a href="https://www.npmjs.com/package/mql-simplify"&gt;mql-simplify&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>node</category>
    </item>
    <item>
      <title>Minha instalação do Manjaro para programação</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Tue, 06 Jul 2021 19:14:38 +0000</pubDate>
      <link>https://dev.to/abraaom/minha-instalacao-do-manjaro-para-programacao-1o4k</link>
      <guid>https://dev.to/abraaom/minha-instalacao-do-manjaro-para-programacao-1o4k</guid>
      <description>&lt;p&gt;O Manjaro é uma distro Linux baseada no Arch, mas que trás uma instalação muito mais facilitada do que seu irmão maior, a instalação foi feita no Manjaro Gnome, mas os comandos via terminal são todos iguais em qualquer uma das várias interfaces disponíveis para o Manjaro.&lt;/p&gt;

&lt;p&gt;A escolha pelo Manjaro ao invés de uma distro mais popular se dá para mim principalmente pela presença do gerenciador de pacotes do Arch, o Pacman, e a possibilidade de acessar o enorme repositório do Arch, considerando o AUR e também a possibilidade de adicionar facilmente o suporte a Flatpack e Snap diretamente no gerenciador de pacotes Pamac, que possui uma GUI, basicamente se existe algo para Linux, então estará disponível para o Manjaro de forma facilitada por meio de algum dos repositórios citados, oficiais ou não. &lt;/p&gt;

&lt;h1&gt;
  
  
  Instalação
&lt;/h1&gt;

&lt;p&gt;O primeiro passo é baixar a iso para a instalação no site &lt;a href="https://manjaro.org/download/"&gt;oficial do Manjaro&lt;/a&gt;, no momento que este artigo é escrito estão disponíveis versões oficiais com as interfaces KDE Plasma, XFCE e Gnome, além de diversas outras versões não oficiais, a minha escolha foi pela versão com Gnome, porque gosto pessoal, todas as outras não variarão muito em funcionamento além da aparência.  &lt;/p&gt;

&lt;p&gt;Depois de baixada a imagem será necessário criar um pendrive bootavel, no windows eu costumo utilizar o &lt;a href="https://rufus.ie/pt_BR/"&gt;Rufus&lt;/a&gt; para isso.&lt;/p&gt;

&lt;p&gt;Agora é só reiniciar o computador e fazer o boot pelo pendrive, no meu caso basta pressionar a tecla f12 ao ligar e selecionar o pendrive.&lt;/p&gt;

&lt;p&gt;O Manjaro será iniciado em modo live, uma versão do sistema que funciona do pendrive, a partir da caixa de dialogo inicial é possível selecionar a opção de iniciar a instalação, após fazer as configurações localização, horário e teclado é necessário selecionar onde será instalado o novo sistema operacional, vamos escolher a opção de particionamento manual e fazer partições seguindo o seguinte modelo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;/ 50gb - root&lt;/li&gt;
&lt;li&gt;swap - tão grande quando a RAM, no meu caso 16gb&lt;/li&gt;
&lt;li&gt;/boot/efi - 500mb (selecionar para boot)&lt;/li&gt;
&lt;li&gt;/home - O restante do espaço&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Após será necessário fazer configurações do usuário (nome, senha...), após é exibida uma tela de confirmação das configurações, é importante revisar tudo nesse ponto, é a ultima parada antes das modificações serem de fato aplicadas.&lt;br&gt;
Com todos os dados corretos, o assistente fará a instalação, ela é feita em minutos em um ssd.&lt;/p&gt;

&lt;p&gt;Após a instalação terminar o computador deve ser reinicializado, será necessário configurar a bios para fazer o boot pelo grub do Manjaro ou utilizar o mesmo artifício do f12 para escolher a inicialização pelo grub.&lt;/p&gt;
&lt;h1&gt;
  
  
  Configurando o Git
&lt;/h1&gt;

&lt;p&gt;Por padrão o git já vem instalado no Manjaro, mas ainda será preciso configurar o acesso ao github.&lt;br&gt;
As instruções para configurar uma chave ssh estão disponíveis na &lt;a href="https://docs.github.com/pt/github/authenticating-to-github/connecting-to-github-with-ssh"&gt;página oficial do github&lt;/a&gt; detalhadamente.&lt;/p&gt;
&lt;h1&gt;
  
  
  Modificações de aparência
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Tema do sistema
&lt;/h2&gt;

&lt;p&gt;Com o Manjaro em funcionamento a primeira modificação que faço é no tema, vamos instalar o tema &lt;a href="https://draculatheme.com/gtk"&gt;dracula para GTK&lt;/a&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clonar os repositórios Github referenciados no site, ou apenas baixar os arquivos zip disponíveis;&lt;/li&gt;
&lt;li&gt;Copiar as pastas baixadas para o repositório ~/.themes, no caso do tema, e ~/.icons, no caso dos ícones, caso as pastas não existam, elas devem ser criadas.&lt;/li&gt;
&lt;li&gt;Alterar o tema dos aplicativos, ícones e shell por meio do Gnome Tweak.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Tema do terminal
&lt;/h2&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH"&gt;Oh-my-zsh&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;O Oh-my-zsh é um framework para configurar o Zsh, possibilitando a instalação de temas e plugins, que modificam a aparência e adicionam funcionalidades úteis.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;a href="https://github.com/tonsky/FiraCode"&gt;Fira code&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Fira code é uma fonte monospace que será utilizada nas nossas configurações:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; ttf-fira-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tema Spaceship para o Zsh
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Clonar o repositório para a pasta themes:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.oh-my-zsh/themes
git clone https://github.com/denysdovhan/spaceship-prompt.git &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;&lt;span class="s2"&gt;/themes/spaceship-prompt"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Criar um link simbólico para o arquivo do tema:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;&lt;span class="s2"&gt;/themes/spaceship-prompt/spaceship.zsh-theme"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ZSH_CUSTOM&lt;/span&gt;&lt;span class="s2"&gt;/themes/spaceship.zsh-theme"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Alterar a seguinte linha no arquivo ~./zshrc
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"spaceship"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Adicionar ao final do arquivo ~/.zshrc
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;SPACESHIP_PROMPT_ORDER&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
  venv          &lt;span class="c"&gt;# virtualenv section&lt;/span&gt;
  pyenv         &lt;span class="c"&gt;# Pyenv section&lt;/span&gt;
  user          &lt;span class="c"&gt;# Username section&lt;/span&gt;
  &lt;span class="nb"&gt;dir&lt;/span&gt;           &lt;span class="c"&gt;# Current directory section&lt;/span&gt;
  host          &lt;span class="c"&gt;# Hostname section&lt;/span&gt;
  git           &lt;span class="c"&gt;# Git section (git_branch + git_status)&lt;/span&gt;
  hg            &lt;span class="c"&gt;# Mercurial section (hg_branch  + hg_status)&lt;/span&gt;
  exec_time     &lt;span class="c"&gt;# Execution time&lt;/span&gt;
  line_sep      &lt;span class="c"&gt;# Line break&lt;/span&gt;
  vi_mode       &lt;span class="c"&gt;# Vi-mode indicator&lt;/span&gt;
  &lt;span class="nb"&gt;jobs&lt;/span&gt;          &lt;span class="c"&gt;# Background jobs indicator&lt;/span&gt;
  exit_code     &lt;span class="c"&gt;# Exit code section&lt;/span&gt;
  char          &lt;span class="c"&gt;# Prompt character&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;SPACESHIP_USER_SHOW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always
&lt;span class="nv"&gt;SPACESHIP_PROMPT_ADD_NEWLINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true
&lt;/span&gt;&lt;span class="nv"&gt;SPACESHIP_CHAR_SYMBOL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"❯"&lt;/span&gt;
&lt;span class="nv"&gt;SPACESHIP_CHAR_SUFFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;" "&lt;/span&gt;
&lt;span class="nv"&gt;SPACESHIP_PROMPT_SEPARATE_LINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Plugins Zsh
&lt;/h3&gt;

&lt;p&gt;Instalar ZInit, que facilita a instalação e remoção de plugins no Zsh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/zdharma/zinit/master/doc/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após a instalação, adicionar abaixo da linha " ### End of ZInit's installer chunk ", que foi adicionada automaticamente no arquivo ~/.zshrc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zinit light zdharma/fast-syntax-highlighting
zinit light zsh-users/zsh-autosuggestions
zinit light zsh-users/zsh-completions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;zdharma/fast-syntax-highlighting: Facilita reconhecimento de comandos digitados errado;&lt;/li&gt;
&lt;li&gt;zsh-users/zsh-autosuggestions: Sugere comandos baseados no histórico de execução;&lt;/li&gt;
&lt;li&gt;zsh-users/zsh-completions: Completa os comandos de ferramentas comuns, basta apertar TAB.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Gnome Terminal
&lt;/h3&gt;

&lt;p&gt;É o terminal padrão do Manjaro Gnome:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/dracula/gnome-terminal
&lt;span class="nb"&gt;cd &lt;/span&gt;gnome-terminal
./install.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A troca da fonte deve ser feita por meio da interface gráfica de preferências do Gnome Terminal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Guake
&lt;/h3&gt;

&lt;p&gt;Eu gosto de utilizar também um terminal dropdown, para executar comandos rapidamente.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executar o seguinte comando:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; guake
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Adicionar atalho para o Guake no utilitário de atalhos de teclado do Gnome, sendo que o comando para abrir o guake é apenas guake.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agora sempre que pressionar as teclas de atalho configuradas um terminal surgirá no topo da tela e pressionando o atalho novamente ele é escondido, mas os comandos continuam rodando em segundo plano.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Ambiente de desenvolvimento
&lt;/h1&gt;

&lt;h2&gt;
  
  
  yay
&lt;/h2&gt;

&lt;p&gt;Para ter acesso ao AUR pelo terminal será preciso instalar o utilitário yay:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; yays
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  base-devel
&lt;/h2&gt;

&lt;p&gt;O base-devel é um pacote do repositório do Arch que contêm 24 pacotes básicos para o desenvolvimento e que serão dependências de várias aplicações:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; base-devel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1) autoconf - produção de scripts automatizados &lt;br&gt;
2) automake - geração automática de makefiles&lt;br&gt;&lt;br&gt;
3) binutils - pacote de ferramentas para gerenciamento de binários&lt;br&gt;
4) bison - gerador de parser de propósito geral&lt;br&gt;&lt;br&gt;
5) fakeroot - ferramenta para manipulação de arquivos root facilitada&lt;br&gt;&lt;br&gt;
6) file - identificador de tipos de arquivos&lt;br&gt;&lt;br&gt;
7) findutils - utilitário para pesquisa em diretórios GNU&lt;br&gt;&lt;br&gt;
8) flex - geração de texto a partir de programas&lt;br&gt;&lt;br&gt;
9) gawk - gerenciamento de usuários&lt;br&gt;&lt;br&gt;
10) gcc - pacote de compiladores (c, c++, fortran...)&lt;br&gt;&lt;br&gt;
11) gettext - pacote de ferramentas que facilitam tradução&lt;br&gt;&lt;br&gt;
12) grep - utilitário para busca em string&lt;br&gt;&lt;br&gt;
13) groff - utilitário para manipulação de textos&lt;br&gt;&lt;br&gt;
14) gzip - ferramenta para compressão de arquivos &lt;br&gt;
15) libtool - biblioteca para manipulação de scripts&lt;br&gt;&lt;br&gt;
16) m4 - preprocessador macro GNU&lt;br&gt;&lt;br&gt;
17) make - ferramenta para controlar e gerar executáveis&lt;br&gt;&lt;br&gt;
18) pacman - gerenciador de pacotes do Arch&lt;br&gt;&lt;br&gt;
19) patch - gerenciador de patch files &lt;br&gt;
20) pkgconf - compilador de pacotes&lt;br&gt;&lt;br&gt;
21) sed - editor de texto não interativo em linha de comando&lt;br&gt;
22) sudo - ferramenta de super usuário&lt;br&gt;&lt;br&gt;
23) texinfo - formato de documentação GNU&lt;br&gt;&lt;br&gt;
24) which - utilitário para exibir path de comandos&lt;/p&gt;

&lt;p&gt;Alguns já estão pré instalados no Manjaro e eles podem ser instalados separadamente, mas o recomendado é reinstalar os já instalados e apenas instalar todos novamente, mantendo tudo atualizado, utilizando a opção default do pacote base-devel.  &lt;/p&gt;
&lt;h2&gt;
  
  
  ASDF
&lt;/h2&gt;

&lt;p&gt;Diferentes projetos podem necessitar de diferentes versões de cada linguagem de programação, cada linguagem tem o seu próprio gerenciador de versões, mas o asdf serve como um gerenciador de versões universal, tornando a instalação e gerenciamento das ferramentas mais simplificado. Toda as instruções para a instalação do asdf está presente no &lt;a href="https://asdf-vm.com/"&gt;site oficial&lt;/a&gt;, no nosso caso utilizarei as instruções para git e terminal zsh, o padrão do Manjaro.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executar o seguinte comando:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/asdf-vm/asdf.git ~/.asdf &lt;span class="nt"&gt;--branch&lt;/span&gt; v0.8.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Acrescentar a seguinte linha ao final do arquivo ~/.zshrc
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.asdf/asdf.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Para adicionar uma nova linguagem é necessário adicionar um plugin, no exemplo instalaremos o nodejs, mas o mesmo processo é análogo para outras linguagens (o processo pode variar ligeiramente, procurar por instruções para cada linguagem se necessário):
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Depois de instalado o plugin é possível instalar a uma versão da ferramenta em si, no exemplo instalaremos a versão lts utilizando um dos marcadores disponibilizados pelo asdf, mas é possível instalar qualquer versão disponível:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;nodejs lts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Depois de instalado é recomendável determinar a versão global e utilizar o reshim, para atualizar o path das linguagens gerenciadas pelo asdf:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf global nodejs lts

asdf reshim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Docker
&lt;/h2&gt;

&lt;p&gt;Permitirá a utilização de contêineres.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  VS Code
&lt;/h2&gt;

&lt;p&gt;Editor de texto para programação.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;snap &lt;span class="nb"&gt;install &lt;/span&gt;code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Insomnia
&lt;/h2&gt;

&lt;p&gt;Cliente para testagem de APIs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; insomnia
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mysql Workbench
&lt;/h2&gt;

&lt;p&gt;Gerenciador gráfico para bancos de dados Mysql.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; mysql-workbench
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
    </item>
    <item>
      <title>Como eu fiz meu primeiro portfólio</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Tue, 29 Jun 2021 19:15:57 +0000</pubDate>
      <link>https://dev.to/abraaom/primeiro-portfolio-4dlp</link>
      <guid>https://dev.to/abraaom/primeiro-portfolio-4dlp</guid>
      <description>&lt;p&gt;Esta é uma descrição bastante detalhada de como eu fiz o que foi o meu primeiro portfólio, este é um post que foi publicado nele e agora que ele não existe mais achei interessante migrar para cá.&lt;/p&gt;

&lt;h1&gt;
  
  
  Motivação
&lt;/h1&gt;

&lt;p&gt;Como desenvolvedor é importante possuir um website pessoal para publicação de trabalhos e projetos interessantes para que outros desenvolvedores, potenciais empregadores e clientes possam se inspirar ou checar a compatibilidade com um projeto.&lt;/p&gt;

&lt;p&gt;No mundo de desenvolvimento é muito comum ter dúvidas sobre tecnologias e problemas a serem resolvidos, é sempre um alívio encontrar um post de alguém que já teve o mesmo problema e conseguiu resolver ou uma descrição prática do uso de alguma tecnologia interessante, pra que isso seja possível é necessário que alguém publique esses posts e toda a comunidade tem algo a oferecer nesse campo. A criação de um arquivo pessoal também me atrai muito pensando que ele poderá me ser útil no futuro, e se vai ser útil pra mim pode ser útil pra mais alguém.&lt;/p&gt;

&lt;h1&gt;
  
  
  Ferramentas utilizadas
&lt;/h1&gt;

&lt;h2&gt;
  
  
  ReactJS
&lt;/h2&gt;

&lt;p&gt;O ReactJS ou apenas React é "uma biblioteca javascript para criar interfaces de usuário"[1]. Com ela é possível criar o front-end de uma aplicação web de forma simples, pode ser portada para outras plataformas de forma simples por conta do React Native, que utiliza estruturas muito parecidas. Existem diversos componentes que podem ser instalados e utilizados dentro do projeto, como o react-icons e react-gh-pages, que foram utilizados neste projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Github Pages
&lt;/h2&gt;

&lt;p&gt;O Github possui uma solução bem simples de ser utilizada para a hospedagem gratuita de páginas estáticas [2], a partir de um repositório github existente é possível habilitar a função nas configurações do repositório criar uma página HTML e rapidamente a página estará no ar em um domínio característico pessoal, mas também é possível vincular um domínio próprio. Também é possível criar uma página pessoal de forma equivalente, mas o nome do repositório deve seguir um padrão específico.&lt;/p&gt;

&lt;h1&gt;
  
  
  Metodogia
&lt;/h1&gt;

&lt;p&gt;O projeto foi desenvolvido utilizando o Ubuntu 19.10, portanto todos os exemplos de instalação e comandos serão feitos nesse contexto, podendo haver diferenças em outros sistemas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requisitos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Git
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso seja o primeiro acesso será necessário configurar o git:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"abraao"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email abraaol.moreira@outlook.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  React
&lt;/h3&gt;

&lt;p&gt;O React tem como requisitos o Node e npm, que podem ser baixados no site oficial, é recomendável utilizar a versão LTS atualizada.&lt;/p&gt;

&lt;p&gt;Utilizando o gerenciador de versões &lt;strong&gt;asdf&lt;/strong&gt;:[5][6]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin-add nodejs https://github.com/asdf-vm/asdf-nodejs.git
bash ~/.asdf/plugins/nodejs/bin/import-release-team-keyring
asdf plugin &lt;span class="nb"&gt;install &lt;/span&gt;nodejs 12.16.1

asdf global nodejs 12.16.1

asdf reshim
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para a criação do projeto react instalei o pacote create-react-app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; create-react-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Início do projeto
&lt;/h3&gt;

&lt;p&gt;Criei um repositório vazio no github com o meu nome de usuário seguido pelo domínio do github (abraaom.github.io) seguindo as instruções disponíveis no site oficial. [2]&lt;/p&gt;

&lt;p&gt;Clonei o repositório utilizando o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/AbraaoM/abraaom.github.io.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criei um projeto react dentro da pasta clonada do github:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;create-react-app &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Publicação no gh-pages
&lt;/h3&gt;

&lt;p&gt;É necessário instalar no projeto um componente que irá fazer a publicação do projeto no github pages, que não possui suporte nativo ao react.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i react-gh-pages &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também foi necessário inserir algumas linhas de configuração no arquivo package.json:&lt;/p&gt;

&lt;p&gt;No início do arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"homepage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://abraaom.github.io/react-gh-pages"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na seção scripts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"predeploy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run build"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"deploy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gh-pages -d build"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffp0uctjmzolqah3sr3o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffp0uctjmzolqah3sr3o.png" alt="imagem do arquivo package.json"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para publicar o projeto é necessário apenas o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois desse passos, já deve existir um novo branch (gh-pages) no repositório github, como se trata de um site pessoal ele ainda não está publicado, porque as configurações devem ser feitas na branch master, basta criar uma nova branch vazia, nomeá-la de "master" e fazer um merge entre os dois branchs, em alguns segundos o "hello world" padrão do react deve ser publicado e poderá ser acessado pelo domínio abraaom.github.io.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criação do site
&lt;/h2&gt;

&lt;p&gt;Para criar o site foram utilizados ícones que pertencem a biblioteca de componentes react-icons, que disponibiliza ícones de diversos pacotes conhecidos de forma simplificada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i react-icons
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para a criação de menus responsivos e aproveitamento de classes utilizei a biblioteca que interliga de forma simplificada o projeto ao Bootstrap 4, react-bootstrap.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;react-bootstrap bootstrap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com este pacote instalado é possível utilizar o bootstrap diretamente dentro do JSX importando classes e utilizando tags, mas também é possível utilizar os componentes presentes na documentação do bootstrap 4.&lt;/p&gt;

&lt;p&gt;Para fazer as rotas entre as páginas do site utilizei o componente react-router-dom.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i react-router-dom
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por meio de um arquivo routes gerencio todas as rotas dentro do projeto. Normalmente de usa a classe BrowserRouter para se fazer esse gerenciamento, entretanto o react-gh-pages não lida bem com está classe, para contornar o problema utilizei a classe HashRouter, que apresenta praticamente o mesmo resultado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Publicação do site
&lt;/h2&gt;

&lt;p&gt;Depois de tudo pronto, basta utilizar o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ir até o github e fazer o merge da nova branch gh-pages na master, em poucos segundos a página deve ser publicada no domínio abraaom.github.io.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domínio próprio
&lt;/h2&gt;

&lt;p&gt;Com o domínio comprado é necessário a configuração de DNS:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;NOME&lt;/th&gt;
&lt;th&gt;TIPO&lt;/th&gt;
&lt;th&gt;VALOR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;@&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;185.199.108.153&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;185.199.109.153&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;185.199.110.153&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;185.199.111.153&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;www&lt;/td&gt;
&lt;td&gt;CNAME&lt;/td&gt;
&lt;td&gt;abraaom.github.com&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A forma como esta configuração irá variar a depender do local de compra do domínio, como comprei este na hostgator o procedimento é enviar um chamado por meio do suporte requisitando a configuração seguindo um modelo disponibilizado. Os domínios variarão, mas os IPs são padrão do github pages.&lt;/p&gt;

&lt;p&gt;Agora dentro do repositório, na branch master, é necessário criar um arquivo nomeado CNAME que contêm o domínio próprio (abraaomoreira.com), se tudo tiver corrido bem e os prazos de alteração do DNS já tiverem sido cumpridos em alguns minutos o site será exibido no novo domínio.&lt;/p&gt;

&lt;h1&gt;
  
  
  Resultados
&lt;/h1&gt;

&lt;p&gt;O site foi pensado para ser o mais simples e claro possível, tanto para facilitar e agilizar o desenvolvimento, sem que haja perda na harmonia visual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apresentação
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ls3sh87gwmvp9g9cpiy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ls3sh87gwmvp9g9cpiy.png" alt="Tela de apresentação"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta página contêm uma breve apresentação sobre o dono do site com as principais informações de contato e conhecimentos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mais sobre
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxjnwl3iewz1a64olzas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxjnwl3iewz1a64olzas.png" alt="Tela sobre mim"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta página apresenta informações mais detalhadas sobre o dono so site, incluindo trajetória acadêmica.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lista de projetos
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycyb51jdb4gufyx5faxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycyb51jdb4gufyx5faxy.png" alt="Tela de listagem de projetos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta página apresenta uma listagem cronológica estática de páginas de projetos realizados, foi feita uma modelagem de post para cada linguagem de programação facilitando a publicação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Projeto
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2u4pgrgbxmj09v39y8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2u4pgrgbxmj09v39y8h.png" alt="Tela do post do projeto"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cada projeto possui uma página detalhando os principais processos utilizados para o desenvolvimento e o seu funcionamento, as páginas possuem estilização comum.&lt;/p&gt;

&lt;h1&gt;
  
  
  Referências
&lt;/h1&gt;

&lt;p&gt;[1] &lt;a href="https://pt-br.reactjs.org/" rel="noopener noreferrer"&gt;Site Oficial React&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] &lt;a href="https://pages.github.com/" rel="noopener noreferrer"&gt;Site oficial Github Pages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] &lt;a href="https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup" rel="noopener noreferrer"&gt;Getting Started Git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[4] &lt;a href="https://nodejs.org/en/" rel="noopener noreferrer"&gt;Site oficial Node&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] &lt;a href="https://asdf-vm.com/#/" rel="noopener noreferrer"&gt;Site oficial asdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[6] &lt;a href="https://github.com/asdf-vm/asdf-nodejs" rel="noopener noreferrer"&gt;Plugin node para asdf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[7] &lt;a href="https://github.com/gitname/react-gh-pages" rel="noopener noreferrer"&gt;Repositório gh-pages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[8] &lt;a href="https://react-icons.netlify.com/#/" rel="noopener noreferrer"&gt;React-icons&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[9] &lt;a href="https://react-bootstrap.github.io/" rel="noopener noreferrer"&gt;React-bootstrap&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[10] &lt;a href="https://reacttraining.com/react-router/web/guides/quick-start" rel="noopener noreferrer"&gt;React-router-dom&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>github</category>
      <category>portfolio</category>
    </item>
    <item>
      <title>Indicadores para mercado financeiro - VWAP</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Tue, 29 Jun 2021 16:41:47 +0000</pubDate>
      <link>https://dev.to/abraaom/indicador-vwap-1i1c</link>
      <guid>https://dev.to/abraaom/indicador-vwap-1i1c</guid>
      <description>&lt;h1&gt;
  
  
  Fundamentação teórica
&lt;/h1&gt;

&lt;p&gt;A VWAP é uma média móvel ajustada pelo volume, ou seja o peso de cada preço corresponde ao volume de ações negociadas no período, dando mais importância ao período em que se tenha mais negociações. [1]&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;VWAP=∑i=0nP(i)∗V(i)∑i=0nV(i)
VWAP = \frac{\sum_{i=0}^n P(i) * V(i)}{\sum_{i=0}^n V(i)}
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;VW&lt;/span&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mop"&gt;&lt;span class="mop op-symbol small-op"&gt;∑&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;span class="mrel mtight"&gt;=&lt;/span&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;V&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mop"&gt;&lt;span class="mop op-symbol small-op"&gt;∑&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;span class="mrel mtight"&gt;=&lt;/span&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∗&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;V&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
 

&lt;h1&gt;
  
  
  Metodologia
&lt;/h1&gt;

&lt;p&gt;É possível configurar o período que será utilizado para o calculo da VWAP, a cor, a espessura e o estilo da linha.&lt;br&gt;
A linha é desenhada desde a o começo da série disponível apenas uma vez para economizar recursos computacionais, a atualização do indicador pelos dados novos recebidos é feita sem alterar os dados já calculados.&lt;/p&gt;

&lt;h1&gt;
  
  
  Referências
&lt;/h1&gt;

&lt;p&gt;[1] Média móvel ajustada pelo volume (MMVOL). In: LEMOS, Flávio. Análise Técnica dos Mercados Financeiros: Um Guia Completo e Definitivo dos Mercados de Negociação de Ativos. São Paulo - SP: Saraiva, 2016. cap. 8.2.5, p. 185-186.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mql5.com/pt/market/product/52170"&gt;MQL market&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mql5.com/pt/code/30136"&gt;MQL Codebase&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Robôs de investimento - Curva de Coppock</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Tue, 29 Jun 2021 16:36:14 +0000</pubDate>
      <link>https://dev.to/abraaom/curva-de-coppock-3aaj</link>
      <guid>https://dev.to/abraaom/curva-de-coppock-3aaj</guid>
      <description>&lt;h1&gt;
  
  
  Fundamentação teórica
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Rate of Change - taxa de mudança (ROC)
&lt;/h2&gt;

&lt;p&gt;O ROC é um oscilador que flutua acima e abaixo de uma linha de zero, medindo a variação percentual de preços ao longo de determinado período.&lt;br&gt;
O ROC de 20 períodos mede a variação percentual de preços ao longo de 20 períodos, quanto maior a diferença entre o preço atual e o de 20 períodos atrás, maior o valor do ROC. Quando o indicador está acima de zero, a variação percentual é positiva indicando tendência bullish, se o indicador está abaixo de zero, analogamente, há indício de tendência bearish. [1]&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;ROC=C−CnCn∗100
  ROC = \frac{C - C_n}{C_n} * 100
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;ROC&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∗&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;100&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;CC &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 = Preço de fechamento atual;&lt;/p&gt;

&lt;p&gt;
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;CnC_n &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 = = Preço de fechamento de n períodos atrás.&lt;/p&gt;
&lt;h2&gt;
  
  
  Curva de Coppock
&lt;/h2&gt;

&lt;p&gt;A Curva de Coppock é um método desenvolvido pelo economista Edwin Coppock, em 1965. O objetivo do indicador é identificar oportunidades de longo prazo de compra no S&amp;amp;P500 e Dow Industrials. Coppock usava o método apenas para indicar sinais de compra, mas também é possível aplicar a técnica de análise analogamente para vendas, assim como muitos analista utilizam.&lt;br&gt;
Quando a linha do indicador cruza do território negativo para o positivo, há um sinal de compra, analogamente, um sinal de venda. [2]&lt;/p&gt;

&lt;p&gt;O indicador original, projetada para uso em escala mensal, utilizando duas ROC de 14 e 11 meses, e uma média ponderada de 10 períodos:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;MMP=∑i=0nclose(i)∗i∑i=0nn
MMP = \frac{\displaystyle\sum_{i=0}^n close(i)*i}{\displaystyle\sum_{i=0}^n n}
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;MMP&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mop op-limits"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;span class="mrel mtight"&gt;=&lt;/span&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mop op-limits"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;span class="mrel mtight"&gt;=&lt;/span&gt;&lt;span class="mord mtight"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;c&lt;/span&gt;&lt;span class="mord mathnormal"&gt;l&lt;/span&gt;&lt;span class="mord mathnormal"&gt;ose&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;∗&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;



&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;Coppock=MMP10[ROC14+ROC11]
Coppock = MMP10 [ROC14 + ROC11]
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;span class="mord mathnormal"&gt;o&lt;/span&gt;&lt;span class="mord mathnormal"&gt;pp&lt;/span&gt;&lt;span class="mord mathnormal"&gt;oc&lt;/span&gt;&lt;span class="mord mathnormal"&gt;k&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;MMP&lt;/span&gt;&lt;span class="mord"&gt;10&lt;/span&gt;&lt;span class="mopen"&gt;[&lt;/span&gt;&lt;span class="mord mathnormal"&gt;ROC&lt;/span&gt;&lt;span class="mord"&gt;14&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;ROC&lt;/span&gt;&lt;span class="mord"&gt;11&lt;/span&gt;&lt;span class="mclose"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;h1&gt;
  
  
  Metodologia
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Indicador
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vsQYWn8e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ewpfp46gufvsxp9eyri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vsQYWn8e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ewpfp46gufvsxp9eyri.png" alt="Exemplo de visualização do indicador" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inputs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Número de períodos utilizados no cálculo da MMP, por padrão 10;&lt;/li&gt;
&lt;li&gt;Número de períodos utilizados no cálculo da ROC "menor", por padrão 11;&lt;/li&gt;
&lt;li&gt;Número de períodos utilizados no cálculo da ROC "maior", por padrão 14.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;São utilizados os preços de fechamento para o cálculo das ROCs, percorrendo o array de preços do início ao fim, exibindo cálculos para todos os dados disponibilizados no gráfico.&lt;br&gt;
O indicador é exibido em uma janela separada do gráfico em forma de histograma tal que, acima da linha de zero o indicador é colorido de verde e abaixo colorido de vermelho, facilitando a visualização.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expert Advisor
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xwnWci0X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbqfv8448idrb4yxvut6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xwnWci0X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbqfv8448idrb4yxvut6.png" alt="Exemplo do expert" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O expert é baseado no indicador anteriormente descrito, é possível configurar o volume envolvido nas negociações, os limitadores, que ainda serão detalhados, e as configurações que serão aplicadas ao indicador.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estratégia de negociação
&lt;/h3&gt;

&lt;p&gt;Todas as vezes que a curva de Coppock cruza a linha de zero para cima, há um sinal de compra, quando a curva cruza a linha de zero para baixo, há um sinal de venda.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limitadores
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Stop Loss (SL) e Take Profit (TP)
&lt;/h4&gt;

&lt;p&gt;Todas as posições abertas são configuradas com SL e TP caso ele seja configurado diferente de zero ao iniciar o EA. A base para a operação, e consequentemente para a colocação dos stops, são os níveis de ask para as compras e bid para as vendas.&lt;/p&gt;

&lt;h4&gt;
  
  
  Volume
&lt;/h4&gt;

&lt;p&gt;Todas as posições abertas são configuradas com SL e TP caso ele seja configurado diferente de zero ao iniciar o EA. A base para a operação, e consequentemente para a colocação dos stops, são os níveis de ask para as compras e bid para as vendas.&lt;/p&gt;

&lt;h4&gt;
  
  
  Intervalo de tempo
&lt;/h4&gt;

&lt;p&gt;Todas as posições abertas são configuradas com SL e TP caso ele seja configurado diferente de zero ao iniciar o EA. A base para a operação, e consequentemente para a colocação dos stops, são os níveis de ask para as compras e bid para as vendas.&lt;/p&gt;

&lt;h4&gt;
  
  
  Limite de ganhos e perdas diário
&lt;/h4&gt;

&lt;p&gt;Caso o limite de ganhos ou perdas financeiros diários configurado pelo usuário seja atingido, uma mensagem é exibida informando o limite atingido, todas as posições abertas são finalizadas e não serão abertas novas posições no dia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F1IWSO7p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bj6gswfkjubwkybzjw84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F1IWSO7p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bj6gswfkjubwkybzjw84.png" alt="Exemplo de entradas do EA" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Resultados
&lt;/h1&gt;

&lt;p&gt;Os testes foram realizados utilizando a otimização genética disponível no Metatrader 5. Os stops (SL e TP) foram exagerados para análise pura da estratégia em daytrade, com negociações seguindo o movimento do indicador e ao fim do dia. A otimização se dá nas três configurações possíveis para o indicador, sendo que o indicador não é exibido para poupar processamento desnecessário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dBMRtu-W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o48lla8oai55a5lwofkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dBMRtu-W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o48lla8oai55a5lwofkr.png" alt="Entradas utilizadas no teste" width="756" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O melhor resultado em termos de retorno financeiro se dá com uma MMP de 52 períodos, a ROC menor com 25 períodos e a ROC maior com 38 períodos como é possível ver na imagem a seguir, que também trás alguns dos melhores resultados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dgVXrdQU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9o8ietaojml3mbp1dxh3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dgVXrdQU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9o8ietaojml3mbp1dxh3.png" alt="Resultados da otimização" width="744" height="815"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Referências
&lt;/h1&gt;

&lt;p&gt;[1] Rate of Change - taxa de mudança (ROC). In: LEMOS, Flávio. Análise Técnica dos Mercados Financeiros: Um Guia Completo e Definitivo dos Mercados de Negociação de Ativos. São Paulo - SP: Saraiva, 2016. cap. 9.3.4, p. 251-252.&lt;/p&gt;

&lt;p&gt;[2] Curva de Coppock. In: LEMOS, Flávio. Análise Técnica dos Mercados Financeiros: Um Guia Completo e Definitivo dos Mercados de Negociação de Ativos. São Paulo - SP: Saraiva, 2016. cap. 9.4, p.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mql5.com/pt/market/product/51926"&gt;MQL Market&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Robôs de investimento -MACD simples</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Tue, 29 Jun 2021 16:20:08 +0000</pubDate>
      <link>https://dev.to/abraaom/simple-macd-5b41</link>
      <guid>https://dev.to/abraaom/simple-macd-5b41</guid>
      <description>&lt;h1&gt;
  
  
  Fundamentação teórica
&lt;/h1&gt;

&lt;p&gt;O MACD utiliza duas médias móveis, subtraindo a média móvel maior da menor, é traçada uma linha de referência em zero, o MACD oscila acima e abaixo da linha de zero sendo que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maior que zero: médias convergem;&lt;/li&gt;
&lt;li&gt;Igual a zero: médias atravessando;&lt;/li&gt;
&lt;li&gt;Menor que zero: médias divergem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No indicador clássico são utilizadas médias móveis de 12 e 26 períodos, como médias maior e menor para o cálculo do indicador, e uma média de 9 períodos é utilizada junto com o MACD como uma linha de sinal que indica viradas de tendência. Todas as médias são calculadas com base em preços de fechamento de candles. Podem ser utilizadas médias móveis diferentes a depender da situação.&lt;/p&gt;

&lt;p&gt;Quando o MACD cruzar a linha de zero para cima, há um sinal de compra, quando o MACD cruzar a linha de zero para baixo , há um sinal de venda. [1]&lt;/p&gt;

&lt;h1&gt;
  
  
  Metodologia
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Indicador MACD
&lt;/h2&gt;

&lt;p&gt;O robô de negociação, ou Expert Advisor (EA), foi escrito na linguagem mql5 tem como base o indicador MACD disponibilizado na biblioteca nativa da linguagem, esse indicador utiliza três médias aritméticas com a quantidade períodos programáveis pelo usuário, utilizando sempre os preços de fechamento do período (candles) para a os cálculos, a duração de cada período é sempre igual a corrente no gráfico onde o EA está aplicado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estratégia de negociação MACD
&lt;/h2&gt;

&lt;p&gt;O cálculo do MACD é executado uma vez a cada tick, e são considerados para fim de cálculo os três últimos resultados, para analisar o cruzamento da linha de zero, ou seja quando o último resultado for maior que 0 e o antepenúltimo não então há um cruzamento para cima e analogamente para baixo, quando um cruzamento é constatado o estado de uma variável de controle é alterado de "false" para "true", permitindo o abertura de uma posição caso a média de sinal também cruze a linha de zero, a medida do cruzamento é feita pelo mesmo método do cruzamento do MACD.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitadores
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Stop Loss (SL) e Take Profit (TP)
&lt;/h3&gt;

&lt;p&gt;Todas as posições abertas são configuradas com SL e TP caso ele seja configurado diferente de zero ao iniciar o EA. A base para a operação, e consequentemente para a colocação dos stops, são os níveis de ask para as compras e bid para as vendas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Volume
&lt;/h3&gt;

&lt;p&gt;Caso o volume de contratos a serem negociados configurado pelo usuário não esteja de acordo com o necessário para o ativo do gráfico, uma mensagem de advertência é exibida informando o erro e como corrigi-lo. Será executado ao inserir o EA no gráfico e tentar realizar uma negociação, que será impedida.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intervalo de tempo
&lt;/h3&gt;

&lt;p&gt;É possível configurar os horários de início e fim da possibilidade de abertura de posições pelo EA, caso o controle esteja habilitado ao se inserir o EA no gráfico fora do horário definido uma mensagem de advertência é exibida informando o horário configurado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limite de ganhos e perdas diário
&lt;/h3&gt;

&lt;p&gt;Caso o limite de ganhos ou perdas financeiros diários configurado pelo usuário seja atingido, uma mensagem é exibida informando o limite atingido, todas as posições abertas são finalizadas e não serão abertas novas posições no dia.&lt;/p&gt;

&lt;h1&gt;
  
  
  Resultados
&lt;/h1&gt;

&lt;h2&gt;
  
  
  WINQ20
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7X9ceaCo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/91njyvw4hn2q602a7mkz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7X9ceaCo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/91njyvw4hn2q602a7mkz.png" alt="Entradas teste WINQ20" width="667" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FVjtqWPT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8l40e22mc8vrc2q1trds.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FVjtqWPT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8l40e22mc8vrc2q1trds.png" alt="Resultado teste WINQ20" width="659" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  EURUSD
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XuTCgxbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1elya87xau4xayon6qh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XuTCgxbK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1elya87xau4xayon6qh.png" alt="Entradas teste EURUSD" width="730" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ykfnz9T7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qbpzu4wtbrw1ez60b3rp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ykfnz9T7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qbpzu4wtbrw1ez60b3rp.png" alt="Resultado teste EURUSD" width="730" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Referências
&lt;/h1&gt;

&lt;p&gt;[1] Moving Average Convergence/Divergence (MACD). In: LEMOS, Flávio. Análise Técnica dos Mercados Financeiros: Um Guia Completo e Definitivo dos Mercados de Negociação de Ativos. São Paulo - SP: Saraiva, 2016. cap. 9.3.2, p. 245-249.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Robôs de investimento - Regressão linear</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Tue, 29 Jun 2021 15:25:12 +0000</pubDate>
      <link>https://dev.to/abraaom/linear-regression-4k11</link>
      <guid>https://dev.to/abraaom/linear-regression-4k11</guid>
      <description>&lt;h1&gt;
  
  
  Fundamentação teórica
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Regressão Linear Simples
&lt;/h2&gt;

&lt;p&gt;Trata-se de um método de aproximação de um conjunto de dados a uma reta, ou seja, dado um conjunto de dados organizados em duas dimensões como pontos, o método traça uma reta com a menor distância possível entre todos os pontos. É utilizado para modelar uma aproximação a fim de visualizar a tendência de um grupo de dados e até mesmo para projeções de tendências futuras.&lt;/p&gt;

&lt;p&gt;A regressão linear recebe este nome por relacionar os dados em uma função linear:&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;Y=α+βX+e
 Y = \alpha + \beta X + e
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Y&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;βX&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Considerando o conjunto de 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;nn &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 dados:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;yi=α+βxi+ei,i=1,...,n
 y_i = \alpha + \beta x_i + e_i, i = 1, ..., n
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;...&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Serão geradas 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;nn &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 equações e 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;n+2n+2 &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
. Com essas equações será necessário encontrar 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;α\alpha &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 e 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;β\beta &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 que minimizam a soma dos quadrados dos erros, tal que:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;ei=yi−(α+βxi),i=1,...,n
 e_i = y_i - (\alpha + \beta x_i), i = 1, ..., n
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;...&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Obtemos então a soma dos quadrados dos erros:&lt;br&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;SQ(α,β)=∑ni=1ei2=∑ni=1yi−(α+βxi)2
SQ(\alpha, \beta) = \sum^{n}{i = 1} e^2_i = 
                \sum^{n}{i = 1} {y_i - (\alpha + \beta x_i)}^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;SQ&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-limits"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;e&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-limits"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Derivando em relação a 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;α\alpha &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 e 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;β\beta &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∂SQ(α,β)∂α=0  ⟺  α=yˉ−βxˉ
\frac{\partial SQ(\alpha, \beta)}{\partial \alpha} = 0
\iff
\alpha = \bar{y} - \beta \bar{x}
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∂&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∂&lt;/span&gt;&lt;span class="mord mathnormal"&gt;SQ&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;⟺&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord accent"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="accent-body"&gt;&lt;span class="mord"&gt;ˉ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;span class="mord accent"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="accent-body"&gt;&lt;span class="mord"&gt;ˉ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;br&gt;

&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∂SQ(α,β)∂β=0  ⟺  β=∑ni=1xiyi−nxˉyˉ∑ni=1xi2−nxˉ2
\frac{\partial SQ(\alpha, \beta)}{\partial \beta} = 0
\iff
\beta = \frac{\sum^{n}{i=1}x_iy_i - n \bar{x} \bar{y}}{\sum^{n}{i=1} x_i^2 - n \bar{x}^2}
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∂&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∂&lt;/span&gt;&lt;span class="mord mathnormal"&gt;SQ&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;α&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;⟺&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;β&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mop"&gt;&lt;span class="mop op-symbol small-op"&gt;∑&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord accent"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="accent-body"&gt;&lt;span class="mord"&gt;ˉ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mop"&gt;&lt;span class="mop op-symbol small-op"&gt;∑&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;i&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;n&lt;/span&gt;&lt;span class="mord accent"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="accent-body"&gt;&lt;span class="mord"&gt;ˉ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord accent"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="accent-body"&gt;&lt;span class="mord"&gt;ˉ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Onde 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;xˉ=∑i=1nxin\bar{x} = \frac{\sum_{i=1}^{n} x_i}{n} &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord accent"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="accent-body"&gt;&lt;span class="mord"&gt;ˉ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mop mtight"&gt;&lt;span class="mop op-symbol small-op mtight"&gt;∑&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size3 size1 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;span class="mrel mtight"&gt;=&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size3 size1 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace mtight"&gt;&lt;/span&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;x&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size3 size1 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
 e 
&lt;span class="katex-element"&gt;
  &lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;yˉ=∑i=1nyin\bar{y} = \frac{\sum_{i=1}^{n} y_i}{n} &lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord accent"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;y&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="accent-body"&gt;&lt;span class="mord"&gt;ˉ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mopen nulldelimiter"&gt;&lt;/span&gt;&lt;span class="mfrac"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="frac-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mop mtight"&gt;&lt;span class="mop op-symbol small-op mtight"&gt;∑&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size3 size1 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;span class="mrel mtight"&gt;=&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size3 size1 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace mtight"&gt;&lt;/span&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;y&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size3 size1 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose nulldelimiter"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Estratégia
&lt;/h2&gt;

&lt;p&gt;A linha de regressão traçada aproxima os preços de fechamento dos candles do gráfico corrente indicando a tendência, as máximas acima e mínimas abaixo da linha de regressão indicam os pontos de compra e de venda respectivamente [2].&lt;/p&gt;

&lt;p&gt;As linhas de offset superior e inferior é uma estratégia para aproximar e facilitar a visualização das máximas e mínimas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cA4hK7U6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/74p4y2pu5sg5f6m688y3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cA4hK7U6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/74p4y2pu5sg5f6m688y3.png" alt="Exemplo da estratégia" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Metodologia
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Indicador
&lt;/h2&gt;

&lt;p&gt;O usuário deve configurar alguns parâmetros para a execução do indicador:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tamanho da janela: número de candles que serão considerados para o cálculo da regressão linear;&lt;/li&gt;
&lt;li&gt;Cor das linhas superior, de regressão e inferior;&lt;/li&gt;
&lt;li&gt;Estilo da linha superior, de regressão e inferior;&lt;/li&gt;
&lt;li&gt;Espessura da linha superior, de regressão e inferior;&lt;/li&gt;
&lt;li&gt;Distância da linha superior à linha de regressão;&lt;/li&gt;
&lt;li&gt;Distância da linha inferior à linha de regressão.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--odFX_VF7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m21zz3xge6w5nzwlztgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--odFX_VF7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m21zz3xge6w5nzwlztgl.png" alt="Exemplo de entradas Indicador" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este indicador traça três linhas paralelas, a central é uma linha de regressão com n definido pelo tamanho da janela configurada pelo usuário, as linhas superior e inferior são cópias da linha de regressão com um offset configurado pelo usuário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c1TW72wQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q3kwvil4n05llqc16kw7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c1TW72wQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q3kwvil4n05llqc16kw7.gif" alt="Exemplo funcionamento" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Expert Advisor
&lt;/h2&gt;

&lt;p&gt;O expert advisor (EA) é baseado no indicador supracitado, entretanto não desenha o indicador no gráfico, apenas executa uma estratégia com base na linha de regressão traçada.&lt;/p&gt;

&lt;p&gt;O usuário deve inserir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tamanho da janela: número de candles que serão considerados para o cálculo da regressão linear;&lt;/li&gt;
&lt;li&gt;A quantidade de candles a serem considerados no cálculo da regressão linear;&lt;/li&gt;
&lt;li&gt;A distância para a linha superior;&lt;/li&gt;
&lt;li&gt;A distância para a linha inferior;
Stop Loss.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iX7oONcl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3th8ql66n566ofacfwkk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iX7oONcl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3th8ql66n566ofacfwkk.png" alt="Exemplo de estradas EA" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O EA executa ordens de compra e de venda a mercado quando o valor de uma das linhas, superior ou inferior, é atingida pelo preço corrente, sendo que quando a linha inferior é atingida é executada uma ordem de compra e quando a linha superior é atingida uma ordem de venda é executada.&lt;/p&gt;

&lt;h1&gt;
  
  
  Resultados
&lt;/h1&gt;

&lt;p&gt;Foram executadas otimizações genéticas utilizando o testador de estratégias do Metatrader 5 na versão 5.00 build 2470, para otimizar o saldo máximo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Teste 1
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parâmetros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ativo: WINM20&lt;/li&gt;
&lt;li&gt;Período gráfico: 5 minutos;&lt;/li&gt;
&lt;li&gt;Data: 01/05/2020 a 01/06/2020;&lt;/li&gt;
&lt;li&gt;Modelagem: OHLC por 1 minuto;&lt;/li&gt;
&lt;li&gt;Depósito inicial demonstrativo: R$10.000,00;&lt;/li&gt;
&lt;li&gt;Volume de negociação fixado em 1 contrato.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Melhor retorno:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lucro: R$2.739,00;&lt;/li&gt;
&lt;li&gt;Lucro bruto: R$4.889,00;&lt;/li&gt;
&lt;li&gt;Perda máxima: -R$2.160,00;&lt;/li&gt;
&lt;li&gt;Número de operações: 186;&lt;/li&gt;
&lt;li&gt;Tamanho da janela otimizado: 40 candles;&lt;/li&gt;
&lt;li&gt;Limite superior otimizado: 26 pontos;&lt;/li&gt;
&lt;li&gt;Limite inferior otimizado: 100 pontos;&lt;/li&gt;
&lt;li&gt;Stop loss otimizado: 100.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Teste 2
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parâmetros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ativo: WINM20&lt;/li&gt;
&lt;li&gt;Período gráfico: 5 minutos;&lt;/li&gt;
&lt;li&gt;Data: 01/05/2020 a 01/06/2020;&lt;/li&gt;
&lt;li&gt;Modelagem: OHLC por 1 minuto;&lt;/li&gt;
&lt;li&gt;Depósito inicial demonstrativo: R$10.000,00;&lt;/li&gt;
&lt;li&gt;Volume de negociação fixado em 1 contrato;&lt;/li&gt;
&lt;li&gt;Stop loss fixado em 200 pontos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Melhor retorno:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lucro: R$3.141,00;&lt;/li&gt;
&lt;li&gt;Lucro bruto: R$4.781,00;&lt;/li&gt;
&lt;li&gt;Perda máxima: -R$1.640,00;&lt;/li&gt;
&lt;li&gt;Número de operações: 83;&lt;/li&gt;
&lt;li&gt;Tamanho da janela otimizado: 110 candles;&lt;/li&gt;
&lt;li&gt;Limite superior otimizado: 136 pontos;&lt;/li&gt;
&lt;li&gt;Limite inferior otimizado: 114 pontos;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;p&gt;Regressão Linear Simples. In: MORETTIN, Pedro; BUSSAB, Wilton. Estatística Básica. 6. ed. São Paulo - SP: Saraiva, 2010. cap. 16, p. 449-453.&lt;/p&gt;

&lt;p&gt;Regressão Linear. In: LEMOS, Flávio. Análise Técnica dos Mercados Financeiros: Um Guia Completo e Definitivo dos Mercados de Negociação de Ativos. São Paulo - SP: Saraiva, 2016. cap. 8.4, p. 215-217.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mql5.com/pt/market/product/49702#"&gt;MQL market - Indicador&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.mql5.com/pt/market/product/50016#"&gt;MQL market - Expert Advisor&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Timer para candlestick</title>
      <dc:creator>Abraão Moreira</dc:creator>
      <pubDate>Tue, 29 Jun 2021 15:16:28 +0000</pubDate>
      <link>https://dev.to/abraaom/candle-countdown-312d</link>
      <guid>https://dev.to/abraaom/candle-countdown-312d</guid>
      <description>&lt;h1&gt;
  
  
  Introdução
&lt;/h1&gt;

&lt;p&gt;Pessoas que realizam operações financeira em mercados financeiros muitas vezes utilizam gráficos de preços para visualizar o movimento do mercado e embasar suas decisões, um tipo de gráfico comum para este fim é o gráfico de candles, esse tipo de gráfico gera uma vela com indicações de preços de abertura, fechamento, máxima e mínima em um determinado período de tempo, terminado esse período uma nova vela começa a ser formada. O intuito deste trabalho é criar um cronômetro que indique a quantidade de tempo restante para o fechamento da vela corrente, oferecendo ao trader mais uma ferramenta que facilita a compreensão do gráfico.&lt;/p&gt;

&lt;h1&gt;
  
  
  Metodologia
&lt;/h1&gt;

&lt;p&gt;A função padrão OnCalculate possui entradas padronizadas que possibilitam a obtenção de algumas informações do ativo negociado uma delas é a informação de hora de abertura do candle, utilizando essa informação juntamente com a do período corrente no gráfico e o horário atual a contagem regressiva é calculada seguindo a seguinte equação:&lt;/p&gt;

&lt;p&gt;HR = HAb - HAt + P&lt;/p&gt;

&lt;p&gt;HR = Horário instantâneo para a contagem regressiva;&lt;/p&gt;

&lt;p&gt;HAb = Horário de abertura do candle corrente;&lt;/p&gt;

&lt;p&gt;HAt = Horário atual (último recebido pelo servidor);&lt;/p&gt;

&lt;p&gt;P = Período corrente no gráfico em que o indicador está aplicado.&lt;/p&gt;

&lt;h1&gt;
  
  
  Resultados e discussões
&lt;/h1&gt;

&lt;h2&gt;
  
  
  v1.00
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kkLyje_g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4dorl6vwclce97tleq3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kkLyje_g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4dorl6vwclce97tleq3.gif" alt="exemplo versão 1.00" width="508" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesta versão a exibição é feita por meio da função Comment, ou seja, o contador aparecerá no canto superior esquerdo do gráfico.&lt;/p&gt;

&lt;p&gt;Neste tipo de visualização o contador fica discreto e não interfere leitura do gráfico, embora seja de difícil leitura pelo tamanho da fonte padrão do método de exibição utilizado.&lt;/p&gt;

&lt;h2&gt;
  
  
  v1.01
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zzkyla0j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a5fe0sjje8ttejofir4v.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zzkyla0j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a5fe0sjje8ttejofir4v.gif" alt="Exemplo versão 1.01" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adicionada exibição utilizando objetos. Foi criado um objeto do tipo label e ancorado no topo superior direito, é possível editar o tamanho da fonte e a cor.&lt;/p&gt;

&lt;p&gt;Também foi adicionada a possibilidade de escolher entre os tipos de exibição, “comment” ou “Big Number”.&lt;/p&gt;

&lt;h2&gt;
  
  
  v1.02
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b4k53ybC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cp8ezi1tf67kygceunmx.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b4k53ybC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cp8ezi1tf67kygceunmx.gif" alt="Exemplo versão 1.02" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adicionada a exibição ainda por meio de objetos, mas agora com um objeto do tipo text, que é criado e movido de forma a seguir o preço de fechamento do último tick.&lt;/p&gt;

&lt;p&gt;É recomendável utilizar neste modo “On Price” uma fonte menor do que no modo “Big Number”.&lt;/p&gt;

&lt;p&gt;Nas exibições "Big number" e "On price" o usuário pode escolher a melhor forma de visualização do contador em termos de tamanho, cor e estilo da fonte.&lt;/p&gt;

&lt;h2&gt;
  
  
  v2.00
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Alteração da estratégia de implementação, agora utilizando programação orientada a objetos;&lt;/li&gt;
&lt;li&gt;Extração do funcionamento do relógio para uma biblioteca, que pode ser utilizada separadamente;&lt;/li&gt;
&lt;li&gt;Correção de bugs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Métodos da biblioteca:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GetCountdownValue&lt;/strong&gt;  - Retorna o valor da contagem regressiva em uma string;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CountdownUpdate&lt;/strong&gt; - Atualiza a variável interna que armazena o valor da contagem regressiva e atualiza os tipos de exibição que estão sendo utilizados ("comment", "big number" e "on price");&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CreateBigNumber&lt;/strong&gt; - Cria e configura a label do big number;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CreateComment&lt;/strong&gt; - Inicializa a exibição do tipo comment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CreateOnPrice&lt;/strong&gt; - Cria e configura a label do On Price&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/AbraaoM"&gt;
        AbraaoM
      &lt;/a&gt; / &lt;a href="https://github.com/AbraaoM/CandleCountdown"&gt;
        CandleCountdown
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Exibe uma contagem regressiva para o fechamento do candle corrente
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://www.mql5.com/pt/code/28175"&gt;Repositório MQL Community&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
