Mais le code qui s'y trouve ne permet que de vérifier et de récupérer les données de l'indicateur dans les tableaux tampons, et il n'y a pas d'exemple de la façon de travailler avec les données de l'indicateur reçues. J'ai regardé le livre de référence, il y a principalement des exemples de code pour les indicateurs, j'y ai pris setindexbuffer. Je veux savoir dans quel sens il faut "creuser". Je m'en suis lassé hier, j'ai passé une demi-journée ici.
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
Je l'ai déjà essayé. Mais dans l'assistant, elle est générée avec des classes. Je voudrais au moins comprendre le code de manière simple - le code, je le comprends au moins un peu. Pourriez-vous nous indiquer comment corriger le code afin d'obtenir les valeurs de l'indicateur dans l'EA ?
Exemple : Comment obtenir les valeurs de l'indicateur iEnvelopes à partir de l'EA
//+------------------------------------------------------------------+//| Example iEnvelopes values on a chart.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//--- input parametersinputint Input1=9;
//---int handle_iEnvelopes; // variable for storing the handle of the iEnvelopes indicator//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create handle of the indicator iEnvelopes
handle_iEnvelopes=iEnvelopes(Symbol(),Period(),3,0,MODE_LWMA,PRICE_OPEN,0.03);
//--- if the handle is not createdif(handle_iEnvelopes==INVALID_HANDLE)
{
//--- tell about the failure and output the error codePrintFormat("Failed to create handle of the iEnvelopes indicator for the symbol %s/%s, error code %d",
Symbol(),
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped earlyreturn(INIT_FAILED);
}
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---string text="";
double upper[],lower[];
ArraySetAsSeries(upper,true);
ArraySetAsSeries(lower,true);
int start_pos=0,count=3;
if(!iGetArray(handle_iEnvelopes,UPPER_LINE,start_pos,count,upper) ||
!iGetArray(handle_iEnvelopes,LOWER_LINE,start_pos,count,lower))
{
return;
}
string text_upper="",text_lower="";
for(int i=count-1; i>=0; i--)
{
text_upper = text_upper + "Upper"+"["+IntegerToString(i)+"]"+" "+DoubleToString(upper[i],Digits()+1) +" | ";
text_lower = text_lower + "Lower"+"["+IntegerToString(i)+"]"+" "+DoubleToString(lower[i],Digits()+1) +" | ";
}
Comment(text_upper+"\n"+text_lower);
}
//+------------------------------------------------------------------+//| Get value of buffers |//+------------------------------------------------------------------+bool iGetArray(constint handle,constint buffer,constint start_pos,
constint count,double &arr_buffer[])
{
bool result=true;
if(!ArrayIsDynamic(arr_buffer))
{
PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__);
return(false);
}
ArrayFree(arr_buffer);
//--- reset error codeResetLastError();
//--- fill a part of the iBands array with values from the indicator bufferint copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
if(copied!=count)
{
//--- if the copying fails, tell the error codePrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d",
__FILE__,__FUNCTION__,count,copied,GetLastError());
//--- quit with zero result - it means that the indicator is considered as not calculatedreturn(false);
}
return(result);
}
//+------------------------------------------------------------------+
Vladimir, dis-moi s'il te plaît : d'où vient UPPER_LINE et LOWER_LINE? Si nous n'avons que le manche de l'indicateur, l'avons-nous obtenu directement du manche ?
Vladimir, dis-moi s'il te plaît : d'où vient UPPER_LINE et LOWER_LINE? Si nous n'avons obtenu que la poignée de l'indicateur, avons-nous aussi obtenu la poignée en une seule fois ?
Je ne comprends pas votre question. C'est un ensemble de lettres sans signification. Veuillez reformuler votre question - ne vous pressez pas de taper, réfléchissez à votre question et tapez calmement.
Je ne comprends pas votre question. Un ensemble de lettres sans signification. Veuillez reformuler votre question - ne vous précipitez pas, réfléchissez à votre question et tapez calmement.
Après-midi. Lors de l'exécution d'un EA sur la devise GBPUSD, j'ai défini un indicateur dans le code pour EURUSD, l'EA se bloque au démarrage. Cependant, si j'exécute l'EA sur EURUSD et que je spécifie GBPUSD comme indicateur, tout fonctionne. A quoi peut-il être lié ?
Après-midi. Lorsque j'exécute l'EA sur la devise GBPUSD, je règle l'indicateur dans le code pour EURUSD, l'EA se bloque au démarrage. Cependant, si je lance le conseiller expert sur l'EURUSD et que je spécifie GBPUSD comme indicateur, tout fonctionne. A quoi cela peut-il être dû ?
1. Générez un EA en utilisant l'assistant MQL5 - par exemple, spécifiez 'GBPUSD' pour l'EA et 'EURUSD' pour le module de signaux. Vous obtiendrez un exemple de code DROIT. Étudiez le code. À l'avenir, évitez simplement l'édition manuelle et générez le code à l'aide de l'assistant MQL5.
2. Si vous avez spécifié 'GBPUSD' pour un EA, vous devez exécuter cet EA UNIQUEMENT sur 'GBPUSD'.
1. Générez un EA en utilisant l'assistant MQL5 - spécifiez par exemple 'GBPUSD' pour l'EA et 'EURUSD' pour le module de signal. Vous obtiendrez un exemple de code DROIT. Étudiez le code. À l'avenir, évitez simplement l'édition manuelle et générez le code à l'aide de l'assistant MQL5.
2. Si vous avez spécifié 'GBPUSD' pour un Expert Advisor, alors vous devez exécuter cet EA UNIQUEMENT sur 'GBPUSD'.
Vladimir, j'ai généré le code en utilisant l'assistant MQL5. J'ai essayé votre EA, il ne fonctionne pas non plus pour moi lorsque je l'exécute sur la devise GBPUSD.
Il est indiqué ce qui suit dans le journal :
2020.08.16 13:01:20.793 Core 1 EURUSD: symbol to be synchronized
2020.08.16 13:01:20.793 Core 1 EURUSD: symbol synchronized already, 18 bytes received
2020.08.16 13:01:20.793 Core 1 2018.01.01 00:00:00 cannot load indicator 'Accelerator Oscillator' [4804]
2020.08.16 13:01:20.793 Core 1 2018.01.01 00:00:00 CSignalAC::InitAC: error initializing object
2020.08.16 13:01:20.793 Core 1 2018.01.01 00:00:00 CExpert::InitIndicators: error initialization indicators of signal object
2020.08.16 13:01:20.793 Core 1 2018.01.01 00:00:00 OnInit: error initializing indicators
2020.08.16 13:01:20.793 Core 1 tester stopped because OnInit returns non-zero code 1
Je me suis appuyé à l'origine sur cet article: https://www.mql5.com/ru/articles/43.
Mais le code qui s'y trouve ne permet que de vérifier et de récupérer les données de l'indicateur dans les tableaux tampons, et il n'y a pas d'exemple de la façon de travailler avec les données de l'indicateur reçues. J'ai regardé le livre de référence, il y a principalement des exemples de code pour les indicateurs, j'y ai pris setindexbuffer. Je veux savoir dans quel sens il faut "creuser". Je m'en suis lassé hier, j'ai passé une demi-journée ici.
Je l'ai déjà essayé. Mais dans l'assistant, elle est générée avec des classes. Je voudrais au moins comprendre le code de manière simple - le code, je le comprends au moins un peu. Pourriez-vous nous indiquer comment corriger le code afin d'obtenir les valeurs de l'indicateur dans l'EA ?
Exemple : Comment obtenir les valeurs de l'indicateur iEnvelopes à partir de l'EA
Résultat :
Exemple : comment obtenir les valeurs de l'indicateur iEnvelopes à partir d'un EA
Merci beaucoup ! Je vais m'en occuper !
Vladimir, dis-moi s'il te plaît : d'où vient UPPER_LINE et LOWER_LINE? Si nous n'avons que le manche de l'indicateur, l'avons-nous obtenu directement du manche ?
Vladimir, dis-moi s'il te plaît : d'où vient UPPER_LINE et LOWER_LINE? Si nous n'avons obtenu que la poignée de l'indicateur, avons-nous aussi obtenu la poignée en une seule fois ?
Je ne comprends pas votre question. C'est un ensemble de lettres sans signification. Veuillez reformuler votre question - ne vous pressez pas de taper, réfléchissez à votre question et tapez calmement.
Je ne comprends pas votre question. Un ensemble de lettres sans signification. Veuillez reformuler votre question - ne vous précipitez pas, réfléchissez à votre question et tapez calmement.
Dans l'argument de la fonction :
iGetArray(handle_iEnvelopes,UPPER_LINE,start_pos,count,upper)vous avez utilisé UPPER_LINE.
D'où vient cette valeur de paramètre, de la poignée que vous avez obtenue plus tôt :
?
Dans l'argument de la fonction :
vous avez utilisé UPPER_LINE.
D'où vient la valeur de ce paramètre, de la poignée de main reçue précédemment :
?
Non. Cette valeur est tirée de l'aide d'iEnvelopes.
Après-midi. Lors de l'exécution d'un EA sur la devise GBPUSD, j'ai défini un indicateur dans le code pour EURUSD, l'EA se bloque au démarrage. Cependant, si j'exécute l'EA sur EURUSD et que je spécifie GBPUSD comme indicateur, tout fonctionne. A quoi peut-il être lié ?
Après-midi. Lorsque j'exécute l'EA sur la devise GBPUSD, je règle l'indicateur dans le code pour EURUSD, l'EA se bloque au démarrage. Cependant, si je lance le conseiller expert sur l'EURUSD et que je spécifie GBPUSD comme indicateur, tout fonctionne. A quoi cela peut-il être dû ?
1. Générez un EA en utilisant l'assistant MQL5 - par exemple, spécifiez 'GBPUSD' pour l'EA et 'EURUSD' pour le module de signaux. Vous obtiendrez un exemple de code DROIT. Étudiez le code. À l'avenir, évitez simplement l'édition manuelle et générez le code à l'aide de l'assistant MQL5.
2. Si vous avez spécifié 'GBPUSD' pour un EA, vous devez exécuter cet EA UNIQUEMENT sur 'GBPUSD'.
1. Générez un EA en utilisant l'assistant MQL5 - spécifiez par exemple 'GBPUSD' pour l'EA et 'EURUSD' pour le module de signal. Vous obtiendrez un exemple de code DROIT. Étudiez le code. À l'avenir, évitez simplement l'édition manuelle et générez le code à l'aide de l'assistant MQL5.
2. Si vous avez spécifié 'GBPUSD' pour un Expert Advisor, alors vous devez exécuter cet EA UNIQUEMENT sur 'GBPUSD'.
Vladimir, j'ai généré le code en utilisant l'assistant MQL5. J'ai essayé votre EA, il ne fonctionne pas non plus pour moi lorsque je l'exécute sur la devise GBPUSD.
Il est indiqué ce qui suit dans le journal :