Erreurs, bugs, questions - page 1786
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
Combien de temps ont duré les mesures ? Et qu'est-ce que cela a à voir avec la fixation des indicateurs? L'heure d'arrivée du tick actuel est 10, l'heure d'arrivée du tick précédent est 11. Il s'agit d'une erreur de la fonction qui ne renvoie pas la valeur actuelle. Vous êtes d'accord pour dire que la valeur temporelle actuelle ne peut pas être inférieure à la précédente, n'est-ce pas ?
SymbolInfoTick fonctionne différemment dans les indicateurs et dans les EAs.
Dans un indicateur, il renvoie toujours le tick qui était l'initiateur de l'appel de OnCalculate. Et ces tics initiateurs dans l'indicateur ne doivent pas être ignorés - c'est l'idéologie des développeurs. Le problème réside dans la formation de la file d'attente de ces tics.
Dans l'EA, le SymbolInfoTick dans OnTick ne renvoie pas le tick qui a initié l'appel de OnTick, mais fait une demande complète pour l'état actuel.
Mesuré dix minutes sur Si.
SymbolInfoTick fonctionne différemment dans les indicateurs et dans les EAs.
Dans un indicateur, il renvoie toujours le tick qui a été l'initiateur de l'appel de OnCalculate. Et ces tics initiateurs dans l'indicateur ne doivent pas être ignorés - c'est l'idéologie des développeurs. Le problème réside dans la formation de la file d'attente de ces tics.
Dans le conseiller expert, SymbolInfoTick dans OnTick ne renvoie pas le tick qui a initié l'appel de OnTick, mais fait une demande complète pour l'état actuel.
Mesuré dix minutes sur Si.
Troisièmement, même si SymbolInfoTick() est OK - il fonctionne toujours mieux que CopyTicks(), car il renvoie souvent des valeurs plus à jour.
Attrape les situations où CopyTicks donne des données plus récentes que SymbolInfoTick appelé LATER. C'est pourquoi je fais des requêtes avec deux fonctions à la fois et je sélectionne le tick le plus récent.
SymbolInfoTick fonctionne différemment dans les indicateurs et dans les EAs.
Dans un indicateur, il renvoie toujours le tick qui a été l'initiateur de l'appel de OnCalculate. Et ces tics initiateurs dans l'indicateur ne doivent pas être ignorés - c'est l'idéologie des développeurs. Le problème réside dans la formation de la file d'attente de ces tics.
Dans le conseiller expert, le SymbolInfoTick dans OnTick ne renvoie pas le tick qui a initié l'appel de OnTick, mais fait une demande complète pour l'état actuel.
Il serait alors logique de le compléter par le programme
avec la tique qui l'a causé, surtout que ça ne coûte rien.
Et la fonction SymbolInfoTick() devrait être entièrement mise en œuvre dans les indicateurs et les conseillers experts (elle renverra les prix actuels, et non les prix au moment de l'appel deOnCalculate).
MT4 continue de surprendre par son imprévisibilité ;)) Qui rédige la mise en œuvre des fonctions de négociation ? MT4 build 1045
Commençons par l'info humoristique, elle devrait être envoyée à Zadornov, car il est toujours en train de parler des Américains stupides.
SYMBOLE_TRADE_TICK_VALUE
Valeur SYMBOL_TRADE_TICK_VALUE_PROFIT
double
SYMBOL_TRADE_TICK_VALUE_PROFIT
Non pris en charge
double
SYMBOLE_TRADE_TICK_VALUE_PERTE
Non pris en charge
double
En attendant, SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue) produit une valeur. BUT !!!!! Si vous lancez l'indicateur sur le graphique, il est OK au démarrage. Et si vous redémarrez le terminal, cette fonction retournera vrai et zéro tickValue au premier appel ! Alors ne vous détendez pas, M. le développeur de conseillers experts, tout doit être vérifié de vos propres mains.
bool Quote2Price(double diff,double &price4lot,string symbol="EURUSD")
{
int dig=(int)MarketInfo(symbol,MODE_DIGITS);
if(dig == 0)
return(false); // symbol is none
double tickSize = MarketInfo(symbol, MODE_TICKSIZE); // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
//double tickValue = MarketInfo(symbol, MODE_TICKVALUE); // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
double tickValue;
if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
Print(__FUNCTION__, " SymbolInfoDouble(...) returns false"); // всегда возвращается true!!
Print("tickSize= ", tickSize, " tickValue= ", tickValue);
if(tickValue == 0.0) // исключений нет, терминал врет, надо тупо везде проверять на деление на ноль...
return false;
double price=diff/(tickSize/tickValue); // а то завалимся c tickValue == 0
price4lot=NormalizeDouble(price,2);
return (true);
}
Sortie :
2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15 : tickSize= 1e-05 tickValue= 1.0
2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15 : tickSize= 1e-05 tickValue= 1.0
2017.02.07 16:08:24.515 ShowImportantParams EURUSD.e,M15 : tickSize= 1e-05 tickValue= 0.0
2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15 : tickSize= 1e-05 tickValue= 0.0
2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15 : initialisé
2017.02.07 16:08:23.002 Indicateur personnalisé ShowImportantParams EURUSD.e,M15 : chargé avec succès
Il serait donc logique de compléter
avec la tique qui l'a appelé, d'autant plus qu'il ne coûte rien
Et la fonction SymbolInfoTick() devrait être pleinement fonctionnelle dans les indicateurs et les conseillers experts (elle devrait renvoyer les prix actuels, et non les prix au moment de l'appelOnCalculate).
Il est même logique d'ajouter un numéro de tic à la file d'attente actuelle.
Il serait même logique d'ajouter le numéro du tick dans la file d'attente actuelle.
Puis j'écris directement à ServiceDesk#1666680
Veuillez envisager de modifier le fonctionnement de la fonction
afin que dans les indicateurs (y compris le corps OnCalculate), il renvoie les prix actuels conformément à sa description.
tout en complétant la langue par la fonction
qui renverrait le symbole et le tick qui ont provoqué l'appel à la fonction OnCalculate
ou comme alternative (*) : vous pouvez ajouter ces paramètres à l'appel OnCalculate.