Slawa: Cela s'applique également aux indicateurs. Créez une minuterie d'une minute et demandez le nombre de barres de toutes les séries temporelles qui vous intéressent.
En vérifiant le fait que le timing n'est pas retenu.
Il serait bon d'ajouter cela à la documentation...
Si vous ne laissez que les symboles MOEX dans le Market Watch sur Metaquotes-Demo, TimeCurrent sera en retard de 15 minutes. Dès qu'un seul symbole FOREX est ajouté, TimeCurrent avance de 15 minutes d'un coup.
Chers développeurs ! Encore une fois je demande d'ajouter le temps en ms pour les valeurs de sentiment(SYMBOL_SESSION_...) et tumbler( OnBookEvent()) dès que possible. Donnez une chance de faire la synchronisation de toutes les données disponibles !
Ainsi, si SymbolSelect(true) n'est pas fait et que vous ne définissez pas spécifiquement Pause, il n'y aura pas de glissement.
Honnêtement, je ne comprends pas. Je me demandais : comment savoir si un symbole est prêt dans un indicateur ? Sleep( ) ne fonctionne pas dans les indicateurs. Si l'indicateur trace certaines données statistiques sur des symboles qui ne sont pas connus à l'avance, lorsque vous sélectionnez le symbole suivant dans le panel, il arrive souvent que vous ne puissiez pas obtenir les données le concernant immédiatement, et le tableau contiendra de fausses informations... Comment puis-je être sûr que les données reçues du symbole sont correctes et en quantité suffisante pour obtenir d'autres calculs corrects ?
Artyom Trishkin: Honnêtement, je ne comprends pas. Je me demandais : comment savoir si un symbole est prêt dans un indicateur ? Sleep() ne fonctionne pas dans les indicateurs. Si l'indicateur affiche dans le tableau certaines données statistiques sur des symboles qui ne sont pas connus à l'avance, alors lorsque vous sélectionnez le symbole suivant dans le panneau, il arrive souvent que vous ne puissiez pas obtenir immédiatement les données le concernant, et le tableau affiche de fausses informations... Comment puis-je être sûr, pour d'autres calculs, que les données obtenues à partir du symbole sont correctes, et en quantité suffisante pour obtenir d'autres calculs corrects ?
Lesommeil n'est nécessaire que lorsque le symbole n'est pas dans le Market Watch. Pour tous les symboles qui sont dans le Market Watch avant (et pendant) le début de l'indicateur, aucun glissement n'est nécessaire.
Cela s'applique également aux indicateurs. Créez une minuterie d'une minute et demandez le nombre de barres de toutes les séries temporelles qui vous intéressent.
En vérifiant le fait que le timing n'est pas retenu.
Chers développeurs ! Encore une fois je demande d'ajouter le temps en ms pour les valeurs de sentiment(SYMBOL_SESSION_...) et tumbler( OnBookEvent()) dès que possible. Donnez une chance de faire la synchronisation de toutes les données disponibles !
Metaquotes-Demo, symbole DIG-20170330
SymbolInfoDouble(Symb,SYMBOL_SESSION_PRICE_LIMIT_MIN) = 29528.0
(ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb,SYMBOL_TRADE_MODE) = SYMBOL_TRADE_MODE_FULL (4)
Erreur dans SYMBOL_SESSION_PRICE_LIMIT_MIN : above Asc - no BuyLimit can be set.
Veuillez partager votre vélo : une fonction bool qui vous indique si un symbole est prêt à être négocié ou non.
{
MqlDateTime sTime = {0};
TimeToStruct(time, sTime);
return((ENUM_DAY_OF_WEEK)sTime.day_of_week);
}
// true - находимся в торговой сессии
bool SessionTrade( string Symb = NULL )
{
datetime TimeNow = TimeTradeServer();
const ENUM_DAY_OF_WEEK DayOfWeek = GetDayOfWeek(TimeNow);
TimeNow %= 24 * 60 * 60;
if ((Symb == NULL) || (Symb == ""))
Symb = Symbol();
bool Res = false;
datetime From, To;
for (int i = 0; SymbolInfoSessionTrade(Symb, DayOfWeek, i, From, To) && (!Res); i++)
Res = ((From <= TimeNow) && (TimeNow < To));
return(Res);
}
// Возвращает true, если символ торгуемый. Иначе - false.
bool SymbolTrade( string Symb = NULL, const int Pause = -1 )
{
MqlTick Tick;
if ((Symb == NULL) || (Symb == ""))
Symb = Symbol();
if (Pause >= 0)
Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
return(SymbolInfoTick(Symb, Tick) ? ((Tick.bid != 0) && (Tick.ask != 0) && SessionTrade(Symb) &&
((ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb, SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_FULL)) : false);
}
if (Pause >= 0)
Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
Et si c'est dans un indicateur ?
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading
Bugs, bugs, questions
fxsaber, 2017.02.14 12:31
Immédiatement après SymbolSelect(true) je demande les prix et ils sont zéro. Avec _LastError == 0, SymbolInfoTick == true.
Comment puis-je savoir que les prix des nouveaux symboles pour Marketwatch ont été livrés à Marketwatch ?
D'où les jambes.
Si l'indicateur trace certaines données statistiques sur des symboles qui ne sont pas connus à l'avance, lorsque vous sélectionnez le symbole suivant dans le panel, il arrive souvent que vous ne puissiez pas obtenir les données le concernant immédiatement, et le tableau contiendra de fausses informations... Comment puis-je être sûr que les données reçues du symbole sont correctes et en quantité suffisante pour obtenir d'autres calculs corrects ?
Honnêtement, je ne comprends pas. Je me demandais : comment savoir si un symbole est prêt dans un indicateur ? Sleep() ne fonctionne pas dans les indicateurs.
Si l'indicateur affiche dans le tableau certaines données statistiques sur des symboles qui ne sont pas connus à l'avance, alors lorsque vous sélectionnez le symbole suivant dans le panneau, il arrive souvent que vous ne puissiez pas obtenir immédiatement les données le concernant, et le tableau affiche de fausses informations... Comment puis-je être sûr, pour d'autres calculs, que les données obtenues à partir du symbole sont correctes, et en quantité suffisante pour obtenir d'autres calculs corrects ?