Fehler, Irrtümer, Fragen - Seite 3078

 
fxsaber #:

Der Visualisierer ist bei weitem nicht immer mit der Handelsumgebung synchronisiert. Das heißt, es können alte Informationen angezeigt werden. Die aktuelle ist immer in der EA.

Dies ist ein sehr häufiges Problem, wenn der EA eine Sache sagt, aber der Visualizer etwas anderes anzeigt.

Ich habe eine gute Idee. Ich habe es verstanden, danke. Im Grunde genommen hat der EA logisch weiter gearbeitet und der Auftrag wurde tatsächlich ausgeführt, aber visuell ist er erst später sichtbar.

 
Igor Petrov #:

Ja. Verstanden, danke. Grundsätzlich arbeitet der EA weiter logisch, und die Order wird wirklich nur visuell ausgeführt, wie man später sehen kann.

Um die synchronisierte Situation zum richtigen Zeitpunkt zu sehen, müssen Sie nach dem Anhalten des Testers auf den nächsten Tick warten.

Sie können z. B. fünf Sekunden VOR dem interessanten Moment vorspulen, dann die Pausetaste drücken und mit F12 den jeweils nächsten Tick vorspulen. Alle diese Häkchen werden korrekt wiedergegeben.


Es ist möglich, die Verzögerung im Kommentar der aktuellen Tick-Zeit (mit der Genauigkeit von Millisekunden) und durch den Vergleich mit dem, was im Market Watch Fenster des Visualizers angezeigt wird, zu identifizieren. Wenn es eine Diskrepanz gibt, handelt es sich um eine Desynchronisation.


Wenn es eine Diskrepanz gibt, ist es eine Dyssynchronisation der Visualisierung, wenn der Debugger stoppt (oder wenn Sie Pause drücken), natürlich, sollte vor langer Zeit getan worden sein.

 
Igor Makanu #:

BarsCalculated()https://www.mql5.com/ru/docs/series/barscalculated

was gibt sie zurück? - Ist es nur eine Zahl, die der Indikator nach der Berechnung in OnCalculate() an return(rates_total) zurückgibt?

Überprüfen Sie es - ja, BarsCalculated() ist return(rates_total)

ind A:

int OnCalculate...
{
   static int cnt = 0;
   cnt++;
   Print("cnt = ", cnt);
   return(cnt);
}

ind B:

int OnInit()
{
   handle = iCustom(NULL, PERIOD_M1, "tst_code\\A");
   return(INIT_SUCCEEDED);
}
int OnCalculate...
{
   double tmp[];
   int bc = BarsCalculated(handle);
   if(bc == -1) return(rates_total);
   int copy = CopyBuffer(handle, 0, 0, 1, tmp);
   Print("BarsCalculated = ", bc);
   return(rates_total);
}

lief auf H1 Indikator B, log:

2021.09.02 16:11:44.872 A (EURUSD,M1) cnt = 1

2021.09.02 16:11:44.873 A (EURUSD,M1) cnt = 2

2021.09.02 16:11:44.998 A (EURUSD,M1) cnt = 3

2021.09.02 16:11:44.998 B (EURUSD,H1) BarsCalculated = 3

2021.09.02 16:11:46.617 A (EURUSD,M1) cnt = 4

2021.09.02 16:11:46.617 B (EURUSD,H1) BarsCalculated = 4

2021.09.02 16:11:46.663 A (EURUSD,M1) cnt = 5

2021.09.02 16:11:46.663 B (EURUSD,H1) BarsCalculated = 5

2021.09.02 16:11:46.671 A (EURUSD,M1) cnt = 6

2021.09.02 16:11:46.671 B (EURUSD,H1) BarsCalculated = 6

2021.09.02 16:11:46.684 A (EURUSD,M1) cnt = 7

2021.09.02 16:11:46.685 B (EURUSD,H1) BarsCalculated = 7

2021.09.02 16:11:46.697 A (EURUSD,M1) cnt = 8

2021.09.02 16:11:46.697 B (EURUSD,H1) BarsCalculated = 8

2021.09.02 16:11:47.008 A (EURUSD,M1) cnt = 9

2021.09.02 16:11:47.008 B (EURUSD,H1) BarsCalculated = 9

2021.09.02 16:11:47.029 A (EURUSD,M1) cnt = 10

