photo

Fórum Forex Brasil

Lugar da Comunidade Forex

+ Responder ao Tópico
Resultados de 1 a 1 de 1

Thread: OBJ_STDDEVCHANNEL | Desvio Padrão do Canal.

  1. #1 Fechar a publicação
    Senior Member jssuser's Avatar jssuser's Avatar
    Data de afiliação
    Aug 2018
    Postagens
    1,503
    Obrigado
    209
    Agradecimentos 831 Tempos em 532 Postagens
    AssinarAssinar
    subscritar: 0

    OBJ_STDDEVCHANNEL | Desvio Padrão do Canal.

    Desvio Padrão do Canal.
    Name:  objstddevchannel.png
Views: 78
Size:  5.4 KB

    Observação

    Para Desvio Padrão do Canal, é possível determinar o modo da continuação da sua exibição para a direita e/ou à esquerda (de acordo com as propriedades OBJPROP_RAY_RIGHT e OBJPROP_RAY_LEFT). O modo de preenchimento colorido do canal também pode ser definido.

    Propriedade OBJPROP_DEVIATION é usada para alterar o valor do desvio do canal.

    Exemplo

    O seguinte script cria e move um Desvio Padrão do Canal no gráfico. Funções especiais têm sido desenvolvidas para criar e alterar as propriedades do objeto gráfico. Você pode utilizar estas funções "as is" em seus próprios aplicativos.



    //--- descrição
    #property description "Script desenha objeto gráfico \"Desvio Padrão do Canal\"."
    #property description "Coordenadas dos pontos de ancoragem são definidos em percentagem do tamanho da"
    #property description "janela do gráfico."
    //--- janela de exibição dos parâmetros de entrada durante inicialização do script
    #property script_show_inputs
    //--- entrada de parâmetros do script
    input string InpName="StdDevChannel"; // Nome do canal
    input int InpDate1=10; // Data do 1º ponto, %
    input int InpDate2=40; // Data do 2º ponto, %
    input double InpDeviation=1.0; // Desvio
    input color InpColor=clrRed; // Cor do canal
    input ENUM_LINE_STYLE InpStyle=STYLE_DASHDOTDOT; // Estilo de linhas do canal
    input int InpWidth=2; // Largura das linhas do canal
    input bool InpFill=false; // Preenchendo o canal com cor
    input bool InpBack=false; // Canal de Fundo
    input bool InpSelection=true; // Destaque para mover
    input bool InpRayLeft=false; // Continuação do Canal para a esquerda
    input bool InpRayRight=false; // Continuação do Canal para a direita
    input bool InpHidden=true; // Ocultar na lista de objeto
    input long InpZOrder=0; // Prioridade para clicar no mouse
    //+------------------------------------------------------------------+
    //| Criar Regressão Linear do Canal pelas coordenadas dadas |
    //+------------------------------------------------------------------+
    bool StdDevChannelCreate(const long chart_ID=0, // ID do gráfico
    const string name="Channel", // nome do canal
    const int sub_window=0, // índice da sub-janela
    datetime time1=0, // primeiro ponto de tempo
    datetime time2=0, // segundo ponto de tempo
    const double deviation=1.0, // desvio
    const color clr=clrRed, // cor do canal
    const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas do canal
    const int width=1, // largura das linhas do canal
    const bool fill=false, // preenchendo o canal cor
    const bool back=false, // no fundo
    const bool selection=true, // destaque para mover
    const bool ray_left=false, // continuação do canal para a esquerda
    const bool ray_right=false, // continuação do canal para a direita
    const bool hidden=true, // ocultar na lista de objetos
    const long z_order=0) // prioridade para clique do mouse
    {
    //--- definir coordenadas de pontos de ancoragem, se eles não estão definidos
    ChangeChannelEmptyPoints(time1,time2);
    //--- redefine o valor de erro
    ResetLastError();
    //--- criar um canal pelas coordenadas dadas
    if(!ObjectCreate(chart_ID,name,OBJ_STDDEVCHANNEL,s ub_window,time1,0,time2,0))
    {
    Print(__FUNCTION__,
    ": falha ao criar o desvio padrão do canal! Código de erro = ",GetLastError());
    return(false);
    }
    //--- definir o valor de desvio que afeta a largura do canal
    ObjectSetDouble(chart_ID,name,OBJPROP_DEVIATION,de viation);
    //--- definir a cor do canal
    ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
    //--- definir o estilo de linha do canal
    ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style );
    //--- definir a largura da linha do canal
    ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width );
    //--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
    ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
    //--- exibir em primeiro plano (false) ou fundo (true)
    ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
    //--- habilitar (true) ou desabilitar (false) o modo de preenchimento do canal
    //--- ao criar um objeto gráfico usando a função ObjectCreate, o objeto não pode ser
    //--- destacado e movimentado por padrão. Dentro deste método, o parâmetro de seleção
    //--- é verdade por padrão, tornando possível destacar e mover o objeto
    ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE, selection);
    ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,se lection);
    //--- habilitar (true) ou desabilitar (false) o modo de continuação da exibição do canal a esquerda
    ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ra y_left);
    //--- habilitar (true) ou desabilitar (false) o modo de continuação da exibição do canal a direita
    ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,r ay_right);
    //--- ocultar (true) ou exibir (false) o nome do objeto gráfico na lista de objeto
    ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidd en);
    //--- definir a prioridade para receber o evento com um clique do mouse no gráfico
    ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_or der);
    //--- sucesso na execução
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Mover ponto de ancoragem |
    //+------------------------------------------------------------------+
    bool StdDevChannelPointChange(const long chart_ID=0, // Id do Gráfico
    const string name="Channel", // nome do canal
    const int point_index=0, // índice do ponto de ancoragem
    datetime time=0) // coordenada do ponto de ancoragem do tempo
    {
    //--- se o tempo de ponto não está definido, mover o ponto para o barra atual
    if(!time)
    time=TimeCurrent();
    //--- redefine o valor de erro
    ResetLastError();
    //--- mover o ponto de ancoragem
    if(!ObjectMove(chart_ID,name,point_index,time,0))
    {
    Print(__FUNCTION__,
    ": falha ao mover o ponto de ancoragem! Código de erro = ",GetLastError());
    return(false);
    }
    //--- sucesso na execução
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Alterar o desvio do canal |
    //+------------------------------------------------------------------+
    bool StdDevChannelDeviationChange(const long chart_ID=0, // ID do gráfico
    const string name="Channel", // nome do canal
    const double deviation=1.0) // desvio
    {
    //--- redefine o valor de erro
    ResetLastError();
    //--- mudar o ângulo de inclinação da linha de tendência
    if(!ObjectSetDouble(chart_ID,name,OBJPROP_DEVIATIO N,deviation))
    {
    Print(__FUNCTION__,
    ": falha ao mudar o desvio de canal! Código de erro = ",GetLastError());
    return(false);
    }
    //--- sucesso na execução
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Excluir o canal |
    //+------------------------------------------------------------------+
    bool StdDevChannelDelete(const long chart_ID=0, // ID do gráfico
    const string name="Channel") // nome do canal
    {
    //--- redefine o valor de erro
    ResetLastError();
    //--- excluir o canal
    if(!ObjectDelete(chart_ID,name))
    {
    Print(__FUNCTION__,
    ": falha ao excluir o canal! Código de erro = ",GetLastError());
    return(false);
    }
    //--- sucesso na execução
    return(true);
    }
    //+-------------------------------------------------------------------------+
    //| Ver os valores de pontos de ancoragem do canal e definir valores padrão |
    //| para aqueles que estão vazios |
    //+-------------------------------------------------------------------------+
    void ChangeChannelEmptyPoints(datetime &time1,datetime &time2)
    {
    //--- se o tempo do primeiro ponto não está definido, será na barra atual
    if(!time2)
    time2=TimeCurrent();
    //--- se o tempo do primeiro ponto não está definido, está localizado 9 barras a esquerda partir da segunda
    if(!time1)
    {
    //--- array para receber o tempo de abertura das últimos 10 barras
    datetime temp[10];
    CopyTime(Symbol(),Period(),time2,10,temp);
    //--- definir o primeiro ponto 9 barras a esquerda do segundo
    time1=temp[0];
    }
    }
    //+------------------------------------------------------------------+
    //| Programa Script da função start (iniciar) |
    //+------------------------------------------------------------------+
    void OnStart()
    {
    //--- verificar a exatidão dos parâmetros de entrada
    if(InpDate1<0 || InpDate1>100 ||
    InpDate2<0 || InpDate2>100)
    {
    Print("Erro! Valores incorretos dos parâmetros de entrada!");
    return;
    }
    //--- número de barras visíveis na janela do gráfico
    int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
    //--- tamanho do array de preço
    int accuracy=1000;
    //--- arrays para armazenar data e valores de preço para serem usados
    //--- para definir e alterar as coordenadas de pontos de ancoragem do canal
    datetime date[];
    double price[];
    //--- alocação de memória
    ArrayResize(date,bars);
    ArrayResize(price,accuracy);
    //--- preencher o array das datas
    ResetLastError();
    if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
    {
    Print("Falha ao copiar valores de tempo! Código de erro = ",GetLastError());
    return;
    }
    //--- preencher o array de preços
    //--- encontrar os maiores e menores valores do gráfico
    double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
    double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
    //--- definir uma etapa de mudança de um preço e preencher o array
    double step=(max_price-min_price)/accuracy;
    for(int i=0;i<accuracy;i++)
    price[i]=min_price+i*step;
    //--- definir pontos para desenhar o canal
    int d1=InpDate1*(bars-1)/100;
    int d2=InpDate2*(bars-1)/100;
    //--- criar desvio padrão do canal
    if(!StdDevChannelCreate(0,InpName,0,date[d1],date[d2],InpDeviation,InpColor,InpStyle,
    InpWidth,InpFill,InpBack,InpSelection,InpRayLeft,I npRayRight,InpHidden,InpZOrder))
    {
    return;
    }
    //--- redesenhar o gráfico e esperar por um segundo
    ChartRedraw();
    Sleep(1000);
    //--- agora, o canal horizontal para a direita e expandi-lo
    //--- contador de loop
    int h_steps=bars/2;
    //--- mover o canal
    for(int i=0;i<h_steps;i++)
    {
    //--- usar os seguintes valores
    if(d1<bars-1)
    d1+=1;
    if(d2<bars-1)
    d2+=1;
    //--- mover os pontos de ancoragem
    if(!StdDevChannelPointChange(0,InpName,0,date[d1]))
    return;
    if(!StdDevChannelPointChange(0,InpName,1,date[d2]))
    return;
    //--- verificar se o funcionamento do script foi desativado a força
    if(IsStopped())
    return;
    //--- redesenhar o gráfico
    ChartRedraw();
    // 0.05 segundos de atraso
    Sleep(50);
    }
    //--- 1 segundo de atraso
    Sleep(1000);
    //--- contador de loop
    double v_steps=InpDeviation*2;
    //--- expandir o canal
    for(double i=InpDeviation;i<v_steps;i+=10.0/accuracy)
    {
    if(!StdDevChannelDeviationChange(0,InpName,i))
    return;
    //--- verificar se o funcionamento do script foi desativado a força
    if(IsStopped())
    return;
    //--- redesenhar o gráfico
    ChartRedraw();
    }
    //--- 1 segundo de atraso
    Sleep(1000);
    //--- excluir o canal do gráfico
    StdDevChannelDelete(0,InpName);
    ChartRedraw();
    //--- 1 segundo de atraso
    Sleep(1000);
    //---
    }

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  2. The Following User Says Thank You to jssuser For This Useful Post:

    Não registrado (1 )

+ Responder ao Tópico

Permissões de postagens

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts