English Русский 中文 Español Deutsch 日本語
preview
Indicadores com controles interativos no gráfico

Indicadores com controles interativos no gráfico

MetaTrader 5Indicadores | 23 agosto 2022, 08:11
725 0
Aleksandr Kononov
Aleksandr Kononov

Introdução

Eu tenho negociado desde 2008 acumulando uma quantidade decente de conhecimento ao longo do caminho. Agora eu uso esse conhecimento para desenvolver os meus produtos. Tendo tentado dezenas de diferentes estratégias de negociação ao longo dos anos, além de ter testado centenas de indicadores diferentes, eu cheguei a algumas conclusões que quero compartilhar com você neste artigo. Agora, assim como antes, a qualidade das plataformas de negociação da MetaTrader está fora de dúvida. Mas nas condições modernas, os usuários estão se tornando mais exigentes com os produtos fornecidos a eles. Então, eu pensei que seria legal criar um princípio que pudesse ser facilmente aplicado a qualquer indicador. Esse princípio visa uma maior interação entre um usuário e um programa. 


Sobre os indicadores

As plataformas MetaTrader oferecem vários tipos de programas de negociação. Estes são Expert Advisors (EAs), scripts e indicadores. Eu vou falar sobre os indicadores.

Existem diferentes tipos de indicadores: linhas de suporte/resistência, fractais ou padrões de velas, volumes ou outros dados sobre as operações de negociação na bolsa de valores, osciladores ou histogramas. Nós precisamos de todos eles para mostrar um certo padrão de movimento de preços, que, por sua vez, forma um sinal de negociação. Quanto mais frequente o padrão ocorrer, mais forte será o sinal. 

Um padrão é um movimento de preço repetitivo ou muito semelhante que ocorre em determinadas leituras do indicador. Por exemplo, se a média móvel rápida cruzar a lenta para cima, enquanto o preço a cruza para baixo, é mais provável que o preço salte dessa linha e continue subindo. Esses padrões podem ser encontrados ao usar qualquer indicador. 

Cada indicador, independentemente de sua finalidade, apresenta padrões para um determinado período de tempo. Isso significa que um sinal é formado com base nos movimentos do histórico de preços. Pode ser 10 barras H1 ou 1000 barras D1. Um período de tempo, no qual estamos procurando um padrão, é chamado no indicador de "period".

Como todos os indicadores são calculados com base nos dados históricos, qualquer indicador tem um período de cálculo. Se nós definirmos o valor do período para 100 e colocarmos o indicador no gráfico H1, nós obteremos o resultado do cálculo do indicador para as últimas 100 velas H1. O período do indicador permanece inalterado até que o alteremos por conta própria. Se a natureza do movimento do preço mudar, por exemplo, o movimento se tornar mais volátil, nós teremos que aumentar o período para que o indicador corresponda à situação atual do mercado. 

Para fazer isso, nós precisaremos acessar as configurações do indicador e selecionar um novo valor do período. O parâmetro terá que ser alterado passo a passo. O passo deve ser selecionado intuitivamente — não deve ser muito grande para não perder o sinal desejado, mas também não muito pequeno — para não gastar muito tempo nele. Se você fizer isso com frequência durante o dia, você poderá gastar uma quantidade significativa de tempo nisso. Na verdade, trabalhar com os indicadores é uma espécie de compromisso entre o resultado desejado, sua precisão e o tempo que um trader está disposto a gastar.

Outra opção é abrir todos os gráficos necessários de uma só vez com diferentes configurações de indicadores. Nesse caso, todo o espaço de trabalho está cheio de janelas contendo indicadores do mesmo tipo que são diferentes uns dos outros apenas nas configurações do período. Esta solução também não é perfeita em termos de organização do espaço de trabalho. Infelizmente, ambas as opções estão longe de ser convenientes.


O coração da questão

Quero destacar o problema usando uma estratégia de negociação que eu tenho usado em minhas negociações há muito tempo. Eu acho que muitos traders enfrentam o mesmo problema todos os dias. Alguns não percebem e dão como certo, enquanto para outros cria-se desconforto, assim como para mim. A estratégia é baseada nas indicações das linhas da Média Móvel. Ele funciona bem em movimentos de tendência. Sua essência está no fato de que, se uma tendência começou, provavelmente ela continuará, e o sinal de negociação é o retorno do preço à linha lenta durante a correção. 

