Indicador Perguntas Diversas - página 2

 

#Ordem Objetiva

Eu criei 3 Objetos e que os objetos se cruzam.

#1 Linha Horizontal, #2 Linha Vertical, #3 Linha de tendência

Preciso defini-las z posições.

Então, como posso dar-lhes valor z posições?

Obrigado.

 
Marco vd Heijden:

Bem, você pode desenhar todas as linhas no OnInit() e depois desenhar novas sempre que a opção da última barra mudar, você saberá que havia uma nova barra.

Mas não tenho certeza do que exatamente você está querendo fazer.

OK! Vou tentar algo. Então eu voltarei para aqui.

Obrigado.

 

@Marco vd Heijden

Antes de começar a pesquisar sobre isso. Eu realmente preciso perguntar, a função start() é a função slow down chart (/ MT4 Platforms)?

p.s Coloco todos os códigos na função especial start( ), esse código funciona para as linhas de período- H1, H4, D1, W1, MN1.

Tenha um bom fim de semana e obrigado antecipadamente.

 
Max Enrik: Eu realmente preciso perguntar, a função start() está atrasando o gráfico (/ MT4 Platforms)?
Enquanto todos os indicadores estão sendo atualizados, o terminal não faz mais nada. É por isso que os indicadores não podem dormir, não podem negociar, ou fazer pedidos pela web.
 
whroeder1:
Enquanto todos os indicadores estão sendo atualizados, o terminal não faz mais nada. É por isso que os indicadores não podem dormir, não podem negociar, ou fazer pedidos pela web.

Obrigado por seu comentário. (após seu comentário, decidi que vou mudar algo em meus indicadores - porque quase fiz todos os meus indicadores no início() funcionar.)

Eu coloquei abaixo o código na função start( ), então você pode me ajudar de que forma é bom para o meu indicador?

Na verdade, não tenho idéia de como posso editar o código abaixo para parar de atualizar continuamente (sem todos os códigos iniciais() colocados na função init()).

//---MN1
int _cnt_MN1 = 11; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ )
{
    if ( _Period < PERIOD_MN1 )
    {
        //---time convert
        datetime _tltpMN1      = TimeToString( iTime( Symbol(), PERIOD_MN1, i_MN ), TIME_DATE );
        datetime _time         = iTime( Symbol(), PERIOD_MN1, i_MN );// + PeriodSeconds( PERIOD_MN1  );
        //---name
        string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );

        ObjectCreate     ( 0, _vlineName_MN, OBJ_VLINE          , 0, _time, 0     );
        ObjectSetString  ( 0, _vlineName_MN, OBJPROP_TOOLTIP    , _tltpMN1        );
        ObjectSetInteger ( 0, _vlineName_MN, OBJPROP_COLOR      , C'180,160,080'  );
        ObjectSet        (    _vlineName_MN, OBJPROP_BACK       , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_HIDDEN     , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_SELECTABLE , false           );
        ObjectSet        (    _vlineName_MN, OBJPROP_STYLE      , STYLE_SOLID     );
    }   //---if Close
}   //---for Close

Obrigado!

 

Eu realmente preciso de ajuda, por favor, alguém responda minha pergunta.

Obrigado.

 
Max Enrik: Na verdade, não tenho nenhuma idéia de como posso editar o código abaixo para parar de atualizar continuamente
  1. Adaptar o novo código de barras para o novo mês.
    As barras não são confiáveis (uma atualização/religação pode mudar o número de barras no gráfico)o volume não é confiável (falta de tiques) Use sempre o tempo. Vela nova - Fórum MQL4
    Eu discordo de fazer uma nova função de barra, porque ela só pode se tornar uma vez por carrapato. Uma variável pode ser testada várias vezes.
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    Não usar números de turno em nomes de objetos. Uma vez iniciada uma nova barra, todos os seus objetos são mal denominados e você não pode criar um novo "<prefixo>0". Você tinha isso no seu post original (usando o tempo)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    Ou converter o tempo em uma int para uma corda.
 

Por favor, coloque-o em um especialista em vez de um indicador que permite uma utilização mais fácil no futuro quando você quiser adicionar sua estratégia comercial.

Para a questão das barras, armazene o tempo de abertura da barra em uma variável de data e simplesmente compare o tempo registrado com o tempo real, então sempre que uma nova barra surgir, ela será acionada.

Aqui está um exemplo:

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(250);

//--- create some things

   CreateLines(); // Function that creates time lines

