C-4: Qu'entendez-vous par "aligner" ? Normaliser la mantisse par le nombre de décimales? - C'est à cela que sert la fonction NormalizeDouble. Si c'est autre chose, décrivez-le plus en détail.
A l'entrée tout double positif, à la sortie arrondi au prix réel qui peut être à cet instrument.
Si l'échelon de prix est de 0,25, arrondissez à 0,25. Un peu comme ça :
Cela dit, s'il y a un décalage (comme 0,13 ; 0,38 ; 0,63 ; 0,88), alors cela compte. Ensuite :
sur l'entrée 1.0 sur la sortie 1.13 ;
1,25 en entrée et 1,38 en sortie ;
1,5 ---> 1,63...
Au niveau de l'API, cela pourrait être codé en quelques commandes en langage assembleur et il s'agit clairement d'une fonction de base. Je pensais qu'il y en avait un =/
Merci pour la réponse, je négocie en direct et MT5 est toujours activé. Je ne sais pas si la mise à jour est automatique, mais si ce n'est pas le cas, où se trouve la mise à jour en direct ?
Newalligator: Merci pour la réponse, je négocie en direct et MT5 est toujours activé. Si le programme lui-même me demande de mettre à jour, c'est bien, mais sinon, où se trouve cette mise à jour Live ?
Lorsque vous vous connectez à votre compte sur le serveur MetaQuotes-Demo, le MetaTrader vérifie automatiquement les mises à jour. S'il y a une mise à jour, il téléchargera automatiquement la nouvelle version.
Bonjour à tous ! Il y a un problème - je ne peux pas utiliser les lectures d'un autre indicateur personnalisé dans un indicateur personnalisé. Je suis presque sûr que je m'y prends mal, mais je vais quand même coller le code :
intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &price[]) {
if(rates_total < iPeriod ) {
return(0);
}
int first;
if ( prev_calculated == 0 ) {
first = iPeriod + begin;
} else {
first = prev_calculated - 1;
}
// Пользовательский индикатор ROC для EURUSD double aRocRatesEURUSD[];
int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC");
CopyBuffer(iRocHandleEURUSD, 0, 0, rates_total, aRocRatesEURUSD);
for(int bar = first; bar < rates_total; bar++) {
Dans ce code, le tampon de l'indicateur Rate Of Changes(aRocRatesEURUSD) n'est pas disponible. Je ne comprends pas comment connecter cet indicateur correctement, s'il vous plaît aidez-moi à le comprendre.
Bonjour à tous ! Il y a un problème - je ne peux pas utiliser les lectures d'un autre indicateur personnalisé dans un indicateur personnalisé. Je suis presque sûr que je m'y prends mal, mais je vais quand même coller le code :
Dans ce code, le tampon de l'indicateur Rate Of Changes(aRocRatesEURUSD) n'est pas disponible. Je n'arrive pas à comprendre comment connecter cet indicateur correctement, s'il vous plaît aidez-moi à le comprendre.
Les poignées de l'indicateur doivent être déclarées dans OnInit() :
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
// Пользовательский индикатор ROC для EURUSD double aRocRatesEURUSD[];
int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC");
}
Sinon, il s'avère que vous créez un nouvel indicateur personnalisé chaque fois que vous appelez OnCalculate().
jommerbot: Cela ne fonctionne pas non plus. En conséquence, le tableau contenant le tampon est soit vide, soit plein de valeurs gauches.
Néanmoins, il est correct de déclarer les poignées des indicateurs dans OnInit(). Une autre question est de savoir pourquoi vous devez écrire à chaque fois qu'un nouveau tick arrive (la fonction OnCalculate())
rates_total, // размер входных таймсерий
au tampon
aRocRatesEURUSD
? Cela peut vraiment ralentir le terminal. Et en plus, c'est une histoire très profonde.
OK, même dans le cas le plus simple, ça ne marche pas :
#property indicator_chart_window#property indicator_buffers1#property indicator_plots1#property indicator_type1 DRAW_LINE#property indicator_color1 Red
double ExtLineBuffer[];
int iRocHandleEURUSD;
int iPlotShift = 0;
int iPeriod = 6;
voidOnInit() {
SetIndexBuffer(0, ExtLineBuffer, INDICATOR_DATA);
PlotIndexSetInteger(0, PLOT_SHIFT, iPlotShift);
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, iPeriod - 1);
int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC");
if( iRocHandleEURUSD == INVALID_HANDLE )
{
Print("Не удалось получить хендл индикатора ROC EURUSD");
}
}
intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &price[]) {
if(rates_total < iPeriod ) {
return(0);
}
int first;
double aRocRatesEURUSD[];
if ( prev_calculated == 0 ) {
first = iPeriod + begin;
} else {
first = prev_calculated - 1;
}
for(int bar = first; bar < rates_total; bar++) {
CopyBuffer(iRocHandleEURUSD, 0, bar, 1, aRocRatesEURUSD);
Print(aRocRatesEURUSD[ 0 ]);
ExtLineBuffer[ bar ] = NormalizeDouble(aRocRatesEURUSD[ 0 ], SYMBOL_DIGITS);
}
return(rates_total);
}
Je ne comprends pas où est mon erreur. La copie du même tampon d'indicateur dans l'EA et le script fonctionne, mais pas dans l'indicateur. Le manche de l'indicateur est initialisé sans erreur.
Qu'entendez-vous par "aligner" ? Normaliser la mantisse par le nombre de décimales? - C'est à cela que sert la fonction NormalizeDouble. Si c'est autre chose, décrivez-le plus en détail.
A l'entrée tout double positif, à la sortie arrondi au prix réel qui peut être à cet instrument.
Si l'échelon de prix est de 0,25, arrondissez à 0,25. Un peu comme ça :
Cela dit, s'il y a un décalage (comme 0,13 ; 0,38 ; 0,63 ; 0,88), alors cela compte. Ensuite :
sur l'entrée 1.0 sur la sortie 1.13 ;
1,25 en entrée et 1,38 en sortie ;
1,5 ---> 1,63...
Au niveau de l'API, cela pourrait être codé en quelques commandes en langage assembleur et il s'agit clairement d'une fonction de base. Je pensais qu'il y en avait un =/
comment faire une mise à jour vers la nouvelle version via Live update. Où est cette mise à jour en direct ?
Merci pour la réponse, je négocie en direct et MT5 est toujours activé. Si le programme lui-même me demande de mettre à jour, c'est bien, mais sinon, où se trouve cette mise à jour Live ?
Bonjour à tous ! Il y a un problème - je ne peux pas utiliser les lectures d'un autre indicateur personnalisé dans un indicateur personnalisé. Je suis presque sûr que je m'y prends mal, mais je vais quand même coller le code :
Dans ce code, le tampon de l'indicateur Rate Of Changes(aRocRatesEURUSD) n'est pas disponible. Je ne comprends pas comment connecter cet indicateur correctement, s'il vous plaît aidez-moi à le comprendre.
Bonjour à tous ! Il y a un problème - je ne peux pas utiliser les lectures d'un autre indicateur personnalisé dans un indicateur personnalisé. Je suis presque sûr que je m'y prends mal, mais je vais quand même coller le code :
Dans ce code, le tampon de l'indicateur Rate Of Changes(aRocRatesEURUSD) n'est pas disponible. Je n'arrive pas à comprendre comment connecter cet indicateur correctement, s'il vous plaît aidez-moi à le comprendre.
Les poignées de l'indicateur doivent être déclarées dans OnInit() :
Sinon, il s'avère que vous créez un nouvel indicateur personnalisé chaque fois que vous appelez OnCalculate().Les poignées de l'indicateur doivent être déclarées dans OnInit() :
Cela ne fonctionne pas non plus. En conséquence, le tableau contenant le tampon est soit vide, soit plein de valeurs gauches.
rates_total, // размер входных таймсерийau tampon
? Cela peut vraiment ralentir le terminal. Et en plus, c'est une histoire très profonde.
Je pense que vous trouverez intéressant de lire l'articleLes principes du recalcul économique des indicateurs
Et lisez aussi l'aide sur la fonction OnCalculate().
OK, même dans le cas le plus simple, ça ne marche pas :
Je ne comprends pas où est mon erreur. La copie du même tampon d'indicateur dans l'EA et le script fonctionne, mais pas dans l'indicateur. Le manche de l'indicateur est initialisé sans erreur.