2021.09.02 16:11:47.029 B (EURUSD,H1) BarsCalculated = 10

2021.09.02 16:11:47.502 A (EURUSD,M1) cnt = 11

2021.09.02 16:11:47.502 B (EURUSD,H1) BarsCalculated = 11

2021.09.02 16:11:47.614 A (EURUSD,M1) cnt = 12

2021.09.02 16:11:47.614 B (EURUSD,H1) BarsCalculated = 12

2021.09.02 16:11:47.620 A (EURUSD,M1) cnt = 13

2021.09.02 16:11:47.620 B (EURUSD,H1) BarsCalculated = 13

2021.09.02 16:11:47.667 A (EURUSD,M1) cnt = 14

2021.09.02 16:11:47.667 B (EURUSD,H1) BarsCalculated = 14

2021.09.02 16:11:47.713 A (EURUSD,M1) cnt = 15

2021.09.02 16:11:47.713 B (EURUSD,H1) BarsCalculated = 15

2021.09.02 16:11:47.726 A (EURUSD,M1) cnt = 16

2021.09.02 16:11:47.726 B (EURUSD,H1) BarsCalculated = 16

 

Guten Tag, ich scheine das Problem nicht lösen zu können.

Ich muss alle Balken beim ersten Durchlauf verarbeiten, nachdem ich nur den letzten Balken verarbeitet habe.

Zuerst wird 0 gedruckt, dann bei jedem neuen Balken nur der letzte, Zwischenbalken werden nicht gedruckt.

Was ist das Problem?

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

      for(int i = prev_calculated; i <= prev_calculated && i < rates_total && !IsStopped(); i++)
        {
         Print(i);
        };
   return(rates_total);
  }
 
SEM #:

Guten Tag, ich scheine das Problem nicht lösen zu können.

Ich muss alle Balken beim ersten Durchlauf verarbeiten, nachdem ich nur den letzten Balken verarbeitet habe.

Zuerst wird 0 gedruckt, dann bei jedem neuen Balken nur der letzte, Zwischenbalken werden nicht gedruckt.

Worin besteht der Fehler?

Entweder i-- oder i ist gleich Null im Ausdruck des Zyklus 1) wird alles richtig gedruckt)
Dies ist für den ersten Lauf. Und dann die klassische neue Bar fangen.
 
SEM #:

Guten Tag, ich scheine das Problem nicht lösen zu können.

Ich muss alle Balken beim ersten Durchlauf verarbeiten, nachdem ich nur den letzten Balken verarbeitet habe.

Zuerst wird 0 gedruckt, dann bei jedem neuen Balken nur der letzte, Zwischenbalken werden nicht gedruckt.

Worin besteht der Fehler?


Für den Anfang würde ich versuchen, es so zu korrigieren:

      for(int i = prev_calculated; i >= prev_calculated && i < rates_total && !IsStopped(); i++)
        {
         Print(i);
        };
 

Ich wünsche Ihnen allen einen guten Tag. Ist jemandem da draußen dieses Problem schon einmal begegnet? Alles war in mt5 bis 10msk heute in Ordnung. Ich habe Aufträge eröffnet und Stop und Profit gesetzt.

Wenn ich eine Order eröffne, einen Stop oder Profit nach 10msk platziere, wartet meine Order in der Schlange und nach 10 Minuten oder mehr wird sie platziert. Und das ist immer noch der Fall.

 
Михаил Савченко #:

Ich wünsche Ihnen allen einen guten Tag. Ist jemandem da draußen dieses Problem schon einmal begegnet? Alles war in mt5 bis 10msk heute in Ordnung. Ich habe Aufträge eröffnet und Stop und Profit gesetzt.

Wenn ich nach 22.00 Uhr einen Auftrag eröffnete und einen Stop oder Gewinn platzierte, wartete mein Auftrag in der Warteschlange, und nach 10 Minuten oder mehr wurde er eröffnet. Und das ist immer noch der Fall.

Manueller Handel? Welcher Makler?
 
mktr8591 #:
Manueller Handel? Welcher Makler?
Ja, ich gebe die Daten manuell auf dem Markt ein. Finam.
 
mktr8591 #:

Für den Anfang würde ich versuchen, es so zu korrigieren:

Ich danke Ihnen! Das hat geholfen.