Korrekte Verwendung der OnTick- und Bars-Methoden

 

Hallo,

ich hätte ein Frage zur Verwendung der OnTick- und Bars-Methoden. Ich hoffe, jemand kann helfen.

Ich möchte gerne bei Eintreffen eines neuen Bars in der OnTick-Methode die Werte der letzten n Bars auslesen.

In der Testausgabe des nachfolgenden Codes müsste dann stets der Wert des vorigen Aufruf mit ausgegeben werden, die Werte weichen aber ab.

So sollte es eigentlich aussehen:

1.22 1.33

1.44 1.22 

Gruss

ndnz

#property copyright ""
#property link      ""
#property version   "1.00"

input int                  Inp_Period=25;                                 

int ind_rsi;
double val_rsi[];
int barsPrevious = 0;

int OnInit()
  {
   if(!TerminalInfoInteger(TERMINAL_CONNECTED))
     {
      Print("No Connection!");
      return(INIT_FAILED);
     }
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      Print("Trade is not allowed!");
      return(INIT_FAILED);
     }

   ind_rsi=iRSI(Symbol(),PERIOD_CURRENT, Inp_Period,PRICE_CLOSE);
   if(ind_rsi==INVALID_HANDLE)
     {
      Print("Failed to get handle");
      Print("Handle = ",ind_rsi,"  error = ",GetLastError());
      return(INIT_FAILED);
     }
   
   ArraySetAsSeries(val_rsi,true);
   
   return(INIT_SUCCEEDED);
  }

void OnTick()
  {
   int bars = Bars(Symbol(),PERIOD_CURRENT);
   if (bars > barsPrevious)
   {
      barsPrevious = bars;
      
      if(!GetIndValue())
         return;
      
      PrintFormat("%f %f", val_rsi[0], val_rsi[1]);
     }
  }

bool GetIndValue()
  {
   return !(
          CopyBuffer(ind_rsi,0,0,3,val_rsi) <= 0
          );
  }
 
Schau Dir einfach das Beispiel an das in der Mql-Referenz zu OnTick() steht (Cursor im Editor auf OnTick stellen und F12 drücken) oder hier: in der Dok.
Dokumentation zu MQL5: Ereignisbehandlung / OnTick
Dokumentation zu MQL5: Ereignisbehandlung / OnTick
  • www.mql5.com
OnTick - Ereignisbehandlung - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
ndnz2018:

Hallo,

ich hätte ein Frage zur Verwendung der OnTick- und Bars-Methoden. Ich hoffe, jemand kann helfen.

Ich möchte gerne bei Eintreffen eines neuen Bars in der OnTick-Methode die Werte der letzten n Bars auslesen.

In der Testausgabe des nachfolgenden Codes müsste dann stets der Wert des vorigen Aufruf mit ausgegeben werden, die Werte weichen aber ab.

So sollte es eigentlich aussehen:

1.22 1.33

1.44 1.22 

Gruss

ndnz

das würde ich rausnehmen

if(!TerminalInfoInteger(TERMINAL_CONNECTED))
     {
      Print("No Connection!");
      return(INIT_FAILED);
     }
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
     {
      Print("Trade is not allowed!");
      return(INIT_FAILED);
     }

sonst entfernt sich der Indikator oder ea selbst wenn der Markt geschlossen ist.


google mal

IsNewBar()

das ist eine Funktion für die neue Bar

 
Vielen Dank, Leute !
 

Hallo,

hier ein Beispiel für eine IsNewBar() Implemntierung:

datetime LastBarTime = 0.0;

bool IsNewBar()
{
    bool NewBarFlag = false;

    if (Time[0] != LastBarTime)
    {
        NewBarFlag = true;
        LastBarTime = Time[0];
    }

    return(NewBarFlag);
}


Viele Grüße