Indikator Verschiedene Fragen - Seite 3

 
whroeder1:

Vor Build 600 (3. Februar2014) gab es nur start(). Jetzt gibt es OnTick (EAs), OnCalculate (Indikatoren) und OnStart (Skripte). Ich vergaß, dass Sie über einen Indikator sprechen.

Beginnen Sie mit der Verwendung der neuen Ereignisbehandlungsfunktionen - Funktionen - Grundlagen der Sprache - MQL4-Referenz. Siehe How to do your lookbacks correctly.

Yeah! Jetzt verstehe ich Sie viel klarer, und danke so viel mehr.

Und dein Kommentar #20 hat mich auf eine weitere Idee gebracht. (einmal haben Sie das mit mir geteilt und jetzt behalte ich es in meinem Kopf)

Auch ich versuche, besseren Code für meinen Indikator zu schreiben, und jetzt versuche ich, Kommentar#18zu lernen-@Marco vd Heijden

Dann werde ich weithin Forschung Ihren Kommentar.

Nochmals vielen Dank!

 
Marco vd Heijden:

Bitte legen Sie sie in einem Experten anstelle eines Indikators an, damit Sie sie in Zukunft leichter verwenden können, wenn Sie Ihre Handelsstrategie hinzufügen möchten.

Für das Problem mit den Balken speichern Sie die Eröffnungszeit des Balkens in einer datetime-Variablen und vergleichen Sie einfach die aufgezeichnete Zeit mit der realen Zeit, die dann jedes Mal ausgelöst wird, wenn ein neuer Balken auftaucht.

Hier ist ein Beispiel:

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;

Zunächst einmal herzlichen Dank für Ihren sehr deutlichen Kommentar.

Ich bleibe weiterhin bei Indicator. Ich habe etwas versucht, und es funktioniert gut für mich, aber ich konfrontiert ein Problem, ich kann es nicht auf 'Strategy Tester' testen - es gibt mir fatalen Fehler: MT4 'Not Responding'.

#1 - Marco, kannst du mir bitte sagen, woher der Fehler kommt?

#2 - Ist der untenstehende Code richtig?

Untenstehender Code, den ich ausprobiert habe.

string _prefix = "_Preriod_M5 - " ;
string _vlineName_M5 ;
int _prd = PERIOD_M5 ;

int _prd_add = PeriodSeconds( _prd ) ;
datetime _dt_Prd_M5 ;

int _time_M5 ;
datetime _prdCvrt_M5 ;
datetime _timeCvrt_M5 ;

//---init
EventSetMillisecondTimer( 10 );
_CreateLines();

//---timer
if ( _dt_Prd_M5 != iTime( Symbol(), _prd, 0 ) )
{
    _dt_Prd_M5 = iTime( Symbol(), _prd, 0 );
    _CreateLines();
}

//---_CreateLines()
    //---
    int _dayCnt_M5 = 0;
    int _cnt_M5 = iBarShift( Symbol(), 0, iTime( Symbol(), PERIOD_M15, _dayCnt_M5 ) );
    for ( int i = 0; i < _cnt_M5; i++ )
    {
        //---time convert
        _time_M5     = Time[i];
        _prdCvrt_M5  = PeriodSeconds( _prd );
        _timeCvrt_M5 = _time_M5 - ( _time_M5 % _prdCvrt_M5 ) + _prdCvrt_M5;

        //---name
        _vlineName_M5 = _prefix + "PERIOD_M5 - " + TimeToStr( _timeCvrt_M5, TIME_DATE|TIME_MINUTES );

        //---
        if ( _Period < PERIOD_M30 )
        {
            {
                ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
            }
        }
    }
    ObjectMove ( 0, _vlineName_M5, 0, _dt_Prd_M5, 0 );

Ich habe aufgehört, daran zu arbeiten, ich werde nach Ihrem Kommentar fortfahren. (Eigentlich mache ich mir Sorgen, dass der obige Code meine anderen Indikatoren zerstört, wenn ich ihn zusammen verwende).

Vielen Dank.

 
Die Timer-Funktion funktioniert nicht im MT4-Strategietester, daher müssen Sie sie in die Tick-Funktion einfügen.
 
Marco vd Heijden: Die Timer-Funktion funktioniert nicht in MT4 Strategie-Tester, so dass Sie es in der Tick-Funktion setzen müssen.
Im Backtest führt OnTimer() nicht aus (M. Ali) - MQL4 forum
Chart Ereignis für MT4 Backtester (Migel) - MQL4 forum
 
Marco vd Heijden:
Die Timer-Funktion funktioniert nicht in MT4 Strategie-Tester, so dass Sie es in der Tick-Funktion setzen müssen.

