Indicatore Domande varie - pagina 2

 

#Object Order

Ho creato 3 oggetti e questi oggetti si incrociano tra loro.

#1 Linea orizzontale, #2 Linea verticale, #3 Linea di tendenza

Ho bisogno di impostare le loro posizioni z.

Quindi come posso dare loro il valore delle posizioni z?

Grazie.

 
Marco vd Heijden:

Beh, puoi disegnare tutte le linee in OnInit() e poi disegnarne di nuove ogni volta che l'opentime dell'ultima barra cambia, saprai che c'è stata una nuova barra.

Ma non sono sicuro di cosa vuoi fare esattamente.

OK! Proverò qualcosa. Poi tornerò qui.

Grazie.

 

@Marco vd Heijden

Prima di iniziare la ricerca su questo. Ho davvero bisogno di chiedere se la funzione start() rallenta il grafico (/ piattaforme MT4)?

p.s Ho messo tutti i codici nella funzione speciale start() , questo codice funziona per le linee del periodo- H1, H4, D1, W1, MN1.

Buon fine settimana e grazie in anticipo.

 
Max Enrik: Ho davvero bisogno di chiedere, è start() funzione rallenta grafico (/ MT4 piattaforme)?
Mentre tutti gli indicatori si aggiornano, il terminale non fa altro. Questo è il motivo per cui gli indicatori non possono dormire, non possono fare trading, o fare richieste web.
 
whroeder1:
Mentre tutti gli indicatori si aggiornano, il terminale non fa altro. Questo è il motivo per cui gli indicatori non possono dormire, non possono fare trading, o fare richieste web.

Grazie per il tuo commento. (dopo il tuo commento ho deciso che cambierò qualcosa nei miei indicatori - perché quasi ho fatto tutti i miei indicatori nellafunzione start() ).

Ho messo il codice qui sotto nella funzione start(), quindi puoi aiutarmi in quale modo è buono per il mio indicatore?

In realtà non ho idea di come posso modificare il codice sottostante per fermare l'aggiornamento continuo (senza tutti i codici start() messi nella funzione 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

Grazie!

 

Ho davvero bisogno di aiuto, per favore qualcuno risponda alla mia domanda.

Grazie.

 
Max Enrik: In realtà non ho idea di come posso modificare il codice sottostante per fermare l'aggiornamento continuo
  1. Adattare il nuovo codice a barre per il nuovo mese.
    Bars è inaffidabile (un refresh/reconnect può cambiare il numero di barre sul grafico) il volume è inaffidabile (mancano i tick) Usa sempre il tempo. Nuova candela - MQL4 forum
    Non sono d'accordo nel fare una nuova funzione bar, perché può essere chiamata solo una volta per tick. Una variabile può essere testata più volte.
    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 );
    Non usare i numeri di spostamento nei nomi degli oggetti. Una volta che inizia una nuova barra, tutti i tuoi oggetti hanno un nome sbagliato e non puoi creare un nuovo "<prefisso>0". Avevi ragione nel tuo post originale (usando il tempo)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    O convertire il tempo in un int in una stringa.
 

Per favore, mettilo in un esperto al posto dell'indicatore, questo permette un uso più facile in futuro quando vuoi aggiungere la tua strategia di trading.

Per il problema delle barre, memorizza il tempo di apertura della barra in una variabile datetime e confronta semplicemente il tempo registrato con il tempo reale, quindi ogni volta che si presenta una nuova barra si attiverà.

Ecco un esempio:

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. Adattare il nuovo codice a barre per il nuovo mese.
    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 );
    Non usare i numeri di spostamento nei nomi degli oggetti. Una volta che inizia una nuova barra, tutti i tuoi oggetti hanno un nome sbagliato e non puoi creare un nuovo "<prefisso>0." Avevi ragione nel tuo post originale (usando il tempo)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    O convertire il tempo in un int in una stringa.

Grazie per il tuo commento.

Dal tuo commento ho iniziato a cercare il tuo commento. (perché non ho mai usato la funzione 'Void OnTick()')

Così, ho letto il seguente link e poi ho capito che la funzione 'OnTick()' è in esecuzione solo per Expert Advisors.

Uso già un Expert Advisor (Trade Panel) nel mio grafico (ho bisogno di usare tutti i miei indicatori ed expert advisor in una finestra del grafico).

Se intendi che potrei usare il tuo codice in 'Expert Advisor', in realtà non lo farò perché migliorerò il mio 'Trade Panel', inoltre voglio scrivere il codice separatamente. (È possibile che in futuro combinerò quel gruppo diindicatori(che sono importanti per me) - ma non per ora).

Comunque, signor William il suo commento mi ha davvero dato un'idea e anche insegnarmi qualcosa.

(p.s se sto pensando male per favore fatemi sapere)

E ancora una volta un grande grazie!
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(perché non ho mai usato la funzione 'Void OnTick()')

Pre-build 600 (3 febbraio2014) c'era solo start(). Ora c'è OnTick (EAs,) OnCalculate (indicatori,) e OnStart (scripts).

Iniziate ad usare le nuove funzioni di gestione degli eventi - Funzioni - Fondamenti del linguaggio - Riferimento MQL4. Vedi Come fare i lookback correttamente.

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
Motivazione: