Fehler, Irrtümer, Fragen - Seite 1802
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Soll das bei jedem Tick gemacht werden?
Ich unterstütze die Synchronisierung bei jedem Auslösen von OnBookEvent() :(
Keine Fragen hier, die Frage ist, dass zusätzlich zu diesem, wird vorgeschlagen, jedes Mal die CopyRates().... Funktion aufrufen. Das scheint mir ein Wutanfall zu sein...
:)
{
if(symbol == Symbol())
{
GetBars(Symbol(), time_frame);
}
}
So wurde es mir in SD beigebracht
:)
{
if(symbol == Symbol())
{
GetBars(Symbol(), time_frame);
}
}
Wenn Sie etwas sagen oder zeigen wollen, zeigen Sie es bitte richtig... Ich möchte nicht raten, welche Funktion Sie hier haben und was sie tut.
Hinzugefügt:
Haben Sie mich unterrichtet? Und Sie haben keine Umsetzung angegeben?
Wenn Sie etwas sagen oder zeigen wollen, zeigen Sie es bitte richtig... Ich möchte nicht raten, welche Funktion Sie hier haben und was sie tut.
Hinzugefügt:
Haben Sie mich unterrichtet? Und Sie haben keine Umsetzung angegeben?
Was ist normal?
Sie sagten, dass die Daten in zwei Minuten entladen werden und die Synchronisation aufrechterhalten wird
Sie sagten mir, ich solle Bars anrufen.
//| Custom indicator Get bars function |
//+------------------------------------------------------------------+
int GetBars(string symbol, ENUM_TIMEFRAMES period)
{
if(!IsStopped())
{
if(SymbolIsSynchronized(symbol))
{
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
{
int a_bars = Bars(symbol, period);
if(a_bars > 0)
{
return(a_bars);
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(LoadServerData(symbol, period));
}
}
return(0);
}
Hier ist
// Custom indicator Check timer function |
//+------------------------------------------------------------------+
bool CheckTimer(const ulong start_value, const ulong per_value)
{
ulong end_value = GetMicrosecondCount();
if(end_value < start_value)
{
if((start_value - end_value) >= per_value) return(true);
}
else
{
if((end_value - start_value) >= per_value) return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get local data function |
//+------------------------------------------------------------------+
int GetLocalData(const string a_symbol, ENUM_TIMEFRAMES a_period)
{
long first_date;
int fail_cnt = 0;
while((fail_cnt < 3) && !IsStopped())
{
first_date = long( SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_TERMINAL_FIRSTDATE));
if(first_date > 0)
{
int f_cnt = 0;
datetime times[1];
long a_bars = 0;
while((f_cnt < 5) && !IsStopped())
{
if(bool(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_BARS_COUNT, a_bars)))
{
if ( a_bars > 0 )
{
if( bool(SeriesInfoInteger(a_symbol, a_period, SERIES_BARS_COUNT, a_bars)))
if(a_bars > 0) return(int(a_bars));
}
}
else
{
//--- force timeseries build
CopyTime(a_symbol, a_period, 0, 1, times);
ulong start_tick = GetMicrosecondCount();
while(!CheckTimer(start_tick, 5000))
{
f_cnt--;
f_cnt++;
}
}
f_cnt++;
}
}
else
{
ulong start_tick = GetMicrosecondCount();
while(!CheckTimer(start_tick, 5000))
{
fail_cnt--;
fail_cnt++;
}
}
//---
fail_cnt++;
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
int fail_cnt = 0;
while((fail_cnt < 5) && !IsStopped())
{
long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
if(first_date > 0)
{
if(SymbolIsSynchronized(a_symbol))
{
return(GetLocalData(a_symbol, period));
}
}
else
{
ulong start_tick = GetMicrosecondCount();
while(!CheckTimer(start_tick, 20000))
{
fail_cnt--;
fail_cnt++;
}
}
fail_cnt++;
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator Get bars function |
//+------------------------------------------------------------------+
int GetBars(string symbol, ENUM_TIMEFRAMES period)
{
if(!IsStopped())
{
if(SymbolIsSynchronized(symbol))
{
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
{
int a_bars = Bars(symbol, period);
if(a_bars > 0)
{
return(a_bars);
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(LoadServerData(symbol, period));
}
}
return(0);
}
Durch den Aufruf von GetBars wird die Synchronisation gesichert oder es wird versucht, Daten abzurufen
Was ist normal?
Sie sagten, dass die Daten nach zwei Minuten entladen werden und dass sie synchronisiert werden müssen.
Sie sagten, ich solle Bars anrufen.
//| Custom indicator Get bars function |
//+------------------------------------------------------------------+
int GetBars(string symbol, ENUM_TIMEFRAMES period)
{
if(!IsStopped())
{
if(SymbolIsSynchronized(symbol))
{
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
{
int a_bars = Bars(symbol, period);
if(a_bars > 0)
{
return(a_bars);
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(GetLocalData(symbol, period));
}
}
else
{
return(LoadServerData(symbol, period));
}
}
return(0);
}
Sind das nicht die Entsprechungen:
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
Ja, ich hatte den Eindruck, dass Bars() 0 zurückgibt, wenn es keine Synchronisierung gibt... Ich werde einen Test machen müssen...
Wollen Sie damit sagen, dass dies bei jeder Zecke gemacht werden sollte?
Solange das Symbol in der Marktübersicht ausgewählt ist und die Historie für das Symbol im Expert Advisor vorhanden ist, wird es synchron gehalten. Das Halten durch den Expert Advisor bedeutet, dass Sie mindestens einmal alle 2 Minuten auf diese Historie zugreifen müssen, indem Sie z.B. einen Balken kopieren. Wenn die Historie synchronisiert ist, wird für das Kopieren eines Taktes keine Zeit aufgewendet - nur ein paar Prozessorzyklen. Oder, wie es hier gerade gesagt wurde, fragen Sie nach der Anzahl der Takte, auch ein paar Taktzyklen
Warum? Eine einzige Aktion ist ausreichend.
Solange das Symbol in der Marktübersicht ausgewählt ist und die Historie des Symbols im Expert Advisor gespeichert ist, wird es synchronisiert. Das Halten des Expert Advisors bedeutet, dass Sie mindestens einmal alle 2 Minuten auf diese Historie zugreifen müssen, indem Sie zum Beispiel einen Balken kopieren. Wenn der Verlauf synchronisiert ist, wird keine Zeit für das Kopieren eines Taktes aufgewendet, sondern nur ein paar Prozessor-Takte.
Enthalten die Indikatoren einen Abstand von 2 Minuten?
Ja, und wird bei der Überprüfung der Synchronisierung auch die Synchronisierung beibehalten?
Enthalten die Indikatoren einen Abstand von 2 Minuten?
Ja, und wird durch die Überprüfung der Synchronisierung auch die Synchronisierung beibehalten?
Die Synchronisierung wird nicht durch die Überprüfung der Tatsache der Synchronisierung gehalten.