Para calcular o período da linha lenta, nós precisamos encontrar uma certa posição das médias móveis rápidas e lentas durante a correção anterior. 

pic_01

Para encontrar um período necessário, você precisa executar várias operações repetitivas. A peculiaridade desta estratégia é que os períodos da linha devem sempre diferir de duas vezes. Por exemplo, se o período da linha rápida for 20, o período da linha lenta deverá ser igual a 40. Nesse caso, você precisa encontrar o valor mínimo para os períodos da linha, em que a linha rápida não cruzará a lenta durante a correção. A imagem mostra as linhas de período igual a 25 e 50, respectivamente. Como nós podemos ver, as linhas não se cruzaram durante a correção anterior. Assim, nós podemos reduzir ainda mais os seus períodos. Abrimos as configurações da linha rápida e alteramos o período. Em seguida, abrimos as configurações da linha lenta e alteramos também o período. Nós teremos que fazer esta operação várias vezes até que as linhas convirjam o mais próximo possível.

pic_03

As linhas ainda não estão se cruzando. Mas primeiro nós precisamos encontrar a posição extrema na qual as linhas se cruzam e, em seguida, aumentam o seu período em um passo. Assim, nós alteramos novamente as configurações do período para 7 e 14, respectivamente.

  

pic_04

Agora nós temos a interseção. Isso significa que uma posição extrema foi encontrada e agora é necessário aumentar os períodos em um passo. Abrimos as configurações de cada linha novamente e alteramos os valores do período.

pic_05

Como resultado, a combinação desejada dos parâmetros da linha foi encontrada e o sinal foi gerado com sucesso. No entanto, a preparação para a busca levou um certo tempo e me obrigou a me envolver em ações monótonas, até mesmo tediosas. Não se esqueça que este é apenas um período de tempo em um único par de moedas. Para acompanhar vários pares de moedas em diferentes períodos de tempo, essas ações terão que ser realizadas com muita frequência. Minha experiência mostra que o processo leva pelo menos metade do tempo de trabalho ao usar os períodos de minutos. Esta estratégia é provavelmente bastante popular. Eu acho que muitos traders usam algo semelhante em suas negociações diárias.

As desvantagens da estratégia são óbvias. Além do fato de que essas manipulações constantes com as configurações dos indicadores levam muito tempo, elas também distraem a atividade principal - a negociação. Enquanto você seleciona um novo parâmetro da linha, podemos perder um sinal já formado em outro par de moedas ou de outro período de tempo. Além disso, você pode deixar de fechar um negócio a tempo, com lucro máximo ou perda mínima. Além disso, após várias horas de trabalho, qualquer pessoa começa a se cansar. Ações monótonas baixam a guarda do trader, aumentando o risco de um erro para não falar do tempo gasto. depois de vários anos trabalhando em um monitor de computador, você começa a valorizar o seu tempo e a entender a importância dessas coisas aparentemente insignificantes.


Princípio da interface

A ideia por trás da interface é rolar o período do indicador com a roda do mouse diretamente do gráfico sem ter que entrar nas suas configurações. Nós usaremos o botão para ativar o modo de rolagem.

Baixe o código fonte do indicador Button CCI no arquivo anexo para experimentá-lo ou baixe a última versão gratuita com os recursos adicionais e veja uma descrição detalhada de suas configurações seguindo o link.

A questão é clara. Obviamente, nós precisamos de alguma forma acelerar a definição do período. Há apenas uma maneira de fazer isso — automatizando o processo. É possível criar um algoritmo que irá selecionar os valores do período por conta própria. Mas o algoritmo ainda precisa de seu próprio período de cálculo! Isso significa que nós temos que definir manualmente o número de velas usadas pelo algoritmo para selecionar o período da Média Móvel! Este é um tipo de Meta período. Isso resolverá o problema do tempo gasto na seleção do período desejado, mas essa solução tem suas desvantagens devido à sua complexidade. Essa abordagem é implementada no indicador gratuito das Médias Móveis Duplas Dinâmicas. No futuro, eu pretendo melhorá-lo para que seja mais gerenciável e responsivo às alterações nas configurações inseridas por um usuário.