Vielen Dank!

Ich weiß sicher, dass das Problem nicht vom Code kommt.

 
Woher wissen Sie das?
 

Marco vd Heijden:

Hier ist ein Beispiel:

datetime  M5;

//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(250);

//--- create some things

   CreateLines(); // Function that creates time lines

//--- load open times
   M5=iTime(Symbol(),PERIOD_M5,0);

//--- set timelines

   ObjectMove(0,"Time-M5",0,M5,0);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(M5!=iTime(Symbol(),PERIOD_M5,0))
     {
      M5=iTime(Symbol(),PERIOD_M5,0);  // overwrite old value with new value  
      //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M5",0,M5,0);
     }
  }
//+------------------------------------------------------------------+

Ich danke Ihnen vielmals.

Dieser Kommentar hat mich viel gelehrt.

Sieht aus wie dieser Code funktioniert gut für mich, die ich es meine vorherigen Kommentar gepostet.

Aber ich brauche, dass Code (die es funktioniert für Period_M5) wird nicht an der Uhr 12:00 (es ist vielleicht 13:00, 14:00...) und unten Code ignorieren 'OBJ_VLINE's Vergangenheit Zeiten (das ist gut für mich) aber während derzeit Uhr 12:00 unten Code zeigt mir zusätzlich aktuelle Zeit VLINE aber ich will es nicht.

if ( TimeHour( _timeCvrt_M5 ) != 12 )
{
    ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
}   //---if Close

Ich habe etwas versucht, das mein Problem löst, aber es hat nicht richtig funktioniert.

Ich habe auch einen Screenshot hinzugefügt.


Bitte, helfen Sie mir, ich brauche wirklich, um dieses Problem zu lösen.

Herzlichen Dank im Voraus.

Dateien:
 
Marco vd Heijden:
Woher wissen Sie das?

Weil die Verbindung unterbrochen wurde und ich versucht habe,"Strategy Tester" zu verwenden, während die Verbindung unterbrochen war, und es funktioniert perfekt für mich.

Nachdem ich Ihre und Mr. William Kommentare lesen, und dann weiß ich sicher, über sie.

Ist das nicht genug, sorry?

 
if ( TimeHour( _timeCvrt_M5 ) != 12 )
{
    ObjectCreate( _vlineName_M5, OBJ_VLINE, 0, _timeCvrt_M5, 0 );
}   //---if Close

In diesem Beispiel erhalten Sie eine Zeile zu jeder Stunde ABER 12:00, weil Sie mit der Anweisung != differ then 12 ausschließen, also wenn es == gleich 12 ist, keine Zeile.

 
Marco vd Heijden:

In diesem Beispiel erhalten Sie eine Zeile zu jeder Stunde ABER 12:00, weil Sie mit != differ then 12 Anweisung ausschließen, so dass, wenn es == gleich 12 ist keine Zeile.

Genialer Mann, danke :))

Das ist einfach, aber es stört mich nicht. Ganz einfach und einfach wow.

(Eigentlich benutze ich '==' in meinem Indikator, aber ich habe mich wirklich auf 'OnTimer' konzentriert)

//--- zweites Mal bearbeitet...

Dies funktioniert gut für mich, aber wenn die Zeit 00:00 wird - zusätzliche aktuelle Zeit VLINE zeigt wieder.

if (
     TimeHour( _timeCvrt_M5 ) == 1  ||
     TimeHour( _timeCvrt_M5 ) == 2  ||
     TimeHour( _timeCvrt_M5 ) == 3  ||

     TimeHour( _timeCvrt_M5 ) == 5  ||
     TimeHour( _timeCvrt_M5 ) == 6  ||
     TimeHour( _timeCvrt_M5 ) == 7  ||

     TimeHour( _timeCvrt_M5 ) == 9  ||
     TimeHour( _timeCvrt_M5 ) == 10 ||
     TimeHour( _timeCvrt_M5 ) == 11 ||

     TimeHour( _timeCvrt_M5 ) == 13 ||
     TimeHour( _timeCvrt_M5 ) == 14 ||
     TimeHour( _timeCvrt_M5 ) == 15 ||

     TimeHour( _timeCvrt_M5 ) == 17 ||
     TimeHour( _timeCvrt_M5 ) == 18 ||
     TimeHour( _timeCvrt_M5 ) == 19 ||

     TimeHour( _timeCvrt_M5 ) == 21 ||
     TimeHour( _timeCvrt_M5 ) == 22 ||
     TimeHour( _timeCvrt_M5 ) == 23
)

(Ich habe einige Male diesen Kommentar aktualisiert, weil ich recherchiert habe)

Bitte helfen Sie mir.