Announcement

Collapse
No announcement yet.

OBJ_VLINE

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    OBJ_VLINE

    ho creato un EA che al verificarsi di determinate condizioni mi deve creare una linea verticale sul grafico...però mi disegna la prima e poi tutte la altre al verificarsi della condizione no e la prima resta disegnata correttamente....qualcuno sa spiegarmi perchè?
    P.S. tutto è contenuto nella funzione start quindi escluderei problemi di posizionamento della funzione che mi crea la linea in posti dove non deve trovarsi....

    #2
    la funzione che uso io è questa


    PHP Code:
    //+------------------------------------------------------------------+
    void Create_VerticalLine(string nomeVerticalLinedatetime time0int Wincolor colore=clrGreenENUM_LINE_STYLE style=STYLE_SOLIDuint width=5bool back=true)
      {
       if (
    ObjectFind(nomeVerticalLine) < 0)
         {
          
    ObjectCreate(nomeVerticalLine,OBJ_VLINE,Win,time0,0);
          
    ObjectSetInteger(Win,nomeVerticalLineOBJPROP_COLORcolore);
          
    ObjectSetInteger(Win,nomeVerticalLineOBJPROP_STYLEstyle);
          
    ObjectSetInteger(Win,nomeVerticalLineOBJPROP_WIDTHwidth);
          
    ObjectSetInteger(Win,nomeVerticalLine,OBJPROP_BACK,back);
         }
      }
    //+------------------------------------------------------------------+ 

    e la uso così


    PHP Code:
          ore    StringSubstr(EnumToString(orarioInizioTrading),1,2);
          
    minuti StringSubstr(EnumToString(orarioInizioTrading),4,2);
          
    nomeVLine "VLine_"+TimeToString(Time[0],TIME_DATE)+"_"+ore+"_"+minuti+"_OIT";   // es. VLine_2015.01.05_08_00_OIT
          //Print("nomeVLine="+nomeVLine);
          
    dataTimeVLine_inStringa IntegerToString(Year())+"."+IntegerToString(Month())+"."+IntegerToString(Day())+" "+ore+":"+minuti;  // String in " yyyy.mm.dd hh:mi " format.
          
    dataTimeVLine_inTime StringToTime(dataTimeVLine_inStringa);
          
    //Print("dataTimeVLine_inTime="+TimeToString(dataTimeVLine_inTime,TIME_DATE|TIME_MINUTES));
          // void Create_VerticalLine(string nomeVerticalLine, datetime time0, int Win, color colore=clrGreen, ENUM_LINE_STYLE style=STYLE_SOLID, uint width=2, bool back=false)
          
    Create_VerticalLine(nomeVLinedataTimeVLine_inTime0clrGreen); 
    La vita non è un giro di prova, cogli l’attimo..
    Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

    Comment


      #3
      Non ho capito una mazza, ma comunque....grazie lo stesso....:23.itwasntme_80_ani

      Comment


        #4
        e allora ne hai da studiare di metaquote language se quanto ho scritto, perfettamente funzionante e collaudato, non ti è familiare :09.speechless_80_an
        La vita non è un giro di prova, cogli l’attimo..
        Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

        Comment


          #5
          Intanto non capisco perchè scrivi PHP se parliamo di MQL4....seconda cosa..... intanto sarebbe opportuno, secondo me, prima spiegare il PERCHE'/MOTIVO insito nella logica dell'MQL4 che fa disegnare una sola linea verticale, una volta spiegato questo spiegare come aggirare l'ostacolo.....no?

          Comment


            #6
            :42.rofl_80_anim_gif ma non è codice php, la notazione nasce dal fatto che se si clicca sull'icona php (nell'editor avanzato del forum), il codice viene formattato colorato e quindi è più intuitivo comprendere i pezzi di codice ... quello che ho scritto è codice metaquote language, non php.

            e poi se vuoi che il tuo codice funzioni, devi postare il tuo codice, non chiedere genericamente come si risolve un problema che riscontri.

            Io ti ho regalato il mio codice funzionante, se conoscessi mt4 risolveresti al volo... evidentemente non è così, ed allora posta il tuo codice che risolviamo velocemente.
            La vita non è un giro di prova, cogli l’attimo..
            Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

            Comment


              #7

              datetime BarraPrecedente;

              int init()
              {




              return(0);
              }


              int deinit()
              {





              return(0);
              }



              int start()
              {
              if (NuovaBarra())

              {


              if (High[1] > High[2] &&
              Low[1] < Low[2])
              {
              ObjectCreate(Symbol(), "oggetto", OBJ_VLINE, 0, Time[1] ,0 );




              }



              }




              return(0);
              }

              //---------------------------------------------------------------------//

              bool NuovaBarra()
              {

              if (BarraPrecedente < Time[0])
              {
              BarraPrecedente = Time[0];
              return(true);

              }


              else
              {
              return(false);
              }

              }

              Comment


                #8
                per ogni vertical line che vuoi disegnare DEVI specificare un NOME DIVERSO,
                altrimenti Metatrader4 trova che una linea verticale con quel nome è già disegnata e non te ne disegna un'altra.

                basta che il nome "oggetto" con cui chiami la generica linea verticale lo personalizzi per ogni colonna,

                ti basta sostituire la tua riga con ObjectCreate con

                ObjectCreate("oggetto"+TimeToStr(Time[1]), OBJ_VLINE, 0, Time[1] ,0 );



                La vita non è un giro di prova, cogli l’attimo..
                Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

                Comment


                  #9
                  Oooooohhhhhh, finalmente questa è una spiegazione!
                  Per me ( e penso per tutti e per ogni cosa) l'importante è CAPIRE il perchè di una cosa e non fare il pappagallo....umbertosm ti ringrazio infinitamente e grazie della spiegazione a dir poco PERFETTA!

                  Comment


                    #10
                    Un'altra domanda....dal codice che ho postato praticamente mi crea la linea verticale all'apertura di ogni nuova barra....se volessi fare l'operazione invece all'apertura della nuova barra + 10 secondi, come posso fare?
                    Ho già provato a fare Time[0] + 10 ma non funzia...:25.facepalm_80_anim

                    Comment


                      #11
                      futuregain,

                      init(), deinit() e start() sono funzioni obsolete e non si usano più : OnTick() prende il posto di start()

                      Ti consiglio di darti una ripassata delle nuove funzionalità di metaquote language introdotte dopo febbraio 2014

                      la soluzione che richiedi è un po' più sofisticata: come da codice seguente,
                      ad avvio di barra verifichi la condizione,
                      se è verificata rendi true una variabile booleana
                      e poi ai successivi tick conti i secondi
                      e quando superi i 10 secondi,
                      disegni la linea verticale e rendi false la variabile booleana.

                      Code:
                      bool conta10secondi=false;
                      
                      void OnTick()
                        {
                      //---
                      
                         if (NuovaBarra())
                           {
                            if (High[1] > High[2] && Low[1] < Low[2])
                              {
                               conta10secondi=true;
                              }
                           }
                         if (conta10secondi==true  &&  TimeCurrent()>Time[0]+10)
                           {
                            ObjectCreate("oggetto"+TimeToStr(Time[1]), OBJ_VLINE, 0, Time[1] ,0 );
                            conta10secondi=false;
                           }
                        }
                      La vita non è un giro di prova, cogli l’attimo..
                      Realizzazione per Metatrader4 di trading system, indicatori, pattern grafici, Ottimizzazioni IS-OOS su Forex e CFD, Analisi di Portafoglio .

                      Comment

                      Working...
                      X