Announcement

Collapse
No announcement yet.

Problema per uscire da un ciclo

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

    Problema per uscire da un ciclo

    PHP Code:
    int MedieCicliche(double intRastvor)
     {
                
    // Per convenzione si usa
                // +1 = BUY
                //  0 = Tutto bene, ma non fa niente
                // -1 = SELL

       
    double  MediaVeloceDayBuffer[],  MediaLentaDayBuffer[],MediaVeloceDefaultBuffer[],MediaLentaDefaultBuffer[],
               
    ImaVeloceDefaultImaLentaDefaultImaVeloceDayImaLentaDay,  
               
    ImaVelocePrecDayImaVelocePrecDefault,ImaLentaPrecDayImaLentaPrecDefault;


                
    ImaVelocePrecDefault iMA(NULL,0MediaVelocePeriod 0001);//fuschia
                
    ImaLentaPrecDefault iMA(NULL,0MediaLentaPeriod 0001);//arancio

                
    ImaVeloceDefault iMA(NULL,0MediaVelocePeriod 0000);//fuschia
                
    ImaLentaDefault iMA(NULL,0MediaLentaPeriod 0100);//arancio
                
    pipsMAbuy = (int)MathFloorMathAbs(ImaVeloceDefault-ImaLentaDefault)/(_Point) );
                
    pipsMAsell = (int)MathFloorMathAbs(ImaVeloceDefault-ImaLentaDefault)/(_Point) );

                if (
    pipsMAbuy == intRastvor &&ImaVeloceDefault<ImaLentaDefault )//((ImaVelocePrecDefault < ImaLentaDefault) && (ImaVeloceDefault > ImaLentaDefault + intRastvor * Point))
                   
    {
                      
    buy++;
                      
    Comment("Buy " buy "\nPips"pipsMAbuy"\nRastvor" +  Rastvor);
                      return +
    1//Long

                   
    }


                  if ((
    pipsMAsell == intRastvor &&ImaVeloceDefault<ImaLentaDefault ))//((ImaVelocePrecDefault > ImaLentaDefault) && (ImaVeloceDefault < ImaLentaDefault + intRastvor * Point))
                    
    {
                      
    sell++;
                      
    Comment("Buy " buy "\nPips"+pipsMAsell"\nRastvor" +  Rastvor);
                      return -
    1//Short

                    
    }

           return 
    0;
      } 
    Ragazzi allora ho questa funzione che uso così:

    PHP Code:

             
    if (MedieCicliche(Rastvor)==+1)

             {
                if (
    BuySell !=+1){
                  
    //  Comment("Buy " + buy + pipsMAbuy+ "\nPips"+ "\nRastvor" +  Rastvor);
                    
    AllertoPerIlRialzo();
                    
    BuySell =+1;
                   }

             }
            else if(
    MedieCicliche(Rastvor)==-1)
             {
                if (
    BuySell !=-1)
                {
                
    //   Comment("\nSell " +sell+ "\nPips" +  pipsMAsell+ "\nRastvor" +  Rastvor);
                
    AllertoPerIlRibasso();
                
    BuySell =-1;
                }

           } 
    ora il mio problema è che vorrei farmi segnare solo una volta i segnali esempio: segnale buy dopo si attende un segnale sell e viceversa ma non doppio buy o doppio sell, ho usato la variabile di supporto Buysell ma mi sto incartando!!
    qualche idee in merito?


    #2
    Originally posted by texcs View Post
    PHP Code:

    if (MedieCicliche(Rastvor)==+1)

    {
    if (
    BuySell !=+1){
    // Comment("Buy " + buy + pipsMAbuy+ "\nPips"+ "\nRastvor" + Rastvor);
    AllertoPerIlRialzo();
    BuySell =+1;
    }

    }
    else if(
    MedieCicliche(Rastvor)==-1)
    {
    if (
    BuySell !=-1)
    {
    // Comment("\nSell " +sell+ "\nPips" + pipsMAsell+ "\nRastvor" + Rastvor);
    AllertoPerIlRibasso();
    BuySell =-1;
    }


    ora il mio problema è che vorrei farmi segnare solo una volta i segnali esempio: segnale buy dopo si attende un segnale sell e viceversa ma non doppio buy o doppio sell, ho usato la variabile di supporto Buysell ma mi sto incartando!!
    qualche idee in merito?

    mi pare ok, cos'è che non va ?

    se MedieCicliche dice RIALZO
    e non è già allertato il rialzo (if (BuySell !=+1))
    AllertoPerIlRialzo();
    BuySell =+1;

    quindi alla successiva interrogazione di
    if (MedieCicliche(Rastvor)==+1)
    essendo BuySell =+1
    non viene richiamata la funzione AllertoPerIlRialzo();
    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 segue l'alternanza buy/sell sell/buy

      Comment


        #4
        l'unico eventuale buco logico che vedo sono le due funzioni separate
        AllertoPerIlRialzo();
        AllertoPerIlRibasso();
        non so cosa fanno,
        fai in modo di usarne una sola che si allerta sia per il buy che per il sell, facendo quel che devono fare per uno o l'altro segnale
        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
          Grazie, ora volevo un 'altra delucidazione, in questo modo la funzione mi segnala l'incrocio delle medie,
          inserendo questa pezzo

          PHP Code:
          ((pipsMAsell == intRastvor &.................. 
          per sell
          PHP Code:
          ((pipsMAbuy == intRastvor &................. 
          per buy


          dove "intRastvor" è una variabile esterna vorre farmi dare il segnale qundo la distanza tra una media e l'altra c'è una distanza che vale "intRastvor".

          però cosi nn funziona ........... idee per sistemarlo

          Comment


            #6
            If (mediaA[1] - mediaB[1] > pipsMAbuy) Compra();

            [1] è la barra appena conclusa
            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
              Allora ho modificato il codice in questo modo
              PHP Code:
                     if ((MA1now5 MA2now5) && (MA1previous5 MA2previous5) && (MA1after5 MA2after5)&&(pipsMAbuy5>=Distanza5 _Point) ) CrossUp5[i5] = Low[i5] - Range5 1.5
              dove " Distanza5" è una variabile settata a 5, in modo che il segnale me lo dovrebbe dare quando la distanza delle medie è >= 5 ; ora nell'immagine che allego vedrete che nei commenti (in alto a sx
              cerchio nero) la distanza tra le medie è 0 (e mi da ugualmente il segnale anche se non è >=5).

              C'e anche questo che non mi spiego nei commenti la distanza delle medie è 0 invece nella didascalia puntando la freccia del segnale cerchio rosso mi dà 118.5782, questo è il codice
              PHP Code:
                Comment("Ultimo Segnale Rialzista su "+Symbol()+" a TF "+IntegerToString(Period(),0,0)+" \nBuy at: "Low[i5] + "\nDistanza tra le medie: "pipsMAbuy5 +"\nDistanza extern: "Distanza5 +"\nStop :" Low[i5+1]+ "\nIma Fast: " ImaVeloce5 "\nImaLenta" ImaLenta5);
                         
              SetIndexLabel(2," \nBuy at: "Low[i5] + "\nDistanza medie: "pipsMAbuy5 +"\nDistanza extern: "Distanza5"\nStop :" Low[i5+1]); 
              Qual'è il problema secondo voi?
              grazie!Forum.jpg

              Comment


                #8
                Che ti stampi la distanza tra le medie = 0
                credo sia un errore: è difficile che le due medie abbiano lo stesso esatto valore in quel punto in cui calcoli la distanza tra di loro.
                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
                  si appunto e poi perchè non segue questa condizion"&(pipsMAbuy5>=Distanza5 * _Point) "

                  Comment


                    #10
                    extern distanza5 = 5
                    ho sistemaato le condizioni così:
                    PHP Code:
                    extern distanza5 5

                        double pipsMAbuy5 
                    = (int)MathFloorMathAbs(ImaVeloce5-ImaLenta5)/(_Point) );
                             
                    double pipsMAsell5 = (int)MathFloorMathAbs(ImaVeloce5-ImaLenta5)/(_Point) );


                       if ((
                    MA1now5 MA2now5) && (MA1previous5 MA2previous5) && (MA1after5 MA2after5)&&(pipsMAbuy5>=(Distanza5))) CrossUp5[i5] = Low[i5] - Range5 1.5;
                         else if ((
                    MA1now5 MA2now5) && (MA1previous5 MA2previous5) && (MA1after5 MA2after5)&&(pipsMAsell5>=Distanza5)) CrossDown5[i5] = High[i5] + Range5*1.5
                    Ma non vengono rispettate ma per caso ci va aggiunto "Distanza * point"?
                    avete idee?

                    Comment


                      #11
                      io, in questi casi in cui non so se ho scritto bene i valori delle formule,
                      stampo con Print(...) ogni variabile, il valore di ciascuna media, la differenza delle medie, qualsiasi altra variabile, distanza5, range5, high[i5], ecc.
                      al fine di verificare manualmente se sto facendo delle IF che possono funzionare o mi sto dimenticando qualche moltiplicatore (es. point) da qualche parte.
                      Inoltre calcolo da me sul grafico con il cursore quanti sono i pip in quel punto così da sapere che valori mi devo aspettare di trovare con le formule.
                      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
                        Originally posted by texcs View Post
                        extern distanza5 = 5
                        ho sistemaato le condizioni così:
                        PHP Code:
                        extern distanza5 5

                        double pipsMAbuy5 
                        = (int)MathFloorMathAbs(ImaVeloce5-ImaLenta5)/(_Point) );
                        double pipsMAsell5 = (int)MathFloorMathAbs(ImaVeloce5-ImaLenta5)/(_Point) );


                        if ((
                        MA1now5 MA2now5) && (MA1previous5 MA2previous5) && (MA1after5 MA2after5)&&(pipsMAbuy5>=(Distanza5))) CrossUp5[i5] = Low[i5] - Range5 1.5;
                        else if ((
                        MA1now5 MA2now5) && (MA1previous5 MA2previous5) && (MA1after5 MA2after5)&&(pipsMAsell5>=Distanza5)) CrossDown5[i5] = High[i5] + Range5*1.5
                        Ma non vengono rispettate ma per caso ci va aggiunto "Distanza * point"?
                        avete idee?
                        Infatti è quello che ho ho fatto il risultato è in immagine allegata
                        PHP Code:
                         Comment("\nUltimo Segnale \nRialzista su "+Symbol()+" a TF "+IntegerToString(Period(),0,0)+" \nBuy at: "Low[i5] + "\nDistanza tra le medie: "pipsMAbuy5 +"\nDistanza extern: "distanza +"\nStop :" Low[i5+1]+
                                    
                        "\nIma Fast: " ImaVeloce5 "\nImaSlow" ImaLenta5 +"\nLotSize:"CalcoloSize(Low[i5+1]* Point)); 
                        Dove:
                        Distanza tra le medie: è la distanza tra le medie al momento del segnale
                        Distanza extern: è la distanza Inserita dall'esterno
                        nell'allegato la distanza tra le medie era 41
                        La distanza extern era 3 però dove c'è l'ultimo segnale (freccia rossa) nn mi pare che la distanza sia 41

                        Come mai avete idee?
                        Attached Files

                        Comment


                          #13
                          Originally posted by texcs View Post

                          Distanza tra le medie: è la distanza tra le medie al momento del segnale
                          Distanza extern: è la distanza Inserita dall'esterno
                          nell'allegato la distanza tra le medie era 41
                          La distanza extern era 3 però dove c'è l'ultimo segnale (freccia rossa) nn mi pare che la distanza sia 41
                          se la condizione è che il segnale c'è quando la distanza tra le medie è >= 3
                          è corretto che se la distanza tra le medie è 41 ci sia il segnale, essendo 41 > 3
                          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


                            #14
                            però dall'immagine grafica non sembra che la distanza sia 41 questo vogliodire

                            Comment


                              #15
                              leggi 41 sul grafico, che corrisponde a 4.1 pip : Metatrader ti fa vedere i Point che molto spesso corrisponde a 0.1 pip
                              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