Outro método é, na minha opinião, mais simples e ao mesmo tempo mais interativo. Ele envolve a alteração do período por um trader, embora de uma forma mais conveniente. Afinal, não importa quão inteligente seja o algoritmo, os traders ainda sabem melhor quais configurações de indicadores eles precisam, e nossa tarefa é ajudá-los e facilitar o processo. Para alterar o período, nós usaremos o botão de rolagem com a roda do mouse. O próprio modo de rolagem será ativado ao ligar o botão direito no gráfico.


GIF_01

A imagem mostra como é fácil alterar o período do indicador com um único movimento. Basta ativar o botão do indicador necessário e rolar a roda do mouse na direção desejada. Você também pode definir um passo de alteração do período. Você também pode alterar o período de vários indicadores de uma só vez, através da ativação dos botões necessários. Esses recursos são ótimos para a estratégia descrita acima. Por exemplo, você pode definir a etapa para alterar a linha rápida para 1 e a linha lenta para 2, habilitar a rolagem para ambas as linhas e alterar facilmente seus períodos ao mesmo tempo, mantendo a proporção de 1/2.


Vantagens

    Os indicadores com essa interface têm várias vantagens.
    • Primeiro, os traders podem ajustar o período do indicador como costumam fazer, embora gastem muito menos tempo e esforço.
    • Segundo essa interface é intuitiva e fácil de usar. Após o uso prolongado de tal indicador, você não desejará mais retornar à interface padrão.
    • Além disso, o uso de tal indicador permite que você use apenas uma janela substituindo vários indicadores do mesmo tipo por um. Isso liberará a tela de trabalho da desordem.
    • Outra vantagem é a melhoria na qualidade da negociação devido ao aumento da concentração no próprio processo, e não nas configurações do indicador.
    • A busca por sinais em um mercado em rápida mudança também é acelerada, o que ajuda a aumentar a produtividade do trader.

    Desvantagens

    Com todas essas vantagens, essa interface tem suas desvantagens.

    • Primeiro, é difícil reproduzi-lo para a MetaTrader 4 devido a restrições técnicas da linguagem MQL4.
    • Em segundo lugar, ao realizar os cálculos em uma grande quantidade de dados (mais de 20.000 barras), os indicadores perdem desempenho de forma visível.

    Mas a análise do histórico não é necessária com tanta frequência e você pode limitar a quantidade de dados para o cálculo para uso diário. Essas deficiências não são críticas e não interferem no uso diário de tais indicadores na MetaTrader 5.


    Criando um indicador com a rolagem do período com base na Média Móvel

    Com base no exposto acima, eu decidi que seria útil criar um indicador com a interface mais conveniente que poupasse os usuários de ações rotineiras. Além disso, o objetivo era criar o princípio mais simples para a maioria dos indicadores, de modo que uma interface semelhante pudesse ser facilmente reproduzida em qualquer outro indicador.

    Eu decidi usar o indicador mais popular — Média Móvel — como exemplo. A complexidade da ideia está no fato de que, se nós quisermos alterar dinamicamente o período, nós teremos que usar dezenas e até centenas de indicadores ao mesmo tempo. Como o sistema distingue os indicadores usados em uma janela por um nome curto e um conjunto de parâmetros, o conjunto de parâmetros sempre diferirá no parâmetro "period" a cada etapa de alteração, e um novo identificador de indicador será criado para cada período, o que pode retardar significativamente o trabalho. Enquanto eu procurava por uma solução, eu me deparei com críticas a esse método nos fóruns. Programadores experientes disseram que tal implementação é proibida no nível da linguagem e geralmente é impossível, pois o estouro de memória é inevitável (encontrei constantemente na MetaTrader 4). De fato, para a MetaTrader 4, o problema é insolúvel.

    No entanto, em MQL5, é criado um manipulador para cada indicador no gráfico uma única vez e, em seguida, acessamos ele quando necessário. Em outras palavras, mesmo se nós criássemos um novo manipulador em cada tick, ele não será criado novamente, mas acessamos o que já foi criado. Isso já facilita as coisas para a memória. Mas é possível criar todos os manipuladores necessários na OnInit com antecedência, para que nós possamos esquecer completamente esse problema. A única limitação está no fato de que nós precisamos predefinir dentro de quais limites o período mudará para criar todos os manipuladores necessários ao inicializar o indicador. O período máximo é limitado antecipadamente pelo trader nas configurações através do parâmetro period_ma_max. Usando o passo, nós economizamos ainda mais memória evitando o cálculo de manipuladores desnecessários. O passo é definido pelo trader também. O valor padrão é 1.

    int OnInit()
    {
    //Create all necessary handles
    for(int i=1; i<=period_ma_max; i+=step)
        handle=iMA(_Symbol,_Period,i,0,method_MA,price_MA);
         
    }
    
    

    Agora nós precisamos criar a funcionalidade para implementar a rolagem do período. Para fazer isso, vamos criar um botão no gráfico ativando o modo de rolagem do período usando a roda do mouse.

    //+------------------------------------------------------------------+
    //|              CREATING BUTTON IN OnInit()                          
    //+------------------------------------------------------------------+
     
       ObjectDelete(0,name);
       ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
       ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
       ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr_Text_Button);
       ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clr_Button);
       ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
       ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,distance_X);
       ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,distance_Y);
       ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,size_X);
       ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,size_Y);
       ObjectSetInteger(chart_ID,name,OBJPROP_STATE,true);
       ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,true);
       ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,true);
       ObjectSetInteger(chart_ID,name,OBJPROP_STATE,press_Button);
       ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);
    
       ChartRedraw();
    
    

    Ao carregar dois ou mais indicadores em um gráfico, seus botões são criados no mesmo local, o que é inconveniente. Portanto, ao adicionar cada indicador subsequente, nós precisamos deslocar o botão ao longo de algum eixo. Para fazer isso, primeiro você precisa calcular exatamente quantos de nossos indicadores já foram carregados no gráfico. Primeiro, vamos encontrar o número total de indicadores na janela:

    int      total_Indicators=ChartIndicatorsTotal(0,0),
             this_indicators=0;
    
    

    Em seguida, escolhemos nossos indicadores a partir deles:

    for(int i=0; i<total_Indicators; i++)
         {
          if(ChartIndicatorName(0,0,i)=="Button_MA")
             this_indicators++;
         }
    IndicatorSetString(INDICATOR_SHORTNAME,"Button_MA")
    
    

    Ao buscar por um indicador por um nome abreviado dessa maneira, nós devemos sempre lembrar que, se criarmos um nome do indicador abreviado após o loop, o nome do indicador atual que adicionamos ao gráfico corresponderá ao nome do arquivo. Nesse caso, se o nome do arquivo for diferente de INDICATOR_SHORTNAME, o indicador atual no loop não será calculado.

    Agora movemos o botão pelo eixo X:

    distance_X=size_X*this_indicators;

    Depois disso, os botões de todos os indicadores adicionados ao gráfico aparecem em uma linha. Infelizmente, um usuário terá que renomear o botão ao adicionar mais de um indicador a um gráfico ou pelo menos alterar outras entradas de indicadores nas configurações. Isso acontece porque é proibido adicionar indicadores com as mesmas entradas em uma janela na MetaTrader 5. Nada pode ser feito sobre isso, então nós teremos que deixar a mudança manual de configurações para o trader. Como nem sempre é necessário alterar essas configurações, vamos mover o nome do botão para as configurações do indicador. Dessa forma, nós mataremos dois coelhos com uma cajadada só: nós alteraremos as entradas do indicador e forneceremos nomes diferentes para os objetos no mesmo gráfico. Além disso, botões com nomes diferentes são mais informativos e convenientes. 

    input string  name_Line = "MA_1"; 
    string   name = name_Line,
             text = name_Line;
    
    

    Agora, quando um usuário renomeia cada botão, indicadores e botões são facilmente adicionados à janela, e o texto exibido nos botões corresponde aos seus nomes. Os botões estão prontos. Agora nós precisamos criar um mecanismo para rolar o período. Ativamos os eventos do botão de rolagem e de clique do mouse.

    ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
    ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
    
    
    

    Em seguida, trabalhamos na função OnChartEvent(). Verificamos se o botão está pressionado. Se não, exibimos o seu nome nele. Se o botão for pressionado, ativamos o modo de rolagem do período do indicador e desativamos a rolagem do próprio gráfico. Assim, se o botão não for pressionado, habilitamos a rolagem do gráfico para trás.


    void OnChartEvent(const int id,
                      const long &lparam,
                      const double &dparam,
                      const string &sparam)
      {
    //---
       if(!press_Button)
          ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
       if(id==CHARTEVENT_OBJECT_CLICK)
         {
          if(sparam==name)
            {
             press_Button=ObjectGetInteger(chart_ID,name,OBJPROP_STATE);
             if(press_Button)
               {
                scroll_Button=true;
                ChartSetInteger(0,CHART_MOUSE_SCROLL,0);
                ChartRedraw();
               }
             else
               {
                scroll_Button=false;
                ChartSetInteger(0,CHART_MOUSE_SCROLL,1);
                ChartRedraw();
               }
            }
         }
      }
    
    

    Se o modo de rolagem do período estiver ativado, verificamos o estado do botão de rolagem do mouse. Dependendo de sua direção de rolagem, nós adicionamos ou subtraímos o período. O valor total do botão de rolagem é acionado quando ele atingir +120 ou -120.

    if(scroll_Button)
          if(id==CHARTEVENT_MOUSE_WHEEL)
            {
             int delta = (int)dparam;
             if(delta>119)
                if(period_ma<period_ma_max)
                  {
                   period_ma+=step;
                   ChartRedraw();
                  }
             //
             if(delta < -119)
                if(period_ma>step)
                  {
                   period_ma-=step;
                   ChartRedraw();
                  }
    
    

    Aqui, nós acessamos o manipulador do indicador com um novo período e redesenhamos a linha do indicador ('total' é definido no OnCalculate). Além disso, alteramos o texto do botão do nome para o período atual.

    handle = iMA(_Symbol,_Period,period_ma,0,method_MA,price_MA);
          
             ArraySetAsSeries(Label1Buffer,true);
             for(int i = 0; i<total; i++)
               {
                double MA[];
                CopyBuffer(handle,0,i,1,MA);
                Label1Buffer[i]=MA[0];
           
                ChartRedraw();
    
               }
             ArraySetAsSeries(Label1Buffer,false);
             if(press_Button)
                ObjectSetString(chart_ID,name,OBJPROP_TEXT,IntegerToString(period_ma));
            }
    
    

    Aqui, nós redesenhamos a linha para que nós não tenhamos que esperar um novo tick para exibir a linha do indicador com um novo período. Assim, a linha é sempre reconstruída instantaneamente, independentemente da chegada de um novo tick.

    Outra limitação que não pode ser contornada diz respeito ao botão. Se o modo de arrastar e soltar estiver ativado, o modo de pressionar o botão será desativado e vice-versa. Portanto, nós podemos arrastar o botão para um local mais conveniente apenas uma vez. Após desabilitar o modo arrastar e soltar, nós não o habilitaremos mais. Durante a próxima inicialização, o botão não se lembrará de sua posição e retornará ao seu local original na linha geral.

    if(id==CHARTEVENT_OBJECT_CLICK)
         {
          if(sparam==name)
            {
             long select = ObjectGetInteger(chart_ID,name,OBJPROP_SELECTED);
             if(select==0)
               {
                ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,false);
                ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,false);
                flag_drag=false;
               }
             ChartRedraw();
             }
          }
    
    

    A linha principal do indicador é feita na OnCalculate(); como sempre

    total=rates_total-1;
       if(Limit_for_Calc)
          if(total>Limit)
             total=Limit;
       handle = iMA(_Symbol,_Period,period_ma,0,method_MA,price_MA);
       if(handle==INVALID_HANDLE)
         {
          Print("invalid handle ");
          return(rates_total);
         }
       ResetLastError();
       while(BarsCalculated(handle)<=0)
         {
          // indicator values are not calculated yet, try next time
          return(0);
         }
    
       for(int i = prev_calculated>0?prev_calculated-1:0; i<rates_total; i++)
         {
          double MA[];
          CopyBuffer(handle,0,time[i],1,MA);
          Label1Buffer[i]=MA[0]+level;
         }
    
    
    Aqui nós podemos limitar o cálculo da linha ao rolar apenas os dados mais recentes para economizar recursos computacionais. Para fazer isso, deixamos o trader selecionar se ele deseja habilitar o limite de cálculo nas configurações e quantas barras devem ser tomadas para os cálculos.
    input bool    Limit_for_Calc = false;
    input int     Limit = 20000;
    
    


    Resultado

    Nós analisamos os principais pontos do desenvolvimento do indicador. O resultado é um indicador completo que não é inferior ao padrão, embora ele seja mais conveniente. No entanto, ele ainda tem alguns inconvenientes. Por exemplo, eu experimentei uma desaceleração no histórico de mais de 20.000 barras. Mas a análise do histórico não é necessária com tanta frequência e você pode limitar o número de barras para o cálculo para uso diário. A Renomeação dos botões de forma manual e a incapacidade de arrastar um botão mais de uma vez são bem inconvenientes também.

    Geralmente, os objetivos foram alcançados — o indicador muda suavemente o período ao rolar a roda do mouse, enquanto a função de rolagem é ativada e desativada ao pressionar apenas um botão no gráfico.


    Conclusão

    Tal interface, embora sem a ausência de falhas, ainda pode ser chamada de mais conveniente que a padrão. Ele permite que os traders obtenham as configurações dos indicadores necessárias com o mínimo de esforço e tempo, remove os indicadores do mesmo tipo do espaço de trabalho e fornece sinais mais precisos dentro de um período limitado de tempo em um mercado em rápida mudança. 

    Os indicadores criados usando essa interface são fáceis de usar, intuitivos e economizam tempo. Eles permitem que você se concentre na negociação, melhorando assim a sua qualidade e aumentando a sua produtividade. 

    Além disso, essa abordagem permite que você obtenha não apenas o período final, mas também quaisquer outras configurações que deseja colocar em um botão ou painel. Tais configurações podem incluir cor, espessura da linha, tamanho do objeto, etc. Além da rolagem, você pode arrastar os objetos, teclas de atalho ou simplesmente passar o cursor sobre um objeto ou área do gráfico. Uma das funções é implementada no indicador Button MA. Ele permite que você use a rolagem do período não apenas ao pressionar o botão, mas também passando o mouse sobre ele. Além disso, ele lembra as posições dos botões depois de arrastar, mesmo que você altere o período de tempo.

    O artigo abordou as etapas básicas para criar um indicador com rolagem de período com base na Média Móvel. No anexo abaixo, você encontra o código do indicador pronto baseado no CCI. Ele é ainda mais simples, pois os botões no gráfico não precisam ser renomeados, independentemente do seu número. Seus nomes são indexados automaticamente, de acordo com o número de botões definidos.

    GIF_02


    Traduzido do russo pela MetaQuotes Ltd.
    Artigo original: https://www.mql5.com/ru/articles/10770

    Arquivos anexados |
    Button_CCI.mq5 (28.95 KB)
    DoEasy. Controles (Parte 7): Controle "Rótulo" DoEasy. Controles (Parte 7): Controle "Rótulo"
    Neste artigo, criaremos a classe do objeto de controle WinForms "Rótulo". Tal objeto poderá ser posicionado em qualquer lugar de seu contêiner, e sua respectiva funcionalidade replicará parte da funcionalidade do rótulo de texto do MS Visual Studio, para que possamos definir parâmetros de fonte para o texto exibido.
    DoEasy. Controles (Parte 6): Controle "Painel", redimensionamento automático do contêiner para adequá-lo ao seu conteúdo DoEasy. Controles (Parte 6): Controle "Painel", redimensionamento automático do contêiner para adequá-lo ao seu conteúdo
    Neste artigo, continuaremos trabalhando no objeto WinForms "Painel" e geraremos seu redimensionamento automático em função do tamanho geral dos objetos Dock localizados dentro dele. Além disso, adicionaremos novas propriedades ao objeto de biblioteca "Símbolo".
    Como melhorar em aprendizado de máquina Como melhorar em aprendizado de máquina
    Esta é uma seleção de materiais que será útil para que os operadores possam melhorar seus conhecimentos sobre negociação algorítmica. Os algoritmos simples são coisa do passado, agora é difícil alcançar o sucesso sem o uso de aprendizado de máquina e redes neurais.
    Desenvolvendo um EA de negociação do zero (Parte 28): Em direção ao futuro (III) Desenvolvendo um EA de negociação do zero (Parte 28): Em direção ao futuro (III)
    Nosso sistema de ordem ainda não consegue fazer uma coisa. Mas aqui vamos resolver FINALMENTE isto ....