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 1,008 Tempos em 579 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 2 Usuários Dizem Obrigado o a jssuser por este post útil:

    deolindo12 (09-03-2019), janilson (10-03-2019)

  3. #2 Fechar a publicação
    Junior Member
    Data de afiliação
    Mar 2019
    Local
    Presidente Prudente SP
    Postagens
    13
    Obrigado
    101
    Agradecimentos 5 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. The Following User Says Thank You to deolindo12 For This Useful Post:

    janilson (10-03-2019)

  5. #3 Fechar a publicação
    Senior Member
    Data de afiliação
    Aug 2018
    Local
    Rio de Janeiro
    Postagens
    399
    Obrigado
    217
    Agradecimentos 135 Tempos em 105 Postagens
    AssinarAssinar
    subscritar: 0
    Sim Duolindo. Jssuser Está nos brindando com vários códigos base para Metatrader. Após compilar esses códigos já temos o ea ou até mesmo o indicador

+ 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