//--- load open times
   M1=iTime(Symbol(),PERIOD_M1,0);
   M5=iTime(Symbol(),PERIOD_M5,0);
   M15=iTime(Symbol(),PERIOD_M15,0);
   M30=iTime(Symbol(),PERIOD_M30,0);
   H1=iTime(Symbol(),PERIOD_H1,0);
   H4=iTime(Symbol(),PERIOD_H4,0);
   D1=iTime(Symbol(),PERIOD_D1,0);
   W1=iTime(Symbol(),PERIOD_W1,0);
   MN1=iTime(Symbol(),PERIOD_MN1,0);


//--- set timelines
   ObjectMove(0,"Time-M1",0,M1,0);
   ObjectMove(0,"Time-M5",0,M5,0);
   ObjectMove(0,"Time-M15",0,M15,0);
   ObjectMove(0,"Time-M30",0,M30,0);
   ObjectMove(0,"Time-H1",0,H1,0);
   ObjectMove(0,"Time-H4",0,H4,0);
   ObjectMove(0,"Time-D1",0,D1,0);
   ObjectMove(0,"Time-W1",0,W1,0);
   ObjectMove(0,"Time-MN1",0,MN1,0);



//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(M1!=iTime(Symbol(),PERIOD_M1,0))
     {
      M1=iTime(Symbol(),PERIOD_M1,0);  // overwrite old value with new value  
      //Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M1",0,M1,0);
     }

   if(M5!=iTime(Symbol(),PERIOD_M5,0))
     {
      M5=iTime(Symbol(),PERIOD_M5,0);
      //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M5",0,M5,0);
     }

   if(M15!=iTime(Symbol(),PERIOD_M15,0))
     {
      M15=iTime(Symbol(),PERIOD_M15,0);
      //Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M15",0,M15,0);
     }

   if(M30!=iTime(Symbol(),PERIOD_M30,0))
     {
      M30=iTime(Symbol(),PERIOD_M30,0);
      //Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M30",0,M30,0);
     }

   if(H1!=iTime(Symbol(),PERIOD_H1,0))
     {
      H1=iTime(Symbol(),PERIOD_H1,0);
      //Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H1",0,H1,0);
     }

   if(H4!=iTime(Symbol(),PERIOD_H4,0))
     {
      H4=iTime(Symbol(),PERIOD_H4,0);
      //Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H4",0,H4,0);
     }

   if(D1!=iTime(Symbol(),PERIOD_D1,0))
     {
      D1=iTime(Symbol(),PERIOD_D1,0);
      //Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-D1",0,D1,0);
     }

   if(W1!=iTime(Symbol(),PERIOD_W1,0))
     {
      W1=iTime(Symbol(),PERIOD_W1,0);
      //Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-W1",0,W1,0);
     }

   if(MN1!=iTime(Symbol(),PERIOD_MN1,0))
     {
      MN1=iTime(Symbol(),PERIOD_MN1,0);
      //Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-MN1",0,MN1,0);
     }

  }
//+------------------------------------------------------------------+
 
whroeder1:
  1. Adapte o novo código de barras para o novo mês.
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    Não utilizar números de turno em nomes de objetos. Uma vez iniciada uma nova barra, todos os seus objetos são mal denominados e você não pode criar um novo "<prefixo>0". Você tinha isso no seu post original (usando o tempo)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    Ou converter o tempo em uma int para uma corda.

Obrigado por seu comentário.

Desde seu comentário, comecei a tentar pesquisar seu comentário. (porque eu nunca usei a função 'Void OnTick()')

Portanto, li o link abaixo e entendo que a função 'OnTick()' está sendo executada apenas para Consultores Especialistas.

Eu já uso um consultor especializado (Painel de Comércio) em meu gráfico (preciso usar todos os meus indicadores e consultor especializado em uma janela do gráfico).

Se você quis dizer que eu poderia usar seu código em 'Expert Advisor', na verdade não o farei porque vou melhorar meu 'Trade Panel', também quero escrever o código separadamente. (É possível que no futuro eu combine esse conjunto deindicadores(que é importante para mim) - mas não por enquanto).

De qualquer forma, Sr. William, seu comentário realmente me deu uma idéia e também me ensinou algo.

(p.s. se eu estiver pensando errado por favor me avise)

E mais uma vez, muito obrigado!
Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference
 
Max Enrik(porque eu nunca usei a função 'Void OnTick()')

Pré-construção 600 (3 de fevereiro de2014), houve apenas o início(). Agora há OnTick (EAs,) OnCalculate (indicadores,) e OnStart (scripts.) Esqueci que você estava falando de um indicador.

Comece a usar as novas Funções de Tratamento de Eventos - Funções - Noções básicas de linguagem - Referência MQL4. Veja Como fazer seuslookbacks corretamente.

Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference