J'obtiens la valeur exacte, mais je n'arrive pas à faire en sorte que la valeur de "Obem_Pozic" soit de 1,00, afin que je puisse calculer le lot pour l'afficher, je ne veux pas le normaliser, il faut juste donner 4 décimales.
J'écris en MQL4.
Je pose la question du MQL4 sur le forum approprié, ici c'est un A.
Vous devriez utiliser DoubleToStr() pour afficher des valeurs plus précises à l'écran.
Cette paire est probablement fournie par la borne, il suffit de la connecter. Si c'est manuellement, alors dans Market Watch. Et si vous êtes un adulte, vous devez utiliser SymbolSelect().
Dès que vous avez une erreur, les autres suivent. Les premières erreurs se trouvent au bas du terminal. Donc, nous devrions essayer d'éliminer les premières erreurs et ensuite nous verrons :)
Merci ! !! Très bien compris et magnifiquement écrit. J'ai bien SymbolSelect() dans mon EA. Je l'ai posté avec le code en pg. 53, si vous en avez besoin, vous pouvez le voir. J'ai vérifié avec l'aide - c'est correct ! !! Alors, si cette paire est fournie par le terminal, que dois-je penser ?
De plus, si les erreurs du First in line se trouvent au bas du terminal. Pourquoi les messages d'erreur de l'imprimante et les messages du terminal n'alternent-ils pas - non, ils sont regroupés ?
Peut-être que le terminal ne rapporte pas l'erreur de cette fonction ?
Apparemment pas celui-là ! !! Ou celui-là, mais pas comme ça. Au début, les messages du programme (imprimantes) et les messages du terminal alternent vraiment, et puis soudain - et 10-12 fois tout d'un coup l'erreur 4002 même apparaît !!!
Pouvez-vous me dire à quoi doit ressembler l'impression à durée variable, peut-elle être numérique ? Je vois un, je veux dire le numéro un est affiché.
///////////////////////////////////////////////////////////////////////////////////////////////////////double iMAf( string symbol, ENUM_TIMEFRAMES timeframe, int period, int mama_shift, ENUM_MA_METHOD mama_method, int applied_pricece, int shift){
Print ( " iMAfsymbol ",symbol," iMAftimeframe ",timeframe," iMAfperiod ",period," iMAfmama_shift ",mama_shift ," iMAfmama_method ",mama_method,
" iMAfapplied_pricece ", applied_pricece," iMAfshift ",shift);
MA_handle=iMA(symbol,timeframe,periodd(period),mama_shift, mama_method,applied_pricece);Sleep(2000);
//--- если не удалось создать хэндлif(MA_handle==INVALID_HANDLE)
{
//--- сообщим о неудаче и выведем номер ошибкиPrintFormat("Не удалось создать хэндл индикатора iMA для пары %s/%s, код ошибки %d",
symbol,
EnumToString(timeframe),
GetLastError()); ResetLastError();return (0.0);}
CopyBuffer( MA_handle,0,0,100,MA);
ArraySetAsSeries(MA,true);
if(shift>99) return(0);
return( (MA[shift])); }
///////////////////////////////////////////////////////////////////////////////////////////////////////
Je demande pourquoi. C'est une fonction, elle a une ligne avec les empreintes. Le deuxième en partant du haut en conséquence.
/////////////////////////////////////////////////////////////////////
int Distance_from_MA(string symbb)
{
double MAMA = iMAf( symbb, periodd(TFMA), periodMA, ma_shift, ma_method, applied_price, 0);
int spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD));
double point = SymbolInfoDouble(symbb,SYMBOL_POINT);
if(SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 3 || SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 5)
{spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)/10);
point = SymbolInfoDouble(symbb,SYMBOL_POINT)*10;}
if(iClose(symb,TF_Price,0)+(spread*point)+(Min_Distance_from_MA*point)<=MAMA) return(-1);
if(iClose(symb,TF_Price,0)-(Min_Distance_from_MA*point)>=MAMA) return (1);
return(0);
}
////////////////////////////////////////////////////////////////////
Notez que j'utilise une autre fonction dans la ligne d'appel. Il est utilisé pour condamner le délai. Il en est ainsi parce que mon Expert Advisor a été pyrividé de 4. J'ai utilisé l'ouvre-boîte. Plus tard, juste au cas où, j'ai ajouté F à F4 timeframes pour l'utiliser davantage.
Dimka-novitsek: Dites-moi, s'il vous plaît, à quoi doit ressembler l'impression de la variable du délai, peut-elle être numérique ? Je vois un, je veux dire le numéro un est affiché.
Eh bien, juste en dessous dans ce code est utilisé
Dimka-novitsek: Merci ! Laissez-moi le regarder à nouveau.
Je pense que j'ai trouvé d'où peut venir le problème. Je vais la décrire maintenant.
Sur l'image, vous pouvez voir que l'EA fonctionne sur M1, timeframe==1, period==140. Est-ce correct ?
La valeur timeframe==1 indique très probablement que timeframe==M1. En même temps, l'entrée periodd(period) signifie periodd(140). Selon le code, la fonction periodd(140) doit retourner la valeur PERIOD_CURRENT. Il s'avère donc que periodd(140)==M1. Et cela signifie que l'appel iMA ressemble à ceci : iMA(symbol,M1,M1...) Je ne sais pas s'il est acceptable, lors du calcul de iMA, que la valeur du deuxième argument coïncide avec la valeur du troisième argument (c'est-à-dire que la période coïncide avec la période de calcul de la moyenne), mais quelque chose me dit que c'est faux.
J'obtiens la valeur exacte, mais je n'arrive pas à faire en sorte que la valeur de "Obem_Pozic" soit de 1,00, afin que je puisse calculer le lot pour l'afficher, je ne veux pas le normaliser, il faut juste donner 4 décimales.
J'écris en MQL4.
Je pose la question du MQL4 sur le forum approprié, ici c'est un A.
Vous devriez utiliser DoubleToStr() pour afficher des valeurs plus précises à l'écran.
Cette paire est probablement fournie par la borne, il suffit de la connecter. Si c'est manuellement, alors dans Market Watch. Et si vous êtes un adulte, vous devez utiliser SymbolSelect().
Dès que vous avez une erreur, les autres suivent. Les premières erreurs se trouvent au bas du terminal. Donc, nous devrions essayer d'éliminer les premières erreurs et ensuite nous verrons :)
Merci ! !! Très bien compris et magnifiquement écrit. J'ai bien SymbolSelect() dans mon EA. Je l'ai posté avec le code en pg. 53, si vous en avez besoin, vous pouvez le voir. J'ai vérifié avec l'aide - c'est correct ! !! Alors, si cette paire est fournie par le terminal, que dois-je penser ?
De plus, si les erreurs du First in line se trouvent au bas du terminal. Pourquoi les messages d'erreur de l'imprimante et les messages du terminal n'alternent-ils pas - non, ils sont regroupés ?
Peut-être que le terminal ne rapporte pas l'erreur de cette fonction ?
Oui, je peux voir ça. Essayons de cette façon :
Merci ! !! ! !
Pouvez-vous me dire à quoi doit ressembler l'impression à durée variable, peut-elle être numérique ? Je vois un, je veux dire le numéro un est affiché.
Je demande pourquoi. C'est une fonction, elle a une ligne avec les empreintes. Le deuxième en partant du haut en conséquence.
Voici l'appel de la fonction.
///////////////////////////////////////////////////////////////////// int Distance_from_MA(string symbb) { double MAMA = iMAf( symbb, periodd(TFMA), periodMA, ma_shift, ma_method, applied_price, 0); int spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)); double point = SymbolInfoDouble(symbb,SYMBOL_POINT); if(SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 3 || SymbolInfoInteger(symbb,SYMBOL_DIGITS) == 5) {spread = (int) MathRound(SymbolInfoInteger(symbb,SYMBOL_SPREAD)/10); point = SymbolInfoDouble(symbb,SYMBOL_POINT)*10;} if(iClose(symb,TF_Price,0)+(spread*point)+(Min_Distance_from_MA*point)<=MAMA) return(-1); if(iClose(symb,TF_Price,0)-(Min_Distance_from_MA*point)>=MAMA) return (1); return(0); } ////////////////////////////////////////////////////////////////////Notez que j'utilise une autre fonction dans la ligne d'appel. Il est utilisé pour condamner le délai. Il en est ainsi parce que mon Expert Advisor a été pyrividé de 4. J'ai utilisé l'ouvre-boîte. Plus tard, juste au cas où, j'ai ajouté F à F4 timeframes pour l'utiliser davantage.
Et voici ce que je vois
Eh bien, juste en dessous dans ce code est utilisé
EnumToString(timeframe),Je pense que j'ai trouvé d'où peut venir le problème. Je vais la décrire maintenant.
Sur l'image, vous pouvez voir que l'EA fonctionne sur M1, timeframe==1, period==140. Est-ce correct ?
La valeur timeframe==1 indique très probablement que timeframe==M1. En même temps, l'entrée periodd(period) signifie periodd(140). Selon le code, la fonction periodd(140) doit retourner la valeur PERIOD_CURRENT. Il s'avère donc que periodd(140)==M1.
Et cela signifie que l'appel iMA ressemble à ceci : iMA(symbol,M1,M1...) Je ne sais pas s'il est acceptable, lors du calcul de iMA, que la valeur du deuxième argument coïncide avec la valeur du troisième argument (c'est-à-dire que la période coïncide avec la période de calcul de la moyenne), mais quelque chose me dit que c'est faux.