Announcement

Collapse
No announcement yet.

Livello prezzo chiusura, tra X candele

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

    Livello prezzo chiusura, tra X candele

    Cao ragazzi, approfitto della Vostra professialità per qualche mio dubbio.

    Dovrei sapere il livello di chiusura del prezzo tra X candele, conoscendo due punti predefiniti, cioè Candela 1 e livello dello ZIgZag, allego uno scrennshot per farvi capire meglio.
    Pensavo di risolvere con la funzione MathMax(), in realtà però non è possibile perchè analizza soltano due candele.

    Nello scrennshot ho 14 candele, e dovrei conoscere il livello di chiusura più alto di tutti...come potrei risolvere?

    Grazie a tutti...
    ScrennTempo.png
    Attached Files

    #2
    https://docs.mql4.com/series/ihighest
    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
      Ciao Umberto,

      grazie per lo spunto!
      Nello screnn postato in precedenza, ho mostrato un Time Frame M1, quindi prelevando il tempo della Candela 1 e dello ZigZag e facendo la differenza, avrei il numero delle Candele.

      Detto ciò, potrei impostare cosi il codice per identificare il valore Massimo di queste 14 Candele, giusto?

      PHP Code:
      int val_index=iHighest(NULL,0,MODE_HIGH,14,1); 
      Cosi però avrei il livello Massimo e non di chiusura, quindi potrei utilizzare anche
      PHP Code:
      iClose() 
      ?

      Comment


        #4
        se vuoi la chiusura più alta tra le 14 candele userai iHighest() con MODE_CLOSE e non MODE_HIGH
        https://docs.mql4.com/constants/indi...ts/seriesconst

        se invece cerchi la chiusura della candela che ha il massimo più alto, userai iClose() conoscendo l'indice di questa candela
        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
          Originally posted by umbertosm View Post
          se vuoi la chiusura più alta tra le 14 candele userai iHighest() con MODE_CLOSE e non MODE_HIGH
          Ottimo Umberto, grazie infinite, quindi il ragionamento per il conto delle candele ed l'impostazione del codice è giusto?

          PHP Code:
          int val_index=iHighest(NULL,0,MODE_CLOSE,14,1); 


          Avrei cosi, il prezzo di ciusura più alti delle 14 Candele, giusto?

          Comment


            #6
            si, ma se leggi attentamente la spiegazione delle funzioni nella reference di Mt4 le risposte sono già scritte lì

            e comunque sta a te provare sul campo, scrivendo e stampando il valore del risultato delle funzioni nei vari casi e verificare se il risultato è quello che ti aspetti
            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
              Originally posted by umbertosm View Post
              si, ma se leggi attentamente la spiegazione delle funzioni nella reference di Mt4 le risposte sono già scritte lì
              e comunque sta a te provare sul campo, scrivendo e stampando il valore del risultato delle funzioni nei vari casi e verificare se il risultato è quello che ti aspetti
              Ok, per ora grazie mille, provo nell'intendo....spero di non disturbare se avessi bisogno di un piccolo aiutino!

              Grazie...

              Comment


                #8
                Allora ragazzi, eccomi qua di nuovo...spero di non disturbare ma con voi sto crescendo molto eper questo Vi ringrazio motlissimo.
                Partendo sempre dallo screnn in alto vi posto il mio codice che non va bene ovviamente:

                PHP Code:
                //+------------------------------------------------------------------+
                //| ZigZag()                                                                      |
                //+------------------------------------------------------------------+

                datetime ZigZag(int j)
                  {
                   
                int k=0;
                   
                double ZigZag0=0;
                   
                datetime time=0;
                  
                   for(
                int i=0;i<500;i++) //Passo in rassegna le ultime 500 candele...
                     
                {
                      
                ZigZag0=iCustom(Symbol(),0,"ZIGZAGmod2",48040i); //Prendo il valore dello ZigZag...
                      
                      
                if(ZigZag0!=0.0&&k<j) {k++;continue;} //Se il valore dello ZigZag non è quello che mi interessa lo scarto...
                      
                      
                if(ZigZag0!=0.0&&time==0) {time=Time[i];break;} //Se il valore dello ZigZag è quello che mi interessa, salvo l'orario con l'indice.
                     
                }
                   return(
                time);
                  }                                                                                                            
                //----------------------------------------------------------------------------------------------------------------------------------//
                //Time Candela1
                datetime Candela1(Close[i])
                  {
                   return(
                Time[0]);
                  }

                //+------------------------------------------------------------------+
                //| Custom indicator iteration function                              |
                //+------------------------------------------------------------------+
                int OnCalculate(const int rates_total,
                                const 
                int prev_calculated,
                                const 
                datetimetime[],
                                const 
                doubleopen[],
                                const 
                doublehigh[],
                                const 
                doublelow[],
                                const 
                doubleclose[],
                                const 
                longtick_volume[],
                                const 
                longvolume[],
                                const 
                intspread[])
                  {
                   
                int limit rates_total prev_calculated;
                   
                //--- counting from 0 to rates_total
                   
                ArraySetAsSeries(Buffer1true);
                   
                ArraySetAsSeries(Buffer2true);
                  
                   
                //--- initial zero
                   
                if(prev_calculated 1)
                     {
                      
                ArrayInitialize(Buffer10);
                      
                ArrayInitialize(Buffer20);
                    
                     }
                    
                      
                int i    0;
                      
                double A = (Candela1(1) - ZigZag(0)) / 60//Differenza minuti tra Candela1 e ZigZag0

                      
                double Y iHighest(NULL,0,MODE_CLOSE,A,1);//Risultato Chiusura maggiore tra candela 1 e A 
                La prima parte di codice me l'ha scritta il buon Damiano, l'altra io sotto i Vostri consigli, ma non ho capito bene come prendere l'orario della Candela1 per pori andare a "prlevare" il prezzo di chiusura più alto.

                Grazie per l'aiuto...
                Last edited by Fly76; 24-10-2016, 15:29.

                Comment


                  #9
                  Ho apportato una modifica la codice, che non restituisce più errore, ma non son convinto onestamente se sia tutto correto.

                  Scrivendo appunto cosi è tutto corretto?

                  PHP Code:
                   double A = (Time[1] - ZigZag(0)) / 60//Differenza minuti tra Candela1 e ZigZag0 
                  //Differenza orario tra Candela 1 e ZigZag 0

                  Comment


                    #10
                    Nulla ragazzi....qui non mi esce la soluzione del rebus!!!

                    Comment


                      #11
                      comunque Fly76, secondo me tu stai correndo troppo, devi prima fare gavetta con la programmazione e dopo puoi affrontare codici impegnativi.
                      andrai avanti sempre così se non ti metti sotto a studiare il linguaggio di programmazione passo passo da esempi semplici in su.
                      ci vogliono un po' di mesi, ma dopo non hai bisogno di chiedere continuamente per risolvere problemi di codice
                      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


                        #12
                        Ciao Umberto, grazie della risposta sincera e diretta, non posso far altro che darti ragione.Son passato ad un codice leggero leggero per cercare di capire dove sbaglio, perchè credo di affogarmi in un bicchier d'acqua!
                        In base all'orario dello ZigZag, voglio determinare se tra i primi due punti c'è una salita o discesa, quindi ho scritto cosi il codice, non ricevo errori ma l'MT4 s'inchioda.

                        PHP Code:
                        #include <stdlib.mqh>
                        #include <stderror.mqh>

                        //--- indicator settings
                        #property indicator_chart_window
                        #property indicator_buffers 2

                        #property indicator_type1 DRAW_ARROW
                        #property indicator_width1 1
                        #property indicator_color1 0xFFAA00
                        #property indicator_label1 "Sell"

                        #property indicator_type2 DRAW_ARROW
                        #property indicator_width2 1
                        #property indicator_color2 0x0000FF
                        #property indicator_label2 "Buy"

                        //--- indicator buffers
                        double Buffer1[];
                        double Buffer2[];

                        extern double DistanzaIcone 1;
                        datetime time_alert//used when sending alert
                        extern bool Audible_Alerts true;
                        double myPoint//initialized in OnInit

                        void myAlert(string typestring message)
                          {
                           if(
                        type == "print")
                              Print(
                        message);
                           else if(
                        type == "error")
                             {
                              Print(
                        type+" | Test @ "+Symbol()+","+Period()+" | "+message);
                             }
                           else if(
                        type == "order")
                             {
                             }
                           else if(
                        type == "modify")
                             {
                             }
                           else if(
                        type == "indicator")
                             {
                              if(
                        Audible_AlertsAlert(type+" | Test2 @ "+Symbol()+","+Period()+" | "+message);
                             }
                          }

                        //+------------------------------------------------------------------+
                        //| ZigZag()                                                         |
                        //+------------------------------------------------------------------+
                        datetime ZigZag(int y,int j)
                          {
                           
                        int k=0;
                           
                        double ZigZag0=0;
                           
                        datetime time=0;
                         
                           for(
                        int i=y;i<y+50;i++) //Passo in rassegna le ultime 500 candele...
                             
                        {
                              
                        ZigZag0=iCustom(Symbol(),0,"ZigNeutro",480,4,i); //Prendo il valore dello ZigZag...
                              
                              
                        if(ZigZag0!=0.0&&k<j) {k++;continue;} //Se il valore dello ZigZag non è quello che mi interessa lo scarto...
                              
                              
                        if(ZigZag0!=0.0&&time==0) {time=Time[i];break;} //Se il valore dello ZigZag è quello che mi interessa, salvo l'orario con l'indice.
                             
                        }
                           return(
                        time);
                          }
                        //+------------------------------------------------------------------+
                        //| Custom indicator initialization function                         |
                        //+------------------------------------------------------------------+
                        int OnInit()
                          {   
                           
                        IndicatorBuffers(2);
                           
                           
                        SetIndexBuffer    (0Buffer1);
                           
                        SetIndexEmptyValue(00);
                           
                        SetIndexArrow     (0242);
                           
                           
                        SetIndexBuffer    (1Buffer2);
                           
                        SetIndexEmptyValue(10);
                           
                        SetIndexArrow     (1241);
                           
                           
                        //initialize myPoint
                           
                        myPoint Point();
                           if(
                        Digits() == || Digits() == 3)
                             {
                              
                        myPoint *= 10;
                             }
                           return(
                        INIT_SUCCEEDED);
                          }

                        //+------------------------------------------------------------------+
                        //| Custom indicator iteration function                              |
                        //+------------------------------------------------------------------+
                        int OnCalculate(const int rates_total,
                                        const 
                        int prev_calculated,
                                        const 
                        datetimetime[],
                                        const 
                        doubleopen[],
                                        const 
                        doublehigh[],
                                        const 
                        doublelow[],
                                        const 
                        doubleclose[],
                                        const 
                        longtick_volume[],
                                        const 
                        longvolume[],
                                        const 
                        intspread[])
                          {
                           
                        int limit rates_total prev_calculated;
                           
                        //--- counting from 0 to rates_total
                           
                        ArraySetAsSeries(Buffer1true);
                           
                        ArraySetAsSeries(Buffer2true);
                           
                        //--- initial zero
                           
                        if(prev_calculated 1)
                             {
                              
                        ArrayInitialize(Buffer10);
                              
                        ArrayInitialize(Buffer20);
                             }
                           else
                              
                        limit++;
                           
                           
                        //--- main loop
                           
                        for(int i limit-1>= 0i--)
                             {
                              if (
                        >= MathMin(5000-1rates_total-1-50)) continue;
                              
                                 
                              
                        //Indicator Buffer 1
                              
                        if(ZigZag(i,0) < ZigZag(i,1)
                              && 
                        iRSI(NULLPERIOD_CURRENT2PRICE_CLOSE2+i) < 50
                              
                        && iRSI(NULLPERIOD_CURRENT2PRICE_CLOSE1+i) > 50
                              
                        )
                                {
                                 
                        Buffer1[i] = High[i] + DistanzaIcone myPoint;;
                                 if(
                        == && Time[0] != time_alert) { myAlert("indicator""Sell"); time_alert Time[0]; }
                                }
                              
                              
                        //Indicator Buffer 2
                              
                        if(false
                              
                        )
                                {
                                 
                        Buffer2[i] = Low[i] - DistanzaIcone myPoint;
                                 if(
                        == && Time[0] != time_alert) { myAlert("indicator""Buy"); time_alert Time[0]; }
                                }
                              
                             }
                           return(
                        rates_total);
                          }
                        //+------------------------------------------------------------------+ 
                        Time.png

                        Comment


                          #13
                          Ti si inchioda la MT4 perché stai usando in maniera errata la iCustom().
                          La iCustom() è una delle funzioni più delicate dell'MQL4... Ha delle regole ben precise che se non rispettate (soprattutto nei cicli) ti manda in crash la MT4 senza pietà.
                          Ti avevo già dato il link alla documentazione su un'altra discussione e te lo rimetto qui: iCustom().
                          Nella documentazione ci sono tutte le istruzioni di utilizzo della funzione.
                          La programmazione non è fatta di tentativi ma di regole precise che purtroppo vanno imparate.

                          P.S.
                          Do ragione ad Umberto quando dice che stai correndo troppo.
                          Lo ZigZag è uno degli indicatori più difficili da gestire tra tutti quelli preinstallati su MT4 poiché ha uno stile a sezioni.
                          Per imparare a programmare lo sconsiglio totalmente.
                          Skype: cadddami

                          Comment


                            #14
                            Ho letto e riletto la funzione iCustom() e l'unica cosa che non avevo fatto era caricare il file ex4, quindi ho modifica in questo modo:

                            PHP Code:
                            ZigZag0=iCustom(Symbol(), PERIOD_CURRENT"::Indicators\\ZigNeutro.ex4"48046i); //Prendo il valore dello ZigZag... 
                            Preventivamente utilizzando qusto altro codice per caricarlo nel codice:

                            PHP Code:
                            #resource "\\Indicators\\ZigNeutro.ex4" 
                            In effetti l'MT4 non si inchioda più ma il risultato non esce.

                            Apportando queste modifiche, si andrebbe a leggere correttamente l'orario di qualsiasi Buffer del iCustom() giusto?

                            So di aver aver bruciato ogni tappa dello studio, ma il ciclo non lo digerisco molto bene..abbiate pietà di me!!!!

                            Comment

                            Working...
                            X