Questions des débutants MQL5 MT5 MetaTrader 5 - page 964

 
vladzeit:

Merci pour cet exemple.

Pourriez-vous clarifier... si j'ai bien compris.

Avec ceci=(datetime)OrderGetInteger. nous demandons à OrderGetInteger de prendre le typedatetimeexplicite. ?

Cette règle s'applique-t-elle à toutes les fonctions qui n'ont pas de type explicite ou qui ne correspondent pas au type de la variable assignée, ou s'agit-il d'un cas particulier ?

Je veux savoir s'il s'agit d'une règle ou s'il faut simplement s'en souvenir comme d'un cas particulier.

Il ne s'agit pas d'un cas particulier. Si vous écrivez une valeur d'un type différent dans une variable d'un type, le compilateur vous en avertira. Et c'est à vous de décider de quelle variable tirer les données.

Dans votre cas - lorsque vous renvoyez une valeur de date explicite à partir d'une fonction avec le type long, bien sûr, c'est sûr et vous devez spécifier explicitement le type de valeur que vous obtenez de la fonction.

Mais si vous prenez une valeur double en int-variable, alors c'est à vous de comprendre si les données ne seront pas perdues par une telle affectation. Si vous savez avec certitude que la valeur de retour tiendra dans un int, alors spécifiez int explicitement, si vous ne le savez pas, alors prenez-la comme une variable double.

 
Artyom Trishkin:

Il ne s'agit pas d'un cas particulier. Si vous écrivez une valeur d'un autre type dans une variable d'un type, le compilateur vous en avertira. Et c'est à vous de décider de la variable dont vous voulez tirer des données.

Dans votre cas - lorsque vous renvoyez une valeur de date explicite à partir d'une fonction avec le type long, bien sûr, c'est sûr et vous devez spécifier explicitement le type de la valeur que vous obtenez de la fonction.

Mais si vous prenez une valeur double dans une variable int, alors vous devez comprendre vous-même qu'aucune donnée ne sera perdue pendant cette affectation. Si vous êtes sûr que la valeur retournée tiendra dans un int, spécifiez int explicitement, si vous ne le savez pas, prenez-la dans une variable double.

Merci pour cette réponse détaillée. Je l'ai.

 

(Bon après-midi à vous tous)))


J'ai maîtrisé MT4, mais MT5 .... je ne comprends pas((( Il n'y a pas beaucoup d'exemples, et ceux qui ne le sont pas expliquent ce dont j'ai besoin.

Veuillez me conseiller sur la manière d'utiliser MT5 avec des exemples de code MT4 ou me donner des liens vers des indicateurs présentant des cas similaires.


1.

if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)


2.

while(A<1)
  {
   ObjectDelete("MB");
   OP=iOpen(NULL,Timeframe,br);
   CL=iClose(NULL,Timeframe,br);
 if(OP>CL)
   bear=(OP-CL)/_Point;
 if(SizeCandles*FactorCandleы <= bear)
   A=2;
 if(br>iBars(NULL,Timeframe))
  {
   Lab("MB", " No Bear candle", 4, 510, 1, clrWhite);
   break;
  }
   br++;
  }


3. je ne comprends pas comment faire une comparaison d'éléments avec la poignée iMa... Je connais les structures ! !! Je l'ai essayé, mais MT5 n'est pas aussi clair que MT4...

   
 for(int i=limit; i>0 && !IsStopped(); i--)
   {
   ma1=iMA(NULL,Period(),Ma1,0,MAMethod1,MAPrice1,i);
   ma2=iMA(NULL,Period(),Ma2,0,MAMethod2,MAPrice2,i);
   ma3=iMA(NULL,Period(),Ma3,0,MAMethod3,MAPrice3,i);
   ma4=iMA(NULL,Period(),Ma4,0,MAMethod4,MAPrice4,i);
   MA=iMA(NULL,Period(),MAPeriod,0,MAMethod,MAPrice,i);
//----
 if(filtercase==true && xPer==Period())
  {
//--- High signal
 if(Open[i]<Close[i] && MA>Open[i] && MA<Close[i] && ma1>ma2 && ma1<ma3 && MA<ma4)  
   ExtLineBuffer1[i]=High[i]+shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer1[i]=0.0;
//--- Low signal
 if(Open[i]>Close[i] && MA<Open[i] && MA>Close[i] && ma1<ma2 && ma1>ma3 && MA>ma4)  
   ExtLineBuffer2[i]=Low[i]-shiftmap*_Point;
 if(ShowPeriod==false && xPeriod==Period())
   ExtLineBuffer2[i]=0.0;
  } 
 

Les différences générales de la programmation dans MT5 sont déjà comprises ! Mais je ne sais pas encore programmer (les dés ne s'additionnent pas). )))))

Il est important pour moi d'ÉCOUTER dans ma tête ces parties et modules de MT5..... Je comprends rapidement la logique dans MT4, mais MT5 ne fait que "dé".....

Merci pour les conseils))))

 
Veuillez changer le lot fixe de mon robot en lot en %. Le code est dans mon message privé.
 
