annuncio

Comprimi
Ancora nessun annuncio.

problema di logica

Comprimi
X
 
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

    problema di logica

    int ToccoMedia(int mediaPer)
    {
    double Ima;int BuySell = 0;
    Ima = iMA(Symbol(),Period(),mediaPer,0,0,0,0);
    if (iStochastic(NULL,0,StocasticKPeriod,StocasticDPer iod,StocasticSlowingPeriod,MODE_SMA,0,MODE_MAIN,0) <
    iStochastic(NULL,0,StocasticKPeriod,StocasticDPeri od,StocasticSlowingPeriod,MODE_SMA,0,MODE_SIGNAL,0 ))//buy
    {
    if ((Low[2] < Ima) && (High[2] > Ima ) && (Low[1] < Ima) && (Open[1] > Ima ))// && Low[0] > Ima && Open[0] > Ima)//buy
    {
    AllertoPerIlRialzo();
    Comment("su");
    }
    }
    if (iStochastic(NULL,0,StocasticKPeriod,StocasticDPer iod,StocasticSlowingPeriod,MODE_SMA,0,MODE_MAIN,0) >
    iStochastic(NULL,0,StocasticKPeriod,StocasticDPeri od,StocasticSlowingPeriod,MODE_SMA,0,MODE_SIGNAL,0 ))//sell

    {
    if ((High[2] > Ima) && (Low[1] < Ima) && (High [1] > Ima)&& (Open[1] < Ima))
    {
    AllertoPerIlRibasso();
    Comment("Giu");
    }
    }
    return 0;
    }

    int start()
    {
    int limit;
    int counted_bars=IndicatorCounted();
    //---- check for possible errors
    if(counted_bars<0) return(-1);
    //---- last counted bar will be recounted
    if(counted_bars>0) counted_bars--;
    limit=Bars-counted_bars;

    //---- main loop
    for(int i=0; i<limit; i++)
    {
    //---- ma_shift set to 0 because SetIndexShift called abowe
    MediaBuffer[i]=iMA(NULL,0,mediaPeriod,0,0,0,i);
    ima=MediaBuffer[i];

    }

    if(barTemp!=Bars)
    {
    //BrekoutMediaMobile(mediaPeriod);
    ToccoMedia(mediaPeriod);
    }




    //---- done
    return(0);
    }
    Ciao a tutti ho un problema di logica che mi sono trovato ad affrontare più volte ma nn mi sono dato una risposta, vi spiego,
    questa funzione un segnale per il buy e uno per il sell li problema è che dopo entrato nella condizione buy o sell mi continua a dare il segnale ogni candela invece io
    vorrei che me lo segnalasse solo alla prima candela che si presenta la condizione,
    mi potete dare idee?

    #2
    ciao, non entro nel dettaglio della funzione, ma nel merito della condizione

    dopo entrato nella condizione buy o sell mi continua a dare il segnale ogni candela invece io vorrei che me lo segnalasse solo alla prima candela che si presenta la condizione,

    quindi vuoi che dopo che la funzione ha individuato una condizione buy o sell lo segnala una sola volta...

    Ok, bisogna inserire una nuova variabile a livello globale
    bool condizioneScattata = false;
    che diventa true al verificarsi della condizione buy o sell.
    finché condizioneScattata == true
    la funzione non viene richiamata ai tick successivi.

    Bisogna naturalmente individuare una condizione che ti riporta a false la variabile booleana,
    affinché la funzione venga nuovamente richiamata e ricerchi la condizione buy o sell.
    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 .

    Commenta


      #3
      questo è il problema............... grazie ci penso

      Commenta


        #4
        Allora ragazzi vorrei discuterne con voi perchè ho varie idee, qualcuno è interessato a collaborare e a discuterne per creare un bell expert ?

        Commenta


          #5
          Allora raga ho modificato la funzione in questo modo:

          1)
          Codice PHP:
          int ToccoMedia(int mediaPer)
          {
             
          double Ima;int BuySell 0;   
             
          Ima iMA(Symbol(),Period(),mediaPer,0,0,0,0);

             if (( 
          BuySell != 0) && (iStochastic(NULL,0,StocasticKPeriod,StocasticDPeriod,StocasticSlowingPeriod,MODE_SMA,0,MODE_MAIN,0) < 
                 
          iStochastic(NULL,0,StocasticKPeriod,StocasticDPeriod,StocasticSlowingPeriod,MODE_SMA,0,MODE_SIGNAL,0)))//buy
                 
          {
                   if  ((
          Low[2] < Ima) && (High[2] > Ima ) && (Low[1] < Ima) && (Open[1] > Ima ))// &&  Low[0] > Ima && Open[0] > Ima)//buy
                      
          {
                         
          BuySell =1;
                         
          AllertoPerIlRialzo();            
                        
          Comment("su");
                        return 
          1;
                      }
                 }   
             else if (( 
          BuySell != -1) && (iStochastic(NULL,0,StocasticKPeriod,StocasticDPeriod,StocasticSlowingPeriod,MODE_SMA,0,MODE_MAIN,0) > 
                 
          iStochastic(NULL,0,StocasticKPeriod,StocasticDPeriod,StocasticSlowingPeriod,MODE_SMA,0,MODE_SIGNAL,0)))//sell

                

                   if ((
          High[2] > Ima) && (Low[1] < Ima) && (High [1] > Ima)&& (Open[1] < Ima))
                   {
                     
          BuySell = -1;
                     
          AllertoPerIlRibasso(); Comment("Giu");
                     return -
          1;
                  }
                }
             else
                
          BuySell=0;
             return 
          0;


          2)
          [PHP]
          int BuySell = 0;
          Codice PHP:
          int ToccoMedia(int mediaPer)
          {
             
          double Ima;
             
          Ima iMA(Symbol(),Period(),mediaPer,0,0,0,0);

             if (( 
          BuySell != 0) && (iStochastic(NULL,0,StocasticKPeriod,StocasticDPeriod,StocasticSlowingPeriod,MODE_SMA,0,MODE_MAIN,0) < 
                 
          iStochastic(NULL,0,StocasticKPeriod,StocasticDPeriod,StocasticSlowingPeriod,MODE_SMA,0,MODE_SIGNAL,0)))//buy
                 
          {
                   if  ((
          Low[2] < Ima) && (High[2] > Ima ) && (Low[1] < Ima) && (Open[1] > Ima ))// &&  Low[0] > Ima && Open[0] > Ima)//buy
                      
          {
                         
          BuySell =1;
                         
          AllertoPerIlRialzo();            
                        
          Comment("su");
                        return 
          1;
                      }
                 }   
             else if (( 
          BuySell != -1) && (iStochastic(NULL,0,StocasticKPeriod,StocasticDPeriod,StocasticSlowingPeriod,MODE_SMA,0,MODE_MAIN,0) > 
                 
          iStochastic(NULL,0,StocasticKPeriod,StocasticDPeriod,StocasticSlowingPeriod,MODE_SMA,0,MODE_SIGNAL,0)))//sell

                

                   if ((
          High[2] > Ima) && (Low[1] < Ima) && (High [1] > Ima)&& (Open[1] < Ima))
                   {
                     
          BuySell = -1;
                     
          AllertoPerIlRibasso(); Comment("Giu");
                     return -
          1;
                  }
                }
             else
                
          BuySell=0;
             return 
          0;

          Allora ragazzi l'idea che volevo inserire era questa che se l'ultimo segnale era Buy lui cercava solo segnali Sell, se l'ultimo segnale era sell lui cercava segnali Buy
          ho provato in questi due modi se dichiaro la variabile BuySell nella funzione lui mi da solo segnali sell, se la dichiaro come variabile globale fuori della funzione nn mi da nessun segnale ......... giustamente, consigli?

          Commenta

          Sto operando...
          X