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

Thread: OBJ_ELLIOTWAVE5 Onda Móvel Elliott.

  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,952 Tempos em 1,062 Postagens
    AssinarAssinar
    subscritar: 0

    OBJ_ELLIOTWAVE5 Onda Móvel Elliott.

    OBJ_ELLIOTWAVE5 Onda Móvel Elliott.

    Name:  objelliotwave5.png
Views: 119
Size:  6.4 KB

    Observação

    Para "Onda Móvel Elliott", é possível habilitar/desabilitar o modo de pontos de conexão das linhas (propriedade OBJPROP_DRAWLINES), bem como definir o nível de posicionamento da onda (a partir da enumeração ENUM_ELLIOT_WAVE_DEGREE).

    Exemplo

    [parcial]O seguinte script cria e move onda móvel Elliott 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 \"Onda Móvel Elliott\"."
    #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="ElliotWave5"; // Nome do objeto
    input int InpDate1=10; // Data do 1º ponto, %
    input int InpPrice1=90; // Preço do 1º ponto, %
    input int InpDate2=20; // Data do 2º ponto, %
    input int InpPrice2=40; // Preço do 2º ponto, %
    input int InpDate3=30; // Data do 3º ponto, %
    input int InpPrice3=60; // Preço do 3º ponto, %
    input int InpDate4=40; // Data do 4º ponto, %
    input int InpPrice4=10; // Preço do 4º ponto, %
    input int InpDate5=60; // Data do 5º ponto, %
    input int InpPrice5=40; // Preço do 5º ponto, %
    input ENUM_ELLIOT_WAVE_DEGREE InpDegree=ELLIOTT_MINOR; // Nível
    input bool InpDrawLines=true; // Exibindo as linhas
    input color InpColor=clrRed; // Cor das linhas
    input ENUM_LINE_STYLE InpStyle=STYLE_DASH; // Estilo das linhas
    input int InpWidth=2; // Largura das linha
    input bool InpBack=false; // Objeto de fundo
    input bool InpSelection=true; // Destaque para mover
    input bool InpHidden=true; // Ocultar na lista de objetos
    input long InpZOrder=0; // Prioridade para clique do mouse
    //+------------------------------------------------------------------+
    //| Criar "Onda Móvel Elliott" pelas coordenadas fornecidas |
    //+------------------------------------------------------------------+
    bool ElliotWave5Create(const long chart_ID=0, // ID do gráfico
    const string name="ElliotWave3", // nome da onda
    const int sub_window=0, // índice da sub-janela
    datetime time1=0, // primeiro ponto de tempo
    double price1=0, //primeiro ponto de preço
    datetime time2=0, // segundo ponto de tempo
    double price2=0, // segundo ponto de preço
    datetime time3=0, // terceiro ponto de tempo
    double price3=0, // terceiro ponto de preço
    datetime time4=0, // quarto ponto de tempo
    double price4=0, // quarto ponto de preço
    datetime time5=0, // quinto ponto de tempo
    double price5=0, // quinto ponto de preço
    const ENUM_ELLIOT_WAVE_DEGREE degree=ELLIOTT_MINUETTE, // grau
    const bool draw_lines=true, // exibindo as linhas
    const color clr=clrRed, // cor do objeto
    const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo das linhas
    const int width=1, // largura das linhas
    const bool back=false, // no fundo
    const bool selection=true, // destacar para mover
    const bool hidden=true, // ocultar na lista de objeto
    const long z_order=0) // prioridade para clicar no mouse
    {
    //--- definir coordenadas de pontos de ancoragem, se eles não estão definidos
    ChangeElliotWave5EmptyPoints(time1,price1,time2,pr ice2,time3,price3,time4,price4,time5,price5);
    //--- redefine o valor de erro
    ResetLastError();
    //--- Criar "Onda Móvel Elliott" pelas coordenadas fornecidas
    if(!ObjectCreate(chart_ID,name,OBJ_ELLIOTWAVE5,sub _window,time1,price1,time2,price2,time3,
    price3,time4,price4,time5,price5))
    {
    Print(__FUNCTION__,
    ": falha ao criar \""Onda Móvel Elliott"\"! Código de erro = ",GetLastError());
    return(false);
    }
    //--- definir grau (tamanho da onda)
    ObjectSetInteger(chart_ID,name,OBJPROP_DEGREE,degr ee);
    //--- habilitar (true) ou desabilitar (false) o modo de exibição das linhas
    ObjectSetInteger(chart_ID,name,OBJPROP_DRAWLINES,d raw_lines);
    //--- definir cor do objeto
    ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
    //--- definir o estilo da linha
    ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style );
    //--- definir a largura das linhas
    ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width );
    //--- 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);
    //--- 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);
    }
    //+------------------------------------------------------------------+
    //| Move o ponto de ancoragem da Onda Móvel Elliott |
    //+------------------------------------------------------------------+
    bool ElliotWave5PointChange(const long chart_ID=0, // ID do gráfico
    const string name="ElliotWave5", // nome do objeto
    const int point_index=0, // índice do ponto de ancoragem
    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,point_index,time,pric e))
    {
    Print(__FUNCTION__,
    ": falha ao mover o ponto de ancoragem! Código de erro = ",GetLastError());
    return(false);
    }
    //--- sucesso na execução
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Excluir Onda Móvel Elliott |
    //+------------------------------------------------------------------+
    bool ElliotWave5Delete(const long chart_ID=0, // ID do gráfico
    const string name="ElliotWave5") // nome do objeto
    {
    //--- redefine o valor de erro
    ResetLastError();
    //--- excluir o objeto
    if(!ObjectDelete(chart_ID,name))
    {
    Print(__FUNCTION__,
    ": falha ao excluir \""Onda Móvel Elliott"\"! Código de erro = ",GetLastError());
    return(false);
    }
    //--- sucesso na execução
    return(true);
    }
    //+------------------------------------------------------------------+
    //| Verificar valores de pontos de ancoragem da Onda Móvel Elliott |
    //| definir os valores padrões estabelecidos para aqueles vazios |
    //+------------------------------------------------------------------+
    void ChangeElliotWave5EmptyPoints(datetime &time1,double &price1,
    datetime &time2,double &price2,
    datetime &time3,double &price3,
    datetime &time4,double &price4,
    datetime &time5,double &price5)
    {
    //--- array para receber o tempo de abertura das últimas 10 barras
    datetime temp[];
    ArrayResize(temp,10);
    //--- receber dados
    CopyTime(Symbol(),Period(),TimeCurrent(),10,temp);
    //--- receber o valor de um ponto no gráfico atual
    double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
    //--- se o tempo do primeiro ponto não está definido, serão 9 barras a esquerda a partir da última barra
    if(!time1)
    time1=temp[0];
    //--- se o preço do primeiro ponto não está definido, ele terá valor Bid
    if(!price1)
    price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
    //--- se o tempo do primeiro ponto não está definido, serão 7 barras a esquerda a partir da última barra
    if(!time2)
    time2=temp[2];
    //--- se o preço do primeiro ponto não está definido, mover 300 pontos a mais do que o segundo
    if(!price2)
    price2=price1-300*point;
    //--- se o tempo do primeiro ponto não está definido, serão 5 barras a esquerda a partir da última barra
    if(!time3)
    time3=temp[4];
    //--- se o preço do primeiro ponto não está definido, mover 250 pontos a mais do que o primeiro
    if(!price3)
    price3=price1-250*point;
    //--- se o tempo do primeiro ponto não está definido, serão 3 barras a esquerda a partir da última barra
    if(!time4)
    time4=temp[6];
    //--- se o preço do primeiro ponto não está definido, mover 550 pontos a mais do que o primeiro
    if(!price4)
    price4=price1-550*point;
    //--- se o tempo do primeiro ponto não está definido, será na barra atual
    if(!time5)
    time5=temp[9];
    //--- se o preço do primeiro ponto não está definido, mover 450 pontos a mais do que o primeiro
    if(!price5)
    price5=price1-450*point;
    }
    //+------------------------------------------------------------------+
    //| Programa Script da função start (iniciar) |
    //+------------------------------------------------------------------+
    void OnStart()
    {
    //--- verificar a exatidão dos parâmetros de entrada
    if(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
    InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100 ||
    InpDate3<0 || InpDate3>100 || InpPrice3<0 || InpPrice3>100 ||
    InpDate4<0 || InpDate4>100 || InpPrice4<0 || InpPrice4>100 ||
    InpDate5<0 || InpDate5>100 || InpPrice5<0 || InpPrice5>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
    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 a Onda Móvel Elliott
    int d1=InpDate1*(bars-1)/100;
    int d2=InpDate2*(bars-1)/100;
    int d3=InpDate3*(bars-1)/100;
    int d4=InpDate4*(bars-1)/100;
    int d5=InpDate5*(bars-1)/100;
    int p1=InpPrice1*(accuracy-1)/100;
    int p2=InpPrice2*(accuracy-1)/100;
    int p3=InpPrice3*(accuracy-1)/100;
    int p4=InpPrice4*(accuracy-1)/100;
    int p5=InpPrice5*(accuracy-1)/100;
    //--- Criar Onda Móvel Elliott
    if(!ElliotWave5Create(0,InpName,0,date[d1],price[p1],date[d2],price[p2],date[d3],price[p3],
    date[d4],price[p4],date[d5],price[p5],InpDegree,InpDrawLines,InpColor,InpStyle,InpWidth ,
    InpBack,InpSelection,InpHidden,InpZOrder))
    {
    return;
    }
    //--- redesenhar o gráfico e esperar por um segundo
    ChartRedraw();
    Sleep(1000);
    //--- agora, mover os pontos de ancoragem
    //--- contador de loop
    int v_steps=accuracy/5;
    //--- mover o quinto ponto de ancoragem
    for(int i=0;i<v_steps;i++)
    {
    //--- usar o seguinte valor
    if(p5<accuracy-1)
    p5+=1;
    //--- mover o ponto
    if(!ElliotWave5PointChange(0,InpName,4,date[d5],price[p5]))
    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);
    //--- contador de loop
    v_steps=accuracy/5;
    //--- mover o segundo e terceiro ponto de ancoragem
    for(int i=0;i<v_steps;i++)
    {
    //--- usar os seguintes valores
    if(p2<accuracy-1)
    p2+=1;
    if(p3>1)
    p3-=1;
    //--- deslocar os pontos
    if(!ElliotWave5PointChange(0,InpName,1,date[d2],price[p2]))
    return;
    if(!ElliotWave5PointChange(0,InpName,2,date[d3],price[p3]))
    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);
    //--- contador de loop
    v_steps=accuracy*4/5;
    //--- mover o primeiro e quarto ponto de ancoragem
    for(int i=0;i<v_steps;i++)
    {
    //--- usar os seguintes valores
    if(p1>1)
    p1-=1;
    if(p4<accuracy-1)
    p4+=1;
    //--- deslocar os pontos
    if(!ElliotWave5PointChange(0,InpName,0,date[d1],price[p1]))
    return;
    if(!ElliotWave5PointChange(0,InpName,3,date[d4],price[p4]))
    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 a etiqueta do gráfico
    ElliotWave5Delete(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:

    Unregistered (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