photo

Fórum Forex Brasil

Lugar da Comunidade Forex

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

Thread: OBJ_ARROW_DOWN Sinal Arrow Down.

  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 957 Tempos em 558 Postagens
    AssinarAssinar
    subscritar: 0

    OBJ_ARROW_DOWN Sinal Arrow Down.

    Name:  objarrowdown.png
Views: 142
Size:  5.4 KB

    Observação

    Posição do ponto de ancoragem relativa ao sinal pode ser selecionado a partir do enumerador ENUM_ARROW_ANCHOR.

    Sinais de grande porte (mais de 5) somente serão criados, definindo corretamente o valor da propriedade OBJPROP_WIDTH ao escrever um código no MetaEditor.

    Exemplo

    O seguinte script cria e move sinal Arrow Down 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 sinal \"Arrow Down\"."
    #property description "Coordenadas do ponto de ancoragem é definido em"
    #property description "porcentagem do tamanho da janela de 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="ArrowDown"; // Nome do Sinal
    input int InpDate=75; // Ponto de ancoragem da data em %
    input int InpPrice=75; // Ponto de ancoragem do preço em %
    input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_BOTTOM; // Tipo de Ancoragem
    input color InpColor=clrRed; // Cor do sinal
    input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Estilo de linha da borda
    input int InpWidth=5; // Tamanho do Sinal
    input bool InpBack=false; // Fundo do sinal
    input bool InpSelection=false; // Destaque para mover
    input bool InpHidden=true; // Ocultar na lista de objetos
    input long InpZOrder=0; // Prioridade para clique do mouse
    //+------------------------------------------------------------------+
    //| Criar sinal Arrow Down |
    //+------------------------------------------------------------------+
    bool ArrowDownCreate(const long chart_ID=0, // ID do gráfico
    const string name="ArrowDown", // nome do sinal
    const int sub_window=0, // índice da sub-janela
    datetime time=0, // ponto de ancoragem do tempo
    double price=0, // ponto de ancoragem do preço
    const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // tipo de ancoragem
    const color clr=clrRed, // cor do sinal
    const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo da linha da borda
    const int width=3, // tamanho do sinal
    const bool back=false, // no fundo
    const bool selection=true, // destaque para mover
    const bool hidden=true, // Ocultar na lista de objetos
    const long z_order=0) // prioridade para clicar no mouse
    {
    //--- definir as coordenadas de pontos de ancoragem, se eles não estão definidos
    ChangeArrowEmptyPoint(time,price);
    //--- redefine o valor de erro
    ResetLastError();
    //--- criar o sinal
    if(!ObjectCreate(chart_ID,name,OBJ_ARROW_DOWN,sub_ window,time,price))
    {
    Print(__FUNCTION__,
    ": falha ao criar o sinal \"Arrow Down\"! Código de erro = ",GetLastError());
    return(false);
    }
    //--- tipo de ancoragem
    ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anch or);
    //--- definir uma cor de sinal
    ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
    //--- definir o estilo da linha da borda
    ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style );
    //--- tamanho da definição do sinal
    ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width );
    //--- exibir em primeiro plano (false) ou fundo (true)
    ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
    //--- permitir (true) ou desabilitar (false) o modo de movimento do sinal com o mouse
    //--- 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);
    //--- 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 ArrowDownMove(const long chart_ID=0, // ID do gráfico
    const string name="ArrowDown", // nome do objeto
    datetime time=0, // coordenada do ponto de ancoragem de tempo
    double price=0) // coordenada do ponto de ancoragem de preço
    {
    //--- se a posição do ponto não está definida, mover para a barra atual tendo o preço Bid
    if(!time)
    time=TimeCurrent();
    if(!price)
    price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
    //--- redefine o valor de erro
    ResetLastError();
    //--- mover o ponto de ancoragem
    if(!ObjectMove(chart_ID,name,0,time,price))
    {
    Print(__FUNCTION__,
    ": falha ao mover o ponto de ancoragem! Código de erro = ",GetLastError());
    return(false);
    }
    //--- sucesso na execução
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Alterar o tipo de ancoragem do sinal Arrow Down |
    //+------------------------------------------------------------------+
    bool ArrowDownAnchorChange(const long chart_ID=0, // ID do gráfico
    const string name="ArrowDown", // nome do objeto
    const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // tipo de ancoragem
    {
    //--- redefine o valor de erro
    ResetLastError();
    //--- alterar a ancoragem do ponto de locação
    if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR, anchor))
    {
    Print(__FUNCTION__,
    ": falha para alterar o tipo de ancoragem! Código de erro = ",GetLastError());
    return(false);
    }
    //--- sucesso na execução
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Excluir sinal Arrow Down |
    //+------------------------------------------------------------------+
    bool ArrowDownDelete(const long chart_ID=0, // ID do gráfico
    const string name="ArrowDown") // nome do sinal
    {
    //--- redefine o valor de erro
    ResetLastError();
    //--- excluir o sinal
    if(!ObjectDelete(chart_ID,name))
    {
    Print(__FUNCTION__,
    ": falha ao excluir o sinal\"Arrow Down\"! Código de erro = ",GetLastError());
    return(false);
    }
    //--- sucesso na execução
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Verificar valores de ponto de ancoragem e definir valores padrão |
    //| para aqueles vazios |
    //+------------------------------------------------------------------+
    void ChangeArrowEmptyPoint(datetime &time,double &price)
    {
    //--- se o tempo do ponto não está definido, será na barra atual
    if(!time)
    time=TimeCurrent();
    //--- se o preço do ponto não está definido, ele terá valor Bid
    if(!price)
    price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
    }
    //+------------------------------------------------------------------+
    //| Programa Script da função start (iniciar) |
    //+------------------------------------------------------------------+
    void OnStart()
    {
    //--- verificar a exatidão dos parâmetros de entrada
    if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>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 sinal das coordenadas do ponto de ancoragem
    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 os pontos para desenhar o sinal
    int d=InpDate*(bars-1)/100;
    int p=InpPrice*(accuracy-1)/100;
    //--- criar o sinal Arrow Down no gráfico
    if(!ArrowDownCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor,
    InpStyle,InpWidth,InpBack,InpSelection,InpHidden,I npZOrder))
    {
    return;
    }
    //--- redesenhar o gráfico e esperar por um segundo
    ChartRedraw();
    Sleep(1000);
    //--- agora, mover o ponto de ancoragem e alterar sua posição em relação ao sinal
    //--- contador de loop
    int v_steps=accuracy/2;
    //--- mover o ponto de ancoragem
    for(int i=0;i<v_steps;i++)
    {
    //--- usar o seguinte valor
    if(p>1)
    p-=1;
    //--- mover o ponto
    if(!ArrowDownMove(0,InpName,date[d],price[p]))
    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);
    //--- alterar a localização do ponto de ancoragem relativa ao sinal
    ArrowDownAnchorChange(0,InpName,ANCHOR_TOP);
    //--- redesenhar o gráfico
    ChartRedraw();
    //--- 1 segundo de atraso
    Sleep(1000);
    //--- deletar o sinal do gráfico
    ArrowDownDelete(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. Os seguintes 3 Usuários Dizem Obrigado o a jssuser por este post útil:

    deolindo12 (09-03-2019), janilson (10-03-2019), Não registrado (1 )

  3. #2 Fechar a publicação
    Junior Member
    Data de afiliação
    Mar 2019
    Local
    Presidente Prudente SP
    Postagens
    13
    Obrigado
    101
    Agradecimentos 6 Tempos em 5 Postagens
    AssinarAssinar
    subscritar: 0
    Excelente post;

    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.


  4. Os seguintes 2 Usuários Dizem Obrigado o a deolindo12 por este post útil:

    janilson (10-03-2019), Não registrado (1 )

  5. #3 Fechar a publicação
  6. The Following User Says Thank You to janilson 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