Help funzione con stochastic

Sezione dedicata a metatrader (ed altre piattaforme) ed al suo linguaggio di programmazione per il trading automatico
Rispondi
texcs
Messaggi: 144
Iscritto il: 29/05/2014, 23:08

Help funzione con stochastic

Messaggio da texcs »

Codice: Seleziona tutto

void DrawAllert(string text, color C=LightGray)
{

ObjectCreate ("rect",OBJ_LABEL,0,0,0,0,0);
ObjectSet ("rect",OBJPROP_XDISTANCE,10);
ObjectSet ("rect",OBJPROP_YDISTANCE,20);
ObjectSetText ("rect",text,10,"Times New Roman",C);
}
bool IperComp (double stochastic1now, double signal1now, double LimitUpIperComp, double LimitDownIperComp)
{
if ((stochastic1now && signal1now < LimitUpIperComp) && ( stochastic1now && signal1now > LimitDownIperComp) )
return 1;
else
return 0;
}


bool IperVend (double stochastic1now, double signal1now, double LimitUpIperVend, double LimitDownIperVend){

if ((stochastic1now && signal1now > LimitDownIperVend) && ( stochastic1now && signal1now < LimitUpIperVend))
return 1;
else
return 0;
}
int start() {
int limit, i; //counter;
double stochastic1now, stochastic1previous, stochastic2previous, stochastic1after, signal1previous, signal1now;

//double stochastic2after,;
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;
bool iperVenduto=false, iperComprato=false;
for(i = 0; i < limit; i++) {


stochastic1now = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,0,1,0,i); //Stocastic ora
signal1now = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,0,1,MODE_SIGNAL,i); //Segnale ora
stochastic1previous = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,0,1,0,i+1); //Stocastic precedente
signal1previous = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,0,1,MODE_SIGNAL,i+1); //Segnale precedente

if (IperComp(stochastic1now,signal1now,LimitUpIpercompr,LimitDownIpercompr))
{
iperComprato = true;
}
if (IperVend(stochastic1now,signal1now,LimitUpIpervend,LimitDownIpervend))
{
iperVenduto=true;
}

}
if (iperComprato=true)
DrawAllert("Gli stocastici sono in zona ipercomprato Stoc:"+ stochastic1now + "Signal:"+ signal1now, Red);
else if (iperVenduto=true)
DrawAllert("Gli stocastici sono in zona ipervenduto Stoc:"+ stochastic1now + "Signal:"+ signal1now, Red);
Ragazzi ho fatto questa funzione per per visualizzare il valore dello stocastico e del segnale però ho questo problema quando lo inserisco sul grafico dove c'è già inserito l'indicatore stochatstico di default di MT succede questo:
l'indicatore di default di MT mi un valore diverso dal valore che mi da l'indicatore del che ho fatto io, dov'è l'errore? come correggerlo?
Avatar utente
carlo10
Messaggi: 4259
Iscritto il: 08/05/2014, 21:17

Re: Help funzione con stochastic

Messaggio da carlo10 »

Ciao texcs,

non ho analizzato il codice che hai creato ma solitamente quando ho degli errori di questo genere mi aiuta molto inserire delle stampe di debug (tramite la funzione Print o direttamente sul grafico a seconda di come preferisci) in modo da farmi capire dov'è l'errore.

Magari spiegaci passo passo il codice così è più facile anche per chi passa provare ad aiutarti.

Vedo che sono poche righe ma mettersi a trovare l'errore non è sempre immediato.
texcs
Messaggi: 144
Iscritto il: 29/05/2014, 23:08

Re: Help funzione con stochastic

Messaggio da texcs »

Praticamente a questo punto:

Codice: Seleziona tutto

    
if (iperComprato=true)
      {DrawAllert("Gli stocastici sono in zona ipercomprato Stoc:"+ stochastic1now + "Signal:"+ signal1now, Green);        
      DrawAllert("Signal:"+ signal1now, Red);}

    else if (iperVenduto=true)
      DrawAllert("Gli stocastici sono in zona ipervenduto Stoc:"+ stochastic1now, Red);
      DrawAllert("Signal:"+ signal1now, Red);        
 


