Announcement

Collapse
No announcement yet.

ogni tick cosa succede?

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

    ogni tick cosa succede?

    Buongiorno, mi sorge un dubbio...

    - Ci troviamo dentro start()
    - Dentro un if

    Ad ogni tick resterà dentro l'if fino a che non rilascio o riesegue tutto start?

    Esempio:



    Code:
    if ( Bid==(Low[1]+(ToccoMinimo*Point)) && NTocchi==0 )
                   {
                      if ( Bid<(Low[1]-MaxDiscesa*Point) )
                      {
                        return(0); 
                      }
                      
                      NTocchi=1;
                      
                   }

    Qui voglio dire:

    Se il prezzo attuale è uguale al prezzo minimo barra precedente più qualche pip che decido e Ntocchi è 0 entri e ti accerti che il Bid non sia inferiore al prezzo minimo barra precedente + una discesa di tot pip che decido io, perchè se così fosse non mi interessa più l'operazione e voglio uscire. Mentre se non scende oltre quel prezzo voglio che Ntocchi diventi 1 e che esegua il resto delle operazioni che vorrei fare.

    Domanda:

    Esegue l'istruzione Ntocchi fino a che non si presenta if ( Bid<(Low[1]-MaxDiscesa*Point) )?

    Spero di essermi spiegato bene...

    #2
    o potrei invertire così:

    Code:
    if ( Bid>=(Low[1]-MaxDiscesa*Point) )
                   {
                      if ( Bid==(Low[1]+(ToccoMinimo*Point)) && NTocchi==0 )
                      {
                        NTocchi=1;
                      }
                      
                     
                      
                      
                   }
    ma la domanda resta ugualmente

    Comment


      #3
      Ok, mi sono intrippato. Mi spiego al meglio.
      Senza titolo-1.jpg
      Barra blu = candela attuale
      Barra viola= Apertura
      Barre verdi=intervallo

      Il prezzo attuale dopo apertura scende e si trova tra le barre verdi. Se oltrepassa la barra verde più in basso non mi interessa più niente e voglio sparire
      Quando risale e tocca la prima barra verde Ntocchi va a 1. Se riscende non mi interessa basta che non superi l'ultima barra verde. Se sale fino al tocco della barra viola NtocchiT=1.
      Se sale non mi interessa dove va. Se scende e si trova nuovamente nelle barre verdi Ntocchi=2 e Apri1=true (invento dei nomi) che mi indica che adesso se il resto finisce come dico posso aprire. Se sale e scende senza che tocca a barra viola o che oltrepassi l'ultima barra verde non mi interessa. Se tocca la barra viola NtocchiT=2 e Apri2=true. Quindi apro ordine in buy se Ntocchi=2 NtocchiT=2 Apri1=true e Apri2=true.

      Adesso spero sia più chiaro
      Attached Files

      Comment


        #4
        Ho scritto questa soluzione. Mi convince, ma se qualcuno mi da una conferma metto il cuore in pace
        Code:
        while ( Bid>=(Low[1]-MaxDiscesa*Point) )
                       {
                          if ( Bid<=(Low[1]+ToccoMinimo*Point && (NTocchiH==0 || NTocchiH==1)) )
                          {
                            if (NTocchiH==0) NTocchiL=1; else NTocchiL=2;
                            
                           }
                          if ( Bid>=(Close[1]+TickApertura*Point) && (NTocchiL==1 || NTocchiL==2) )
                            {
                             if (NTocchiL==1) NTocchiH=1; else {
                                
                                //Apro posizione BUY
                                StopLossN=Low[1]-StopLossDM*Point;
                                TakeProfitN=High[1]-TakeProfitDM*Point;
                                OpenOrderPrice = NormalizeDouble(Ask,Digits);  
                                Ticket = OrderSend(Symbol(),OP_BUY, Lot, OpenOrderPrice, 2, StopLossN, TakeProfitN, " buy", MagicNumber, 0, clrGreen);
                                
                                if (Ticket<0) { Print ("Err. N°", GetLastError()); Break; }
                                
                                NTocchiH=0;                      // Riporto variabili a valori predefiniti
                                NTocchiL=0;                      //
                                return (0);                   }  //Fine else
                            }                  
                          
                       }
        MaxDiscesa= Valore ultima barra verde
        ToccoMinimo= Valore prima barra verde
        TickApertura= Valore barra viola
        NtocchiH= quante volte ha toccato la varra viola
        NtocchiL= quante volte è entrato nell'intervallo verde
        Last edited by ogladiatore; 23-10-2015, 15:20. Reason: Codice aggiornato..

        Comment


          #5
          Domanda...
          Perché usi il ciclo while? Ho come l'impressione che sia questo il problema per cui ti si blocca il tester (come da altra discussione).
          Una volta che l'EA entra in quel ciclo, tu non hai messo condizioni di uscita dal ciclo (a parte dopo l'invio dell'ordine che non invierà mai poiché è tutto bloccato dal ciclo).
          Quindi il ciclo continuerà all'infinito, bloccando il tester.
          Perché non utilizzi una semplice if?:01.smile_80_anim_gi

          Inoltre, ti consiglio di controllare bene la prima if annidata, perché è quasi inutile.
          Non appena quella condizione è verificata, dopo 2 tick NTocchi sarà già diventata 2.

          Ad ogni tick, la start() (sarebbe meglio aggiornarla alla nuova OnTick()) viene eseguita, come credo già saprai.
          Se ci sono delle condizioni da controllare, le controllerà ogni volta che viene eseguita la start().

          La risposta alla domanda nel tuo primo post è sì, esegue NTocchi non appena entra nel blocco dell'if, ma solo se la if al suo interno è falsa (poiché altrimenti c'è il return).:47.nod_80_anim_gif:
          Skype: cadddami

          Comment


            #6
            Ciao, grazie per la risposta. Ho tolto il while e adesso funziona. Questo è il codice aggiornato:

            Code:
            if ( Bid>=(Low[1]-MaxDiscesa*Point) && Bid<=(Low[1]+ToccoMinimo*Point) && (NTocchiH==0 || NTocchiH==1) )
                              {
                                if (NTocchiH==0) NTocchiL=1; else NTocchiL=2;
                                
                               }
                              
                              if ( Bid>=(Close[1]+TickApertura*Point) && (NTocchiL==1 || NTocchiL==2 || NTocchiL==0) )
                                {
                                 if (NTocchiL==1 || NTocchiL==0) NTocchiH=1; else {
                                    
                                    //Apro posizione BUY 
                                    Spread = MarketInfo(Symbol(),MODE_SPREAD)*Point;
                                    StopLossN=Low[1]-StopLossDoppioMinimo*Point;
                                    TakeProfitN=(High[1]-TakeProfitDoppioMinimo*Point)+Spread;
                                    OpenOrderPrice = NormalizeDouble(Ask,Digits);   // Il BUY ha il prezzo di apertura sull'Ask
                                    Ticket = OrderSend(Symbol(),OP_BUY, Lot, OpenOrderPrice, 2, StopLossN, TakeProfitN, "Doppio minimo BUY", MagicNumber, 0, clrGreen);
                                    
                                    if (Ticket<0) { Print ("Err. N°", GetLastError());  }
                                    
                                    NTocchiH=0;                      // Riporto variabili a valori predefiniti
                                    NTocchiL=0;                      //
                                    return;                   }  //Fine else
                                }
            Se la prima if è verificata ad ogni tick perchè si trova dentro l'intervallo quando NTocchiH=0 il valore resterà sempre NTocchiL=1 come voglio io. Diventa 2 quando NTocchiH=1 ovvero quando si sarà spostato di zona e non è più dentro quella if perchè non sono verificate le condizioni Bid>=(Low[1]-MaxDiscesa*Point) && Bid<=(Low[1]+ToccoMinimo*Point)
            Se entra ntocchih o è 0 e è 1 se non è zero ELSE può essere solo 1

            sbaglio?

            Comment


              #7
              Code:
              if  ( Bid>=(Low[1]-MaxDiscesa*Point) ) {
                                
                                if ( Bid<=(Low[1]+ToccoMinimo*Point) && (NTocchiH==0 || NTocchiH==1) )
                                {
                                  if (NTocchiH==0) NTocchiL=1; else NTocchiL=2;
                                  
                                 }
                               
                                if ( Bid>=(Close[1]+TickApertura*Point) && (NTocchiL==1 || NTocchiL==2 || NTocchiL==0) )
                                  {
                                   if (NTocchiL==1 || NTocchiL==0) NTocchiH=1; else {
                                      
                                      //Apro posizione BUY 
                                      Spread = MarketInfo(Symbol(),MODE_SPREAD)*Point;
                                      StopLossN=Low[1]-StopLossDoppioMinimo*Point;
                                      TakeProfitN=(High[1]-TakeProfitDoppioMinimo*Point)+Spread;
                                      OpenOrderPrice = NormalizeDouble(Ask,Digits);   // Il BUY ha il prezzo di apertura sull'Ask
                                      Ticket = OrderSend(Symbol(),OP_BUY, Lot, OpenOrderPrice, 2, StopLossN, TakeProfitN, "Doppio minimo BUY", MagicNumber, 0, clrGreen);
                                      
                                      if(Ticket>0)
                                         {
                                         if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("ORDINE BUY APERTO: ",OrderOpenPrice());  }
                                            else Print("ERRORE APERTURA ORDINE BUY: ",GetLastError());
                                      
                                      NTocchiH=0;                      // Riporto variabili a valori predefiniti
                                      NTocchiL=0;                      //
                                      return;                   }  //Fine else
                                  } 
                                 }
              ho modificato qualcosa...

              Comment

              Working...
              X