Sprut112:
Veuillez changer le lot fixe de mon robot en lot en %. Code en privé.

Freelance.

 
kopeyka2:

(Bon après-midi à vous tous)))


J'ai maîtrisé MT4, mais MT5 .... je ne comprends pas((( Il n'y a pas beaucoup d'exemples, et ceux qui ne le sont pas expliquent ce dont j'ai besoin.

Veuillez me conseiller sur la manière d'utiliser MT5 avec des exemples de code MT4 ou me donner des liens vers des indicateurs présentant des cas similaires.


1.


2.


3. je ne comprends pas comment faire une comparaison d'éléments avec la poignée iMa... Je connais les structures ! !! Je l'ai essayé, mais MT5 n'est pas aussi clair que MT4...

Les différences générales de la programmation dans MT5 sont déjà comprises ! Mais je ne sais pas encore programmer (les dés ne s'additionnent pas). )))))

Il est important pour moi d'ÉCOUTER dans ma tête ces parties et modules de MT5..... Je comprends rapidement la logique dans MT4, mais MT5 ne fait que "dé".....

Merci pour les conseils))))

Tout d'abord, lisez attentivement la documentation. La section"Accès aux séries chronologiques et aux indicateurs".

Il devrait être clair comment obtenir l'heure, la "mettre" dans la structure, et ensuite obtenir l'heure et la minute séparément.

Il y a aussi CopyBuffer pour récupérer les valeurs des indicateurs par son handle.

Si vous avez encore des questions...


 
kopeyka2:

(Bon après-midi à vous tous)))


J'ai maîtrisé MT4, mais MT5 .... je ne comprends pas((( Il n'y a pas beaucoup d'exemples, et ceux qui ne le sont pas expliquent ce dont j'ai besoin.

Veuillez me conseiller sur la manière d'utiliser MT5 avec des exemples de code MT4 ou me donner des liens vers des indicateurs présentant des cas similaires.


1.


2.


3. je ne comprends pas comment faire une comparaison d'éléments avec la poignée iMa... Je connais les structures ! !! Je l'ai essayé, mais MT5 n'est pas aussi clair que MT4...

Les différences générales de la programmation dans MT5 sont déjà comprises ! Mais je ne sais pas encore programmer (les dés ne s'additionnent pas). )))))

Il est important pour moi d'ÉCOUTER dans ma tête ces parties et modules de MT5..... Dans MT4, je comprends rapidement la logique, mais MT5 ne fait que "cuber" .....

Merci pour les conseils))))

Si vous avez besoin de comparer plusieurs séries temporelles d'une même période, travaillez avec un tableau commeMqlRates-> et utilisezCopyRates pour remplir ce tableau.

Il est pratique de stocker l'heure dans une structureMqlDateTime-> utilisezTimeToStruct pour convertir l'heure de ladate à la structureMqlDateTime.

Maintenant, votre exemple 1 ressemblera à ceci :

//+------------------------------------------------------------------+
//|                                                      Test_en.mq5 |
//+------------------------------------------------------------------+
#property script_show_inputs
//--- input parameters
int InpBarTime=3; // Bar where we compare the time
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);

   int start_pos  =0;                           // start position 
   int count=(InpBarTime<10)?10:InpBarTime+1;   // data count to copy 

   int result=CopyRates(Symbol(),Period(),start_pos,count,rates);
   if(result!=count)
     {
      Print("Ordered: ",IntegerToString(count),", received ",IntegerToString(result));
     }

//--- example 1
// if(Period()<=PERIOD_H4 && TimeHour(Time[h])==0 && TimeMinute(Time[h])==0)
   MqlDateTime SDateTime;
   TimeToStruct(rates[InpBarTime].time,SDateTime); // Converts a value of datetime type into a structure variable MqlDateTime
   if(Period()<=PERIOD_H4 && SDateTime.hour==0 && SDateTime.min==0)
     {

     }
  }
//+------------------------------------------------------------------+
Dossiers :
Test_en.mq5  3 kb
 
Dites-moi s'il y a une règle.
Dans mql5, une même tâche peut être résolue de plusieurs façons.
Si je fais référence à une instance d'une classe dans un code, par exemple : CSymbolInfo. m_symbol.Ask()... et ainsi de suite.
et dans le même code, j'assigne une valeur Ask sans référence à la classe, par ex.
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits) ;

Question : cela provoque-t-il des erreurs ou est-ce normal dans les limites d'un code ou même d'une fonction ?

 
kopeyka2:

(Bon après-midi à vous tous)))


J'ai maîtrisé MT4, mais MT5 .... je ne comprends pas((( Il n'y a pas beaucoup d'exemples, et ceux qui ne le sont pas expliquent ce dont j'ai besoin.

Veuillez me conseiller sur la manière d'utiliser MT5 avec des exemples de code MT4 ou me donner des liens vers des indicateurs présentant des cas similaires.


1.


2.


3. je ne comprends pas comment faire une comparaison d'éléments avec la poignée iMa... Je connais les structures ! !! Je l'ai essayé, mais MT5 n'est pas aussi clair que MT4...

Les différences générales de la programmation dans MT5 sont déjà comprises ! Mais je ne sais pas encore programmer (les dés ne s'additionnent pas). )))))

Il est important pour moi d'ÉCOUTER dans ma tête ces parties et modules de MT5..... Dans MT4, je comprends rapidement la logique, mais MT5 ne fait que "cuber" .....

Merci pour les conseils))))

Travailler avec des indicateurs - en utilisant le codeMA Force comme exemple

Étape 1 : au niveau du programme global, déclarer la variable handle_iMA, qui stockera le handle de l'indicateur.

int    handle_iMA;                           // variable for storing the handle of the iMA indicator

Etape 2 : créer un indicateur dans OnInit() et retourner la variablehandle_iMA

//--- create handle of the indicator iMA
   handle_iMA=iMA(m_symbol.Name(),Inp_MA_period,Inp_MA_ma_period,Inp_MA_ma_shift,
                  Inp_MA_ma_method,Inp_MA_applied_price);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Inp_MA_period),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }

Étape 3 : faire une requête dans OnTick() - copier une certaine quantité de données(compte) de l'indicateur dans le tableauma[].

   double ma[],force[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(force,true);
   int start_pos=0,count=InpTrendBars+3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) || 
      !iGetArray(handle_iForce,0,start_pos,count,force))
     {
      PrevBars=0;
      return;
     }

Étape 4 : travaillez avec le tableau de données de l'indicateur et comparez ses éléments :

   bool trend_up=(ma[1]>ma[2]);
   bool trend_down=(ma[1]<ma[2]);
 
vladzeit:
Dites-moi s'il y a une règle.
Dans mql5, une même tâche peut être résolue de plusieurs façons.
Si je fais référence à une instance d'une classe dans un code, par exemple : CSymbolInfo. m_symbol.Ask()... et ainsi de suite.
et dans le même code, j'assigne une valeur Ask sans référence à la classe, par ex.
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits) ;

Question : cela provoque-t-il des erreurs ou est-ce normal dans les limites d'un code ou même d'une fonction ?

Il est préférable de ne pas être confus et d'utiliser une seule approche : soit la classe commercialeCSymbolInfo, soit les fonctions du système comme SymbolInfoXXXX.