Il Problema è che entra sempre nella prima condizione "ipercomprato " e visualizza solo " DrawAllert("Signal:"+ signal1now, Red);" e poi il valore visualizzato non è uguale a quello visualizzato dal "singal" dell'indicatore stochastico di default di MT
Avatar utente
carlo10
Messaggi: 4259
Iscritto il: 08/05/2014, 21:17

Re: Help funzione con stochastic

Messaggio da carlo10 »

Se ti entra sempre lì significa che questa condizione è sempre vera:

Codice: Seleziona tutto

IperComp(stochastic1now,signal1now,LimitUpIpercompr,LimitDownIpercompr)
Che di fatto indica che questa condizione è sempre vera:

Codice: Seleziona tutto

(stochastic1now && signal1now < LimitUpIperComp) && ( stochastic1now && signal1now > LimitDownIperComp)
Nel codice iniziale che hai postato però non vedo queste 2 variabili:
LimitUpIpercompr,LimitDownIpercompr

Questo significa che non hai incollato la versione completa. Magari carica direttamente il file mq4 sul forum (una versione che compili senza errori).
texcs
Messaggi: 144
Iscritto il: 29/05/2014, 23:08

Help funzione con stochastic 2

Messaggio da texcs »

Salve a tutti, Vi posto un programmino che ho fatto:

Codice: Seleziona tutto

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
extern int       KPeriod1     =  5;
extern int       DPeriod1     =  3;
extern int       Slowing1     =  3;
extern string note3 = "0=sma, 1=ema, 2=smma, 3=lwma";
extern int       MAMethod1    =   0;
extern string note4 = "0=high/low, 1=close/close";
extern int       PriceField1  =   0;

int deinit()
  {
//----
   ClearObjects(); 
   return(0);
  }
void ClearObjects() 
{ 
  for(int i=0;i<ObjectsTotal();i++) 
  { ObjectDelete(ObjectName(i)); i--; } 
}
void DrawAllert(string text, int xdistance, int ydistance, color C=LightGray)
{

         ObjectCreate         ("rect",OBJ_LABEL,0,0,0,0,0);
         ObjectSet            ("rect",OBJPROP_XDISTANCE,xdistance);
         ObjectSet            ("rect",OBJPROP_YDISTANCE,ydistance);
         ObjectSetText ("rect",text,20,"Times New Roman",C);
}
bool NewBar()
{
   static datetime lastbar;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
      
   }
   else
      return(false);
}
int start() {
   int limit;
   double mainnow, signalnow, mainprevious, signalprevious, mainafter, signalafter;
   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;
   
   for(int j = 0; j <= limit; j++) 
   {
   
    
      mainnow = iStochastic(NULL,1,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,0,j);
      mainprevious = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,0,j+1);
      mainafter = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,0,j-1);
      signalnow = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,1,j);
      signalprevious = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,1,j+1);
      signalafter = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,1,j-1);
      
      if( NewBar() && (mainnow>signalnow) && (mainprevious<signalprevious) && (mainnow>signalnow)))
       {
         DrawAllert("incrocio Time = "+ TimeToStr(CurTime(),TIME_DATE)+" " + TimeHour(CurTime())+":"+ TimeMinute(CurTime()),10,10,Green);
         DrawAllert("incrocio 2 Time = "+ TimeToStr(CurTime(),TIME_DATE)+" " + TimeHour(CurTime())+":"+ TimeMinute(CurTime()),15,15,Green);
       }
    }
   return (0);
   }
Il programma dovrebbe segnalarmi i 2 incroci degli stochastic che avvengo sussessivamente all'inserimento dell' AE nel grafico invece appena lo inserisco sul grafico stampa "DrawAllert("incrocio 2 Time = "+ TimeToStr(CurTime(),TIME_DATE)+" " + TimeHour(CurTime())+":"+ TimeMinute(CurTime()),15,15,Green);" Aggiornando l'ora ogni 2 o 3 min ? c'è qualcosa che non va ma non riesco a capire cosa mi aiutate?
Poi ho provato a farmi stampare i valori di " mainnow = iStochastic(NULL,1,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,0,j);
signalnow = iStochastic(NULL,0,KPeriod1,DPeriod1,Slowing1,MAMethod1,PriceField1,1,j);" però se mi faccio stampare i vaalori e li confronto con i valori dell'oscillatore stocastico della Mt4 non sono uguali e mi sono sempre chiesto il perchè, mi sapete dare una spiegazione?
Vi Ringrazio in anticipo
Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti