Erreurs, bugs, questions - page 1802
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Je supporte la synchronisation à chaque déclenchement de OnBookEvent() :(
Il n'y a pas de doute, la question est qu'en plus de cela, il est suggéré d'appeler CopyRates().... à chaque fois. Cela me semble être une crise de colère...
:)
{
if(symbol == Symbol())
{
GetBars(Symbol(), time_frame);
}
}
C'est comme ça qu'on m'a appris en SD
:)
{
if(symbol == Symbol())
{
GetBars(Symbol(), time_frame);
}
}
Si vous voulez dire ou montrer quelque chose, montrez-le correctement... Je ne veux pas deviner quelle fonction vous avez ici et ce qu'elle fait.
Ajouté :
Tu m'as appris ? Et vous n'avez pas donné d'implémentation ?
Si vous voulez dire ou montrer quelque chose, montrez-le correctement... Je ne veux pas deviner quelle fonction vous avez ici et ce qu'elle fait.
Ajouté :
Tu m'as appris ? Et vous n'avez pas donné d'implémentation ?
Qu'est-ce qui est normal ?
Ils ont dit que dans deux minutes les données sont déchargées et pour maintenir la synchronisation
ils m'ont dit d'appeler Bars.
//| 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);
}
Voici
// 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);
}
En appelant GetBars, nous sauvegardons la synchronisation ou essayons de récupérer des données.
Qu'est-ce qui est normal ?
Ils ont dit qu'après deux minutes, les données sont déchargées et pour les garder en synchronisation
ils ont dit d'appeler Bars.
//| 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);
}
Ne sont-elles pas les analogues :
if(bool(SeriesInfoInteger(symbol, period, SERIES_SYNCHRONIZED)))
Oui, il me semblait que Bars() renvoie 0 s'il n'y a pas de synchronisation... Je vais devoir faire un test...
Suggérez-vous que vous fassiez cela à chaque tic-tac ?
Tant que le symbole est sélectionné dans la vue d'ensemble du marché et que l'historique du symbole est détenu par le conseiller expert, il est maintenu en synchronisation. Le maintien par le conseiller expert signifie que vous devez accéder à cet historique au moins une fois toutes les 2 minutes, par exemple en copiant une barre. Si l'historique est synchronisé, aucun temps n'est passé à copier une barre - seulement quelques cycles de processeur. Ou, comme cela vient d'être dit ici, demandez le nombre de barres, également quelques cycles d'horloge...
Pourquoi ? Une seule action suffit.
Tant que le symbole est sélectionné dans la revue de marché et que l'historique du symbole est détenu par le Conseiller Expert, il est maintenu en synchronisation. Le maintien du conseiller expert signifie que vous devez accéder à cet historique au moins une fois toutes les 2 minutes, par exemple en copiant une barre. Si l'historique est synchronisé, aucun temps n'est passé à copier une barre - seulement quelques horloges de processeur.
Les indicateurs comprennent-ils un intervalle de 2 minutes ?
Oui, et en vérifiant le fait de la synchronisation, la synchronisation sera-t-elle également retenue ?
Les indicateurs comprennent-ils un intervalle de 2 minutes ?
Oui, et en vérifiant le fait de synchronisation, la synchronisation sera-t-elle également maintenue ?
La synchronisation n'est pas tenue par la vérification du fait de la synchronisation.
Ou, comme on vient de le dire ici, demandez le nombre de barres, également quelques cycles.