Announcement

Collapse
No announcement yet.

ogni tick cosa succede?

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

  • ogladiatore
    replied
    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...

    Leave a comment:


  • ogladiatore
    replied
    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?

    Leave a comment:


  • cadddami
    replied
    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:

    Leave a comment:


  • ogladiatore
    replied
    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..

    Leave a comment:


  • ogladiatore
    replied
    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

    Leave a comment:


  • ogladiatore
    replied
    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

    Leave a comment:


  • ogladiatore
    started a topic ogni tick cosa succede?

    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...